Page MenuHomec4science

No OneTemporary

File Metadata

Created
Sat, Jul 27, 18:32
This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/HiddenCode/hidden_code_nb_deflection.py b/HiddenCode/hidden_code_nb_deflection.py
index f9be657..e042572 100644
--- a/HiddenCode/hidden_code_nb_deflection.py
+++ b/HiddenCode/hidden_code_nb_deflection.py
@@ -1,1025 +1,1033 @@
import math
import numpy as np
from bokeh.layouts import layout, column, row
from bokeh.models.annotations import Label, Arrow
from bokeh.models.arrow_heads import VeeHead
-from bokeh.models import Div, CustomJS, Slider, Spacer, Text
+from bokeh.models import Div, CustomJS, Slider, Spacer, Text, HoverTool
from bokeh.models.widgets import RadioButtonGroup, CheckboxButtonGroup
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_notebook
from cienpy import simplebeam as sb
from cienpy import rectangular_section as beam_section
from cienpy import stress_strain_elastic as stst
from cienpy import models
from cienpy import javascriptcodes as js
output_notebook()
def main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, E_steel, fy, fy_steel, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr):
########################################################
# Initialisation
########################################################
# constants for the visualisation
SCALE = 10
OFFSET_Q = q
MAX_B = 3*b
MAX_H = 3*h
MAX_Q = q/4*5
SCALE_DEFL = 100
# store the values in a specific format
data_beam = dict(
x=[0, L],
y=[0, 0]
)
data_scheme_beam = dict(
x=[0, L*SCALE],
y=[0, 0]
)
data_scheme_q = dict(
x=[0, 0, L*SCALE, L*SCALE],
y=[OFFSET_Q, OFFSET_Q+q, OFFSET_Q+q, OFFSET_Q],
x_fade=[0, 0, L*SCALE, L*SCALE]
)
data_section_scheme = dict(
x=[0, 0],
y=[0, h]
)
initial_position = L
initial_state = 'IDLE' # possible cases: IDLE, R_SEC, L_SEC
initial_FBD = 0 # right=0 left=1
data = dict( # stores every useful single variable
state=[initial_state],
FBD=[initial_FBD],
SCALE=[SCALE],
L=[L],
b=[b],
h=[h],
E=[E],
A=[A],
Iy=[Iy],
Iz=[Iz],
yG=[yG],
y_n_axis=[y_n_axis],
P=[P],
x=[initial_position],
y=[0],
q=[q],
Rx=[Rx],
Ry_l=[Ry_l],
Ry_r=[Ry_r],
N=[N],
V=[V],
M=[M],
xF=[L*SCALE]
)
source_beam = ColumnDataSource(data_beam)
source_scheme_beam = ColumnDataSource(data_scheme_beam)
source_scheme_q = ColumnDataSource(data_scheme_q)
source_section_scheme = ColumnDataSource(data_section_scheme)
source = ColumnDataSource(data)
########################################################
# Define figures, widgets and renderers as from the previous notebook
########################################################
FIG_H_B = 200 # height figure beam
FIG_B_B = 700 # width figure beam
FIG_H_S = FIG_H_B # height figure scheme
FIG_B_S = FIG_B_B # width figure scheme
FIG_H_SEC = 600 # height figure section
DIV_B_GEO = 170
DIV_B_FORCES = 170
options = dict(
toolbar_location=None
)
# figure for the beam
paddingx = 0.2*L
int_x_b = (0-paddingx, L+paddingx)
int_y_b = (-OFFSET_Q/SCALE*SCALE_DEFL, (MAX_Q+OFFSET_Q)/SCALE*SCALE_DEFL)
fig_beam = sb.define_fig_beam(int_x_b, int_y_b, options,
f_h=FIG_H_B, f_b=FIG_B_B)
# figure for the cross-section
fig_section = sb.define_fig_section(MAX_B*0.8, MAX_H*0.8, options, FIG_H_SEC)
# beam
(beam, support_l, support_r) = sb.draw_beam(fig_beam, source_beam, L,
ratio = (int_y_b[1]-int_y_b[0])/FIG_H_B*100)
# section
section = beam_section.draw_section(fig_section, b, h)
# show mechanical parameters
div_geo = Div(width= DIV_B_GEO,
text=beam_section.div_text_geo(round(h), round(b), round(L),
"{:.2e}".format(A),
"{:.2e}".format(Iy),
"{:.2e}".format(Iz)))
# change geometry
slider_b = Slider(
title="Change the width b [mm]",
start=10,
end=MAX_B,
step=10,
value=b
)
slider_h = Slider(
title="Change the height h [mm]",
start=20,
end=MAX_H,
step=20,
value=h
)
# reference system
axis_arrow_length = 0.8
axis_arrow_scale = 100
models.force_vector(fig_section, axis_arrow_length*10, 0, 0, 0, axis_arrow_length*axis_arrow_scale*1.6, 'gray') # y axis
fig_section.text(x=[0], y=[axis_arrow_length*axis_arrow_scale*1.7], text=["y"], text_color='gray', text_baseline='middle', angle=math.pi/2)
models.force_vector(fig_section, axis_arrow_length*10, 0, -axis_arrow_length*axis_arrow_scale, 0, 0, 'gray') # z axis
fig_section.text(x=[-axis_arrow_length*axis_arrow_scale*1.1], y=[0], text=["z"], text_color='gray', text_align='right', text_baseline='middle')
# figure for the forces and moments
fig_scheme = sb.define_figure_scheme(L, SCALE, MAX_Q, OFFSET_Q, options, FIG_H_S, FIG_B_S)
# uniform load (beam)
u_load = fig_beam.rect([L/2], [(q/2+OFFSET_Q)/SCALE*SCALE_DEFL], width=L, height=q/SCALE*SCALE_DEFL,
fill_color='blue', color='navy', fill_alpha=0.6, alpha=0.6)
label_u_load = fig_beam.text(x=[-0.2], y=[OFFSET_Q/SCALE*SCALE_DEFL], text=["q"], text_color="blue")
# axial force (beam)
axial_force = models.force_vector(fig_beam, P, L+P/SCALE, L, 0, 0, 'green')
label_P_force = fig_beam.text(x=[L+P/2/SCALE], y=[OFFSET_Q/SCALE/2*SCALE_DEFL], text=["P"], text_color="green")
# position point
pos_opt = dict(
source=source,
size=10,
fill_alpha=0.5,
fill_color="magenta",
color="magenta",
alpha=0.5
)
# CHAGED: moved below for correct display order of glyphs
# beam_position = fig_beam.circle('x', 'y', **pos_opt)
forces_position = fig_scheme.circle('xF', 'y', **pos_opt)
# beam (scheme)
scheme_beam = fig_scheme.line('x', 'y', source=source_scheme_beam, line_width=2, color='black')
scheme_fade_beam = fig_scheme.line(x=[0, L*SCALE], y=[0, 0], line_width=2, color='black', alpha=0.2)
# uniform load (scheme)
scheme_u_load = fig_scheme.patch('x', 'y', source=source_scheme_q, fill_color='blue', color='navy',
fill_alpha=0.3, alpha=0.3)
scheme_fade_u_load = fig_scheme.patch('x_fade', 'y', source=source_scheme_q, fill_color='blue',
color='navy', fill_alpha=0.3, alpha=0.3)
# axial force (scheme)
scheme_axial_force = models.force_vector(fig_scheme, P, L*SCALE+P, L*SCALE, 0, 0, 'green')
# Reactions (scheme)
scheme_Ry_r = models.force_vector(fig_scheme, Ry_r, L*SCALE, L*SCALE, -Ry_r, 0, 'orange')
scheme_Ry_l = models.force_vector(fig_scheme, Ry_l, 0, 0, -Ry_l, 0, 'orange')
scheme_Rx_l = models.force_vector(fig_scheme, Rx, -Rx, 0, 0, 0, 'orange')
# force N
scheme_N = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# force V
scheme_V = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# moment M
(scheme_M_line, scheme_M_head, source_M) = models.define_curvedArrow(fig_scheme, 0, 0, 0, size_head=0)
# change the uniform load q
slider_q = Slider(
title="Change the uniform load q [kN/m]",
start=0.1,
end=MAX_Q,
step=0.1,
value=q
)
# choose position of interest
slider_position = Slider(
title="Change the position x along the beam [m]",
start=0,
end=L,
step=0.02,
value=L
)
# choose left or right FBD
div_rg_FBD = Div(text="Free-body diagram (FBD):")
radiogroup_FBD = RadioButtonGroup(labels=['Right-hand', 'Left-hand'], active=initial_FBD)
# choose axial force or not
div_cb_P = Div(text=f"Axial force P={P} kN (applied)")
checkbox_P = CheckboxButtonGroup(labels=['Apply or remove axial force P'], active=[0])
# show values of forces and moments
div_forces = Div(width=DIV_B_FORCES,
text=sb.div_text_forces(P, P, Ry_l, Ry_r, "No cross section analysed.", 0, 0, 0))
# figures for the diagrams
options_diag = dict(
toolbar_location=None,
x_axis_label="Position [m]",
plot_width=FIG_B_B,
x_range=fig_beam.x_range
)
fig_N = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Axial force", "@y kN")],
y_axis_label="Axial force N [kN]",
plot_height=int(FIG_H_B*0.8),
title="N V M Diagrams")
fig_V = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Shear force", "@y kN")],
y_axis_label="Shear force V [kN]",
plot_height=int(FIG_H_B*0.8))
fig_M = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Bending moment", "@y kNm")],
y_axis_label="Bending moment M [kNm]",
plot_height=FIG_H_B)
fig_N.xaxis.visible = False
fig_V.xaxis.visible = False
# plot N V M
N_diag = models.NVM_diagram(fig_N, x_discr, N_discr, L, source_beam)
+ fig_N.add_tools(HoverTool(renderers=[N_diag],
+ tooltips= [("Position", "@x m"), ("Axial force", "@y kN")]))
+
V_diag = models.NVM_diagram(fig_V, x_discr, V_discr, L, source_beam)
+ fig_V.add_tools(HoverTool(renderers=[V_diag],
+ tooltips= [("Position", "@x m"), ("Shear force", "@y kN")]))
+
M_diag = models.NVM_diagram(fig_M, x_discr, M_discr, L, source_beam)
+ fig_M.add_tools(HoverTool(renderers=[M_diag],
+ tooltips= [("Position", "@x m"), ("Bending moment", "@y kNm")]))
# point that shows the position that it's analyzed
N_position = fig_N.circle('x', 'N', **pos_opt)
V_position = fig_V.circle('x', 'V', **pos_opt)
M_position = fig_M.circle('x', 'M', **pos_opt)
# figures for the stresses and strains
FIG_B_ss = 200
FIG_H_ss = 200
options_stress_strain = dict(
toolbar_location=None,
y_axis_label="Height h [mm]",
plot_width=FIG_B_ss,
plot_height=FIG_H_ss
)
fig_stress_N = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Axial stress",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2099 [MPa]")
fig_stress_N.yaxis.visible = False
fig_axial_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Axial strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2099 [%]",
y_range=fig_stress_N.y_range)
fig_axial_strain.yaxis.visible = False
fig_stress_M = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Bending stress and centroid",
y_range=fig_stress_N.y_range,
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2098 [MPa]")
fig_stress_M.yaxis.visible = False
fig_bending_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Bending strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2098 [%]",
y_range=fig_stress_N.y_range)
fig_bending_strain.yaxis.visible = False
fig_stress_V = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Shear stress",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU}\u1d65 [MPa]")
fig_stress_V.yaxis.visible = False
fig_stress_sigma = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER SIGMA} and neutral axis",
y_range=fig_stress_N.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA} [MPa]")
fig_stress_tau = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER TAU}",
y_range=fig_stress_V.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU} [MPa]")
# plot stress N V M
- discr_stress_strain = 10
+ discr_stress_strain = 201
scale_x = 25
y_discr = np.linspace(0, h, discr_stress_strain)
sigma_N = stst.compute_sigma_axial(y_discr, 0, A)
N_stress_diag = models.stress_diagram(fig_stress_N, sigma_N, h,
source_section_scheme, scale_x=scale_x/10)
+ fig_stress_N.add_tools(HoverTool(renderers=[N_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
sigma_M = stst.compute_sigma_bending(y_discr, 0, Iy, yG)
(M_stress_diag, centroid) = models.stress_diagram(fig_stress_M, sigma_M, h,
source_section_scheme, True, yG, scale_x=scale_x)
+ fig_stress_M.add_tools(HoverTool(renderers=[M_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
S_rect = beam_section.compute_first_moment_of_area(y_discr, b, h, yG)
tau_V = stst.compute_tau_shear(y_discr, 0, S_rect, Iy, b)
V_stress_diag = models.stress_diagram(fig_stress_V, tau_V, h, source_section_scheme, scale_x=1)
+ fig_stress_V.add_tools(HoverTool(renderers=[V_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot stress sigma and tau
sigma_total = sigma_M + sigma_N
(sigma_stress_diag, neutral_axis) = models.stress_diagram(fig_stress_sigma, sigma_total, h,
source_section_scheme,True, yG, scale_x=scale_x)
+ fig_stress_sigma.add_tools(HoverTool(renderers=[sigma_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
tau_total = tau_V
tau_stress_diag = models.stress_diagram(fig_stress_tau, tau_total, h,
source_section_scheme, scale_x=1)
+ fig_stress_tau.add_tools(HoverTool(renderers=[tau_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot strain N M
strain_axial = stst.compute_epsilon_axial(y_discr, sigma_N, E)
axial_strain_diag = models.strain_diagram(fig_axial_strain, strain_axial, h, source_section_scheme)
+ fig_axial_strain.add_tools(HoverTool(renderers=[axial_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
+
strain_bending = stst.compute_epsilon_bending(y_discr, sigma_M, E)
bending_strain_diag = models.strain_diagram(fig_bending_strain, strain_bending, h, source_section_scheme)
+ fig_bending_strain.add_tools(HoverTool(renderers=[bending_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
# figures for NVM
fig_NM_section = figure(**options_stress_strain,
title="N and M at position x",
match_aspect=True)
fig_NM_section.axis.visible = False
fig_NM_section.grid.grid_line_alpha = 0
fig_V_section = figure(**options_stress_strain,
title="V at position x",
match_aspect=True)
fig_V_section.axis.visible = False
fig_V_section.grid.grid_line_alpha = 0
# section with NVM
models.section_diagram(fig_NM_section)
models.section_diagram(fig_V_section)
# NVM in section
section_N = models.force_vector(fig_NM_section, 0, 0, 0, 0, 0, 'red')
section_V = models.force_vector(fig_V_section, 0, 0, 0, 0, 0, 'red')
(section_M_line, section_M_head, source_section_M) = models.define_curvedArrow(fig_NM_section, 0, 0, 0, size_head=0)
# NVM label in section
OFFSET_N = 1
label_N_section = fig_NM_section.text(x=[P*1.1], y=[OFFSET_N], text=[""], text_color="red", text_baseline='bottom')
label_M_section = fig_NM_section.text(x=[OFFSET_N*6], y=[-OFFSET_N*5], text=[""], text_color="red", text_baseline='top')
label_V_section = fig_V_section.text(x=[OFFSET_N*5], y=[0], text=[""], text_color="red", text_baseline='middle')
########################################################
# Define the new figures, widgets and renderers
########################################################
# deflection of the beam
fig_beam.title.text = "Simple supported beam with deflection under uniform load"
fig_beam.ygrid.grid_line_alpha = 1
fig_beam.yaxis.visible = True
fig_beam.yaxis.axis_label = "Deflection [mm]"
# line 70-76 removed: uniform load (beam) and axial force (beam) in the simple beam
# Change the beam in the beam figure to gray and line width smaller and add new line
beam.glyph.line_width = 1
beam.glyph.line_color = "gray"
beam_defl = fig_beam.line(x=x_discr,
y=sb.compute_deflection_uniform_load(x_discr, q, L, Iy, E),
line_width=6, color='black')
-
+ fig_beam.add_tools(HoverTool(renderers=[beam_defl],
+ tooltips= [("Position", "@x m"), ("Deflection", "@y mm")]))
+
# FROM ABOVE: position point
beam_position = fig_beam.circle('x', 'y', **pos_opt)
# choose different elastic modulus
E_wood = 8e3 # [MPa]
E_concrete = 26e3 # [MPa]
E_ceramic = 300e3 # [MPa]
slider_elastic = Slider(
title="Change the elastic modulus [MPa]",
start=E_wood,
end=E_ceramic,
step=1e3,
value=E,
margin=(5, 5, 0, 5)
)
# show values of E
div_E = Div(margin=(0, 5, 0, 5),
text=f"""
<p style='font-size:12px'>
E<sub>wood</sub> = {math.trunc(E_wood/1e3)} GPa; E<sub>concrete</sub> = {math.trunc(E_concrete/1e3)} GPa<br>
E<sub>steel</sub> = {math.trunc(E_steel/1e3)} GPa; E<sub>ceramic</sub> = {math.trunc(E_ceramic/1e3)} GPa</p>
""")
########################################################
# Configurethe logics
########################################################
args_slider_pos = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
s_M=source_M,
arr_head=scheme_M_head,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_slider_pos = f"""
// retrieve data
const db = source.data
const data_sb = s_sb.data
const data_q = s_q.data
const FBD = db['FBD'][0]
const pos = cb_obj.value
const q = db['q'][0]
const L = db['L'][0]
// update data
db['N'][0] = compute_N(db['P'][0])
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['x'][0] = pos
// check state
check_state(db)
// update:
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// apply the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
// declare functions
{sb.implement_compute_NJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_NVM_diagramJS()}
{models.implement_check_stateJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_sigma_axialJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_tau_shearJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_update_NVM_sectionJS()}
"""
updade_slider_pos = CustomJS(args=args_slider_pos, code=code_slider_pos)
args_slider_b = dict(source=source,
s_b=source_beam,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
beam_defl=beam_defl)
code_change_b = f"""
// retrieve data used
const db = source.data
const b = cb_obj.value // value of the slider
const h = db['h'][0]
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const yG = db['yG'][0]
const N = db['N'][0]
const M = db['M'][0]
// apply the changes
db['b'][0] = b
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_deflection_beam(db, beam_defl)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_deflection_beamJS(discr_NVM)}
{sb.implement_compute_deflection_uniform_loadJS()}
"""
update_b = CustomJS(args=args_slider_b, code=code_change_b)
args_slider_h = dict(source=source,
s_b=source_beam,
s_ss=source_section_scheme,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
beam_defl=beam_defl)
code_change_h = f"""
// retrieve data used
const db = source.data
const data_ss = s_ss.data
const b = db['b'][0]
const h = cb_obj.value // value of the slider
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const N = db['N'][0]
const M = db['M'][0]
const yG = compute_centroid_y(h)
// apply the changes
db['h'][0] = h
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['yG'][0] = yG
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
data_ss['y'][1] = h // change the height of the section in the diagrams
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_deflection_beam(db, beam_defl)
// emit the changes
source.change.emit()
s_ss.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{js.implement_update_deflection_beamJS(discr_NVM)}
{sb.implement_compute_deflection_uniform_loadJS()}
"""
update_h = CustomJS(args=args_slider_h, code=code_change_h)
args_checkbox_P = dict(source=source,
s_M=source_M,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
N_diag=N_diag,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_checkbox_P = f"""
// retrieve var from the object that uses callback
var f = cb_obj.active // checkbox P
if (f.length==0) f = [1]
const db = source.data
// apply the changes
db['P'][0] = {P}*(1-f)
db['N'][0] = compute_N(db['P'][0])
db['Rx'][0] = compute_Rx(db['P'][0])
// update
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_N_diagram(db, N_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// emit the changes
source.change.emit()
// declare functions
{sb.implement_update_external_forcesJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_compute_RxJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_compute_NJS()}
{sb.implement_update_N_diagramJS(discr_NVM)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_checkbox_P = CustomJS(args=args_checkbox_P, code=code_checkbox_P)
args_radiogroup_FBD = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
s_M=source_M,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_radiogroup_FBD = f"""
// retrieve data
const db = source.data
const FBD = cb_obj.active
const data_sb = s_sb.data
const data_q = s_q.data
const pos = db['x'][0]
// apply the changes
db['FBD'][0] = FBD
// update
check_state(db)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// emit the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
{models.implement_check_stateJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_arrowJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_radiogroup_FBD = CustomJS(args=args_radiogroup_FBD, code=code_radiogroup_FBD)
args_slider_q = dict(source=source,
s_q=source_scheme_q,
s_M=source_M,
div_f=div_forces,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
V_diag=V_diag,
M_diag=M_diag,
centroid=centroid,
neutral_axis=neutral_axis,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
beam_defl=beam_defl)
code_slider_q = f"""
// retrieve data
const db = source.data
const q = cb_obj.value
const pos = db['x'][0]
const L = db['L'][0]
// update q
db['q'][0] = q
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['Ry_l'][0] = compute_Ry_l(q, L)
db['Ry_r'][0] = compute_Ry_r(q, L)
// update
update_u_load(db, s_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_V_diagram(db, V_diag)
update_M_diagram(db, M_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
update_deflection_beam(db, beam_defl)
// apply changes
source.change.emit()
// declare functions
{js.implement_update_arrowJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_compute_Ry_lJS()}
{sb.implement_compute_Ry_rJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_update_V_diagramJS(discr_NVM)}
{sb.implement_update_M_diagramJS(discr_NVM)}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_u_loadJS(OFFSET_Q)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_deflection_beamJS(discr_NVM)}
{sb.implement_compute_deflection_uniform_loadJS()}
"""
update_slider_q = CustomJS(args=args_slider_q, code=code_slider_q)
args_slider_elastic = dict(source=source,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
centroid=centroid,
beam_defl=beam_defl)
# code_slider_elastic = ""
code_slider_elastic = f"""
// retrieve data
const db = source.data
const E = cb_obj.value
// update E
db['E'][0] = E
// update
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_deflection_beam(db, beam_defl)
// apply changes
source.change.emit()
// declare functions
{js.implement_linspaceJS()}
{sb.implement_compute_NJS()}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{js.implement_update_deflection_beamJS(discr_NVM)}
{sb.implement_compute_deflection_uniform_loadJS()}
"""
update_slider_elastic = CustomJS(args=args_slider_elastic, code=code_slider_elastic)
# apply the logics
slider_b.js_on_change('value', update_b)
slider_h.js_on_change('value', update_h)
slider_position.js_on_change('value', updade_slider_pos)
checkbox_P.js_on_click(update_checkbox_P)
radiogroup_FBD.js_on_click(update_radiogroup_FBD)
slider_q.js_on_change('value', update_slider_q)
slider_elastic.js_on_change('value', update_slider_elastic)
########################################################
# Build the layout
########################################################
padding_layout = 10
layout1 = layout([
[column(row(column(fig_scheme,
row(fig_section, Spacer(width=padding_layout), column(Spacer(height=padding_layout*3),
slider_b,
slider_h,
slider_position,
slider_q,
slider_elastic,
div_E,
div_rg_FBD,
radiogroup_FBD,
div_cb_P,
checkbox_P))),
column(fig_beam,
Spacer(height=padding_layout),
fig_N,
fig_V,
fig_M)),
row(column(
row(fig_NM_section, fig_axial_strain, fig_stress_N, fig_bending_strain, fig_stress_M, fig_stress_sigma),
row(fig_V_section, Spacer(width=FIG_B_ss), fig_stress_V, Spacer(width=FIG_B_ss), Spacer(width=FIG_B_ss), fig_stress_tau),
))
),
],
])
show(layout1)
\ No newline at end of file
diff --git a/HiddenCode/hidden_code_nb_diagrams.py b/HiddenCode/hidden_code_nb_diagrams.py
index bf32433..1bb167f 100644
--- a/HiddenCode/hidden_code_nb_diagrams.py
+++ b/HiddenCode/hidden_code_nb_diagrams.py
@@ -1,599 +1,601 @@
import math
import numpy as np
from bokeh.layouts import layout, column, row
from bokeh.models.annotations import Label, Arrow
from bokeh.models.arrow_heads import VeeHead
-from bokeh.models import Div, CustomJS, Slider, Spacer, Text
+from bokeh.models import Div, CustomJS, Slider, Spacer, Text, HoverTool
from bokeh.models.widgets import RadioButtonGroup, CheckboxButtonGroup
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_notebook
from cienpy import simplebeam as sb
from cienpy import rectangular_section as beam_section
from cienpy import models
from cienpy import javascriptcodes as js
output_notebook()
def main_code(L, h, b, A, Iy, Iz, q, P, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr):
########################################################
# Initialisation
########################################################
# constants for the visualisation
SCALE = 10
OFFSET_Q = q
MAX_B = 3*b
MAX_H = 3*h
MAX_Q = q/4*5
# store the values in a specific format
data_beam = dict(
x=[0, L],
y=[0, 0]
)
data_scheme_beam = dict(
x=[0, L*SCALE],
y=[0, 0]
)
data_scheme_q = dict(
x=[0, 0, L*SCALE, L*SCALE],
y=[OFFSET_Q, OFFSET_Q+q, OFFSET_Q+q, OFFSET_Q],
x_fade=[0, 0, L*SCALE, L*SCALE]
)
initial_position = L
initial_state = 'IDLE' # possible cases: IDLE, R_SEC, L_SEC
initial_FBD = 0 # right=0 left=1
data = dict( # stores every useful single variable
state=[initial_state],
FBD=[initial_FBD],
SCALE=[SCALE],
L=[L],
b=[b],
h=[h],
A=[A],
Iy=[Iy],
Iz=[Iz],
P=[P],
x=[initial_position],
y=[0],
q=[q],
Rx=[Rx],
Ry_l=[Ry_l],
Ry_r=[Ry_r],
N=[N],
V=[V],
M=[M],
xF=[L*SCALE]
)
source_beam = ColumnDataSource(data_beam)
source_scheme_beam = ColumnDataSource(data_scheme_beam)
source_scheme_q = ColumnDataSource(data_scheme_q)
source = ColumnDataSource(data)
########################################################
# Define figures, widgets and renderers as from the previous notebook
########################################################
FIG_H_B = 200 # height figure beam
FIG_B_B = 700 # width figure beam
FIG_H_S = FIG_H_B # height figure scheme
FIG_B_S = FIG_B_B # width figure scheme
FIG_H_SEC = 600 # height figure section
options = dict(
toolbar_location=None
)
# figure for the beam
paddingx = 0.2*L
int_x_b = (0-paddingx, L+paddingx)
int_y_b = (-OFFSET_Q/SCALE, (MAX_Q+OFFSET_Q)/SCALE)
fig_beam = sb.define_fig_beam(int_x_b, int_y_b, options,
f_h=FIG_H_B, f_b=FIG_B_B)
# figure for the cross-section
fig_section = sb.define_fig_section(MAX_B, MAX_H*0.8, options, FIG_H_SEC)
# beam
(beam, support_l, support_r) = sb.draw_beam(fig_beam, source_beam, L,
ratio = (int_y_b[1]-int_y_b[0])/FIG_H_B*100)
# section
section = beam_section.draw_section(fig_section, b, h)
# show mechanical parameters
div_geo = Div(text=beam_section.div_text_geo(round(h), round(b), round(L),
"{:.2e}".format(A),
"{:.2e}".format(Iy),
"{:.2e}".format(Iz)))
# change geometry
slider_b = Slider(
title="Change the width b [mm]",
start=10,
end=MAX_B,
step=10,
value=b
)
slider_h = Slider(
title="Change the height h [mm]",
start=20,
end=MAX_H,
step=20,
value=h
)
# reference system
axis_arrow_length = 0.8
axis_arrow_scale = 100
models.force_vector(fig_section, axis_arrow_length*10, 0, 0, 0, axis_arrow_length*axis_arrow_scale*1.6, 'gray') # y axis
fig_section.text(x=[0], y=[axis_arrow_length*axis_arrow_scale*1.7], text=["y"], text_color='gray', text_baseline='middle', angle=math.pi/2)
models.force_vector(fig_section, axis_arrow_length*10, 0, -axis_arrow_length*axis_arrow_scale, 0, 0, 'gray') # z axis
fig_section.text(x=[-axis_arrow_length*axis_arrow_scale*1.1], y=[0], text=["z"], text_color='gray', text_align='right', text_baseline='middle')
# figure for the forces and moments
fig_scheme = sb.define_figure_scheme(L, SCALE, MAX_Q, OFFSET_Q, options, FIG_H_S, FIG_B_S)
# uniform load (beam)
u_load = fig_beam.rect([L/2], [(q/2+OFFSET_Q)/SCALE], width=L, height=q/SCALE,
fill_color='blue', color='navy', fill_alpha=0.6, alpha=0.6)
label_u_load = fig_beam.text(x=[-0.2], y=[OFFSET_Q/SCALE], text=["q"], text_color="blue")
# axial force (beam)
axial_force = models.force_vector(fig_beam, P, L+P/SCALE, L, 0, 0, 'green')
label_P_force = fig_beam.text(x=[L+P/2/SCALE], y=[OFFSET_Q/SCALE/2], text=["P"], text_color="green")
# position point
pos_opt = dict(
source=source,
size=10,
fill_alpha=0.5,
fill_color="magenta",
color="magenta",
alpha=0.5
)
beam_position = fig_beam.circle('x', 'y', **pos_opt)
forces_position = fig_scheme.circle('xF', 'y', **pos_opt)
# beam (scheme)
scheme_beam = fig_scheme.line('x', 'y', source=source_scheme_beam, line_width=2, color='black')
scheme_fade_beam = fig_scheme.line(x=[0, L*SCALE], y=[0, 0], line_width=2, color='black', alpha=0.2)
# uniform load (scheme)
scheme_u_load = fig_scheme.patch('x', 'y', source=source_scheme_q, fill_color='blue', color='navy',
fill_alpha=0.3, alpha=0.3)
scheme_fade_u_load = fig_scheme.patch('x_fade', 'y', source=source_scheme_q, fill_color='blue',
color='navy', fill_alpha=0.3, alpha=0.3)
# axial force (scheme)
scheme_axial_force = models.force_vector(fig_scheme, P, L*SCALE+P, L*SCALE, 0, 0, 'green')
# Reactions (scheme)
scheme_Ry_r = models.force_vector(fig_scheme, Ry_r, L*SCALE, L*SCALE, -Ry_r, 0, 'orange')
scheme_Ry_l = models.force_vector(fig_scheme, Ry_l, 0, 0, -Ry_l, 0, 'orange')
scheme_Rx_l = models.force_vector(fig_scheme, Rx, -Rx, 0, 0, 0, 'orange')
# force N
scheme_N = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# force V
scheme_V = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# moment M
(scheme_M_line, scheme_M_head, source_M) = models.define_curvedArrow(fig_scheme, 0, 0, 0, size_head=0)
# change the uniform load q
slider_q = Slider(
title="Change the uniform load q [kN/m]",
start=0.1,
end=MAX_Q,
step=0.1,
value=q
)
# choose position of interest
slider_position = Slider(
title="Change the position x along the beam [m]",
start=0,
end=L,
step=0.02,
value=L
)
# choose left or right FBD
div_rg_FBD = Div(text="Free-body diagram (FBD):")
radiogroup_FBD = RadioButtonGroup(labels=['Right-hand', 'Left-hand'], active=initial_FBD)
# choose axial force or not
div_cb_P = Div(text=f"Axial force P={P} kN (applied)")
checkbox_P = CheckboxButtonGroup(labels=['Apply or remove axial force P'], active=[0])
# show values of forces and moments
div_forces = Div(text=sb.div_text_forces(P, P, Ry_l, Ry_r, "No cross section analysed.", 0, 0, 0))
########################################################
# Define the new figures, widgets and renderers
########################################################
# figures for the diagrams
options_diag = dict(
toolbar_location=None,
x_axis_label="Position [m]",
plot_width=FIG_B_B,
x_range=fig_beam.x_range
)
fig_N = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Axial force", "@y kN")],
y_axis_label="Axial force N [kN]",
plot_height=int(FIG_H_B*0.8),
title="N V M Diagrams")
fig_V = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Shear force", "@y kN")],
y_axis_label="Shear force V [kN]",
plot_height=int(FIG_H_B*0.8))
fig_M = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Bending moment", "@y kNm")],
y_axis_label="Bending moment M [kNm]",
plot_height=FIG_H_B)
fig_N.xaxis.visible = False
fig_V.xaxis.visible = False
# plot N V M
N_diag = models.NVM_diagram(fig_N, x_discr, N_discr, L, source_beam)
+ fig_N.add_tools(HoverTool(renderers=[N_diag],
+ tooltips= [("Position", "@x m"), ("Axial force", "@y kN")]))
+
V_diag = models.NVM_diagram(fig_V, x_discr, V_discr, L, source_beam)
+ fig_V.add_tools(HoverTool(renderers=[V_diag],
+ tooltips= [("Position", "@x m"), ("Shear force", "@y kN")]))
+
M_diag = models.NVM_diagram(fig_M, x_discr, M_discr, L, source_beam)
+ fig_M.add_tools(HoverTool(renderers=[M_diag],
+ tooltips= [("Position", "@x m"), ("Bending moment", "@y kNm")]))
# point that shows the position that it's analyzed
N_position = fig_N.circle('x', 'N', **pos_opt)
V_position = fig_V.circle('x', 'V', **pos_opt)
M_position = fig_M.circle('x', 'M', **pos_opt)
########################################################
# Configurethe logics
########################################################
args_slider_pos = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
s_M=source_M,
arr_head=scheme_M_head)
code_slider_pos = f"""
// retrieve data
const db = source.data
const data_sb = s_sb.data
const data_q = s_q.data
const FBD = db['FBD'][0]
const pos = cb_obj.value
const q = db['q'][0]
const L = db['L'][0]
// update data
db['N'][0] = compute_N(db['P'][0])
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['x'][0] = pos
// check state
check_state(db)
// update:
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_div_forces(db, div_f)
// apply the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
// declare functions
{sb.implement_compute_NJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_NVM_diagramJS()}
{models.implement_check_stateJS()}
"""
updade_slider_pos = CustomJS(args=args_slider_pos, code=code_slider_pos)
args_slider_b_h = dict(source=source,
s_b=source_beam,
div=div_geo,
section=section,
support_r=support_r)
code_change_b = f"""
// retrieve data used
const db = source.data
const b = cb_obj.value // value of the slider
const h = db['h'][0]
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
// apply the changes
db['b'][0] = b
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
// update
update_div_geo(db, div)
update_section(db, section)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
"""
update_b = CustomJS(args=args_slider_b_h, code=code_change_b)
code_change_h = f"""
// retrieve data used
const db = source.data
const b = db['b'][0]
const h = cb_obj.value // value of the slider
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
// apply the changes
db['h'][0] = h
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
// update
update_div_geo(db, div)
update_section(db, section)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
"""
update_h = CustomJS(args=args_slider_b_h, code=code_change_h)
args_checkbox_P = dict(source=source,
s_M=source_M,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
N_diag=N_diag)
code_checkbox_P = f"""
// retrieve var from the object that uses callback
var f = cb_obj.active // checkbox P
if (f.length==0) f = [1]
const db = source.data
// apply the changes
db['P'][0] = {P}*(1-f)
db['N'][0] = compute_N(db['P'][0])
db['Rx'][0] = compute_Rx(db['P'][0])
// update
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_N_diagram(db, N_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
// emit the changes
source.change.emit()
// declare functions
{sb.implement_update_external_forcesJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_compute_RxJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_compute_NJS()}
{sb.implement_update_N_diagramJS(discr_NVM)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_arrow_growthJS()}
"""
update_checkbox_P = CustomJS(args=args_checkbox_P, code=code_checkbox_P)
args_radiogroup_FBD = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
s_M=source_M,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head)
code_radiogroup_FBD = f"""
// retrieve data
const db = source.data
const FBD = cb_obj.active
const data_sb = s_sb.data
const data_q = s_q.data
const pos = db['x'][0]
// apply the changes
db['FBD'][0] = FBD
// update
check_state(db)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
// emit the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
{models.implement_check_stateJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_arrowJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{js.implement_arrow_alphaJS()}
{js.implement_arrow_growthJS()}
"""
update_radiogroup_FBD = CustomJS(args=args_radiogroup_FBD, code=code_radiogroup_FBD)
args_slider_q = dict(source=source,
s_q=source_scheme_q,
s_M=source_M,
div_f=div_forces,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
V_diag=V_diag,
M_diag=M_diag)
code_slider_q = f"""
// retrieve data
const db = source.data
const q = cb_obj.value
const pos = db['x'][0]
const L = db['L'][0]
// update q
db['q'][0] = q
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['Ry_l'][0] = compute_Ry_l(q, L)
db['Ry_r'][0] = compute_Ry_r(q, L)
// update
update_u_load(db, s_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_V_diagram(db, V_diag)
update_M_diagram(db, M_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
// apply changes
source.change.emit()
// declare functions
{js.implement_update_arrowJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_compute_Ry_lJS()}
{sb.implement_compute_Ry_rJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_update_V_diagramJS(discr_NVM)}
{sb.implement_update_M_diagramJS(discr_NVM)}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_u_loadJS(OFFSET_Q)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_arrow_growthJS()}
"""
update_slider_q = CustomJS(args=args_slider_q, code=code_slider_q)
# apply the logics
slider_b.js_on_change('value', update_b)
slider_h.js_on_change('value', update_h)
slider_position.js_on_change('value', updade_slider_pos)
checkbox_P.js_on_click(update_checkbox_P)
radiogroup_FBD.js_on_click(update_radiogroup_FBD)
slider_q.js_on_change('value', update_slider_q)
########################################################
# Build the layout
########################################################
padding_layout = 10
layout1 = layout([
[column(row(column(fig_scheme,
row(fig_section, Spacer(width=padding_layout), column(Spacer(height=padding_layout),
slider_b,
slider_h,
div_geo,
Spacer(height=padding_layout),
slider_position,
slider_q,
div_rg_FBD,
radiogroup_FBD,
div_cb_P,
checkbox_P))),
column(fig_beam,
Spacer(height=padding_layout),
fig_N,
fig_V,
fig_M,
div_forces))
)],
])
show(layout1)
\ No newline at end of file
diff --git a/HiddenCode/hidden_code_nb_mohr.py b/HiddenCode/hidden_code_nb_mohr.py
index b1f5396..6dcfc61 100644
--- a/HiddenCode/hidden_code_nb_mohr.py
+++ b/HiddenCode/hidden_code_nb_mohr.py
@@ -1,1700 +1,1709 @@
import math
import numpy as np
from bokeh.layouts import layout, column, row
from bokeh.models.annotations import Label, Arrow
from bokeh.models.arrow_heads import VeeHead
-from bokeh.models import Div, CustomJS, Slider, Spacer
+from bokeh.models import Div, CustomJS, Slider, Spacer, HoverTool
from bokeh.models.widgets import RadioButtonGroup, CheckboxButtonGroup
from bokeh.plotting import figure, show, ColumnDataSource, output_file, save
from bokeh.io import output_notebook
from cienpy import simplebeam as sb
from cienpy import rectangular_section as beam_section
from cienpy import stress_strain_elastic as stst
from cienpy import models
from cienpy import javascriptcodes as js
from cienpy import mohrcircle
output_notebook()
def main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr, initial_y, initial_theta_element, sigma_axial, sigma_bending, sigma_tau, sigma_x0, sigma_y0, tau_0, sigma_average_mohr, r_circle_mohr, theta_principal, initial_theta, new_state):
########################################################
# Initialisation
########################################################
# constants for the visualisation
SCALE = 10
OFFSET_Q = q
MAX_B = 2*b
MAX_H = 2*h
MAX_Q = q/4*5
MAX_STRESS = 60
MAX_STRESS_MOHR = 10
MAX_DIM_STRESS_STATE = MAX_STRESS*2.5
# store the values in a specific format
data_beam = dict(
x=[0, L],
y=[0, 0]
)
data_scheme_beam = dict(
x=[0, L*SCALE],
y=[0, 0]
)
data_scheme_q = dict(
x=[0, 0, L*SCALE, L*SCALE],
y=[OFFSET_Q, OFFSET_Q+q, OFFSET_Q+q, OFFSET_Q],
x_fade=[0, 0, L*SCALE, L*SCALE]
)
data_section_scheme = dict(
x=[0, 0],
y=[0, h]
)
initial_position = L
initial_state = 'IDLE' # possible cases: IDLE, R_SEC, L_SEC
initial_FBD = 0 # right=0 left=1
data = dict( # stores every useful single variable
state=[initial_state],
FBD=[initial_FBD],
SCALE=[SCALE],
L=[L],
b=[b],
h=[h],
E=[E],
A=[A],
Iy=[Iy],
Iz=[Iz],
yG=[yG],
y_n_axis=[y_n_axis],
P=[P],
x=[initial_position],
y=[0],
y_var=[initial_y],
theta_element=[initial_theta_element], # rad
theta=[initial_theta], # rad
sigma_x0=[sigma_x0],
sigma_y0=[sigma_y0],
tau_0=[tau_0],
sigma_average=[sigma_average_mohr],
r_circle_mohr=[r_circle_mohr],
sigma_x=[new_state[0]],
sigma_y=[new_state[1]],
tau=[new_state[2]],
q=[q],
Rx=[Rx],
Ry_l=[Ry_l],
Ry_r=[Ry_r],
N=[N],
V=[V],
M=[M],
xF=[L*SCALE]
)
source_beam = ColumnDataSource(data_beam)
source_scheme_beam = ColumnDataSource(data_scheme_beam)
source_scheme_q = ColumnDataSource(data_scheme_q)
source_section_scheme = ColumnDataSource(data_section_scheme)
source = ColumnDataSource(data)
# Constants
FIG_H_B = 200 # height figure beam
FIG_B_B = 600 # width figure beam
FIG_H_S = FIG_H_B # height figure scheme
FIG_B_S = FIG_B_B # width figure scheme
FIG_H_SEC = 500 # height figure section
DIV_B_GEO = 170
DIV_B_FORCES = 170
FIG_MOHR = 600
FIG_STRESS_STATE = 600
########################################################
# Define figures, widgets and renderers as from the previous notebook
########################################################
options = dict(
toolbar_location=None
)
######################## Start modifications
# figure for the beam
paddingx = 0.2*L
int_x_b = (0-paddingx, L+paddingx)
int_y_b = (-MAX_H*0.2, MAX_H*1.4)
fig_beam = sb.define_fig_beam(int_x_b, int_y_b, options,
f_h=FIG_H_B, f_b=FIG_B_B)
# modify beam
#TODO: add to cienpy
def draw_beam_2D(fig, L: float, h: float, b_supp=0.25, ratio = 1.0):
"""
Function that draws the simple beam in a figure.
@param fig (bokeh.plotting.figure.Figure): Figure that will be the canvas for the plot.
@param src (bokeh.models.sources.ColumnDataSource): Source of the coordinates.
@param L (float): Length of the beam in m.
@param x (str): Key for the x values. Defaults to 'x'.
@param y (str): Key for the y values. Defaults to 'y'.
@param b_supp (float, optional): Size of the supports in x. Defaults to 0.3.
@param ratio (float, optional): Ratio of the figure (interval_y/height*100). Defaults to 1.0 (axis equal).
@return tuple: Tuple with the renderers of the beam and supports.
"""
beam = fig.rect([L/2], [h/2], width=L, height=h,
fill_color='lightgray', color='black', line_width=1)
supp_opt = dict(
fill_color='white',
line_color='black'
)
support_l = models.define_pinned(fig, 0, 0, b_supp, ratio, supp_opt)
support_r = models.define_roller(fig, L, 0, b_supp, ratio, supp_opt)
return (beam, support_l, support_r)
(beam, support_l, support_r) = draw_beam_2D(fig_beam, L, h,
ratio = (int_y_b[1]-int_y_b[0])/FIG_H_B*100)
# uniform load (beam)
if q!=0:
fig_beam.rect([L/2], [(int_y_b[1]+MAX_H)/2], width=L, height=(0.99*(int_y_b[1]-MAX_H)),
fill_color='blue', color='navy', fill_alpha=0.6, alpha=0.6)
fig_beam.text(x=[-0.2], y=[MAX_H], text=["q"], text_color="blue")
####################### End modification
# figure for the cross-section
fig_section = sb.define_fig_section(MAX_B*0.8, MAX_H*0.8, options, FIG_H_SEC)
# section
section = beam_section.draw_section(fig_section, b, h)
# show mechanical parameters
div_geo = Div(width= DIV_B_GEO,
text=beam_section.div_text_geo(round(h), round(b), round(L),
"{:.2e}".format(A),
"{:.2e}".format(Iy),
"{:.2e}".format(Iz)))
# change geometry
slider_b = Slider(
title="Change the width b [mm]",
start=10,
end=MAX_B,
step=10,
value=b
)
slider_h = Slider(
title="Change the height h [mm]",
start=20,
end=MAX_H,
step=20,
value=h
)
# reference system
axis_arrow_length = 0.8
axis_arrow_scale = 100
models.force_vector(fig_section, axis_arrow_length*10, 0, 0, 0, axis_arrow_length*axis_arrow_scale*1.6, 'gray') # y axis
fig_section.text(x=[0], y=[axis_arrow_length*axis_arrow_scale*1.7], text=["y"], text_color='gray', text_baseline='middle', angle=math.pi/2)
models.force_vector(fig_section, axis_arrow_length*10, 0, -axis_arrow_length*axis_arrow_scale, 0, 0, 'gray') # z axis
fig_section.text(x=[-axis_arrow_length*axis_arrow_scale*1.1], y=[0], text=["z"], text_color='gray', text_align='right', text_baseline='middle')
# figure for the forces and moments
fig_scheme = sb.define_figure_scheme(L, SCALE, MAX_Q, OFFSET_Q, options, FIG_H_S, FIG_B_S)
# axial force (beam)
axial_force = models.force_vector(fig_beam, P, L+P/SCALE, L, 0, 0, 'green')
label_P_force = fig_beam.text(x=[L+P/2/SCALE], y=[OFFSET_Q/SCALE/2], text=["P"], text_color="green")
# position point
pos_opt = dict(
source=source,
size=10,
fill_alpha=0.5,
fill_color="magenta",
color="magenta",
alpha=0.5
)
forces_position = fig_scheme.circle('xF', 'y', **pos_opt)
# beam (scheme)
scheme_beam = fig_scheme.line('x', 'y', source=source_scheme_beam, line_width=2, color='black')
scheme_fade_beam = fig_scheme.line(x=[0, L*SCALE], y=[0, 0], line_width=2, color='black', alpha=0.2)
# uniform load (scheme)
scheme_u_load = fig_scheme.patch('x', 'y', source=source_scheme_q, fill_color='blue', color='navy',
fill_alpha=0.3, alpha=0.3)
scheme_fade_u_load = fig_scheme.patch('x_fade', 'y', source=source_scheme_q, fill_color='blue',
color='navy', fill_alpha=0.3, alpha=0.3)
# axial force (scheme)
scheme_axial_force = models.force_vector(fig_scheme, P, L*SCALE+P, L*SCALE, 0, 0, 'green')
# Reactions (scheme)
scheme_Ry_r = models.force_vector(fig_scheme, Ry_r, L*SCALE, L*SCALE, -Ry_r, 0, 'orange')
scheme_Ry_l = models.force_vector(fig_scheme, Ry_l, 0, 0, -Ry_l, 0, 'orange')
scheme_Rx_l = models.force_vector(fig_scheme, Rx, -Rx, 0, 0, 0, 'orange')
# force N
scheme_N = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# force V
scheme_V = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# moment M
(scheme_M_line, scheme_M_head, source_M) = models.define_curvedArrow(fig_scheme, 0, 0, 0, size_head=0)
# change the uniform load q
slider_q = Slider(
title="Change the uniform load q [kN/m]",
start=0.1,
end=MAX_Q,
step=0.1,
value=q
)
# choose position of interest
slider_position = Slider(
title="Change the position x along the beam [m]",
start=0,
end=L,
step=0.02,
value=L
)
# choose left or right FBD
div_rg_FBD = Div(text="Free-body diagram (FBD):")
radiogroup_FBD = RadioButtonGroup(labels=['Right-hand', 'Left-hand'], active=initial_FBD)
# choose axial force or not
div_cb_P = Div(text=f"Axial force P={P} kN (applied)")
checkbox_P = CheckboxButtonGroup(labels=['Apply or remove axial force P'], active=[0])
# show values of forces and moments
div_forces = Div(width=DIV_B_FORCES,
text=sb.div_text_forces(P, P, Ry_l, Ry_r, "No cross section analysed.", 0, 0, 0))
# figures for the diagrams
options_diag = dict(
toolbar_location=None,
x_axis_label="Position [m]",
plot_width=FIG_B_B,
x_range=fig_beam.x_range
)
fig_N = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Axial force", "@y kN")],
y_axis_label="Axial force N [kN]",
plot_height=int(FIG_H_B*0.8),
title="N V M Diagrams")
fig_V = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Shear force", "@y kN")],
y_axis_label="Shear force V [kN]",
plot_height=int(FIG_H_B*0.8))
fig_M = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Bending moment", "@y kNm")],
y_axis_label="Bending moment M [kNm]",
plot_height=FIG_H_B)
fig_N.xaxis.visible = False
fig_V.xaxis.visible = False
# plot N V M
N_diag = models.NVM_diagram(fig_N, x_discr, N_discr, L, source_beam)
+ fig_N.add_tools(HoverTool(renderers=[N_diag],
+ tooltips= [("Position", "@x m"), ("Axial force", "@y kN")]))
+
V_diag = models.NVM_diagram(fig_V, x_discr, V_discr, L, source_beam)
+ fig_V.add_tools(HoverTool(renderers=[V_diag],
+ tooltips= [("Position", "@x m"), ("Shear force", "@y kN")]))
+
M_diag = models.NVM_diagram(fig_M, x_discr, M_discr, L, source_beam)
+ fig_M.add_tools(HoverTool(renderers=[M_diag],
+ tooltips= [("Position", "@x m"), ("Bending moment", "@y kNm")]))
# point that shows the position that it's analyzed
N_position = fig_N.circle('x', 'N', **pos_opt)
V_position = fig_V.circle('x', 'V', **pos_opt)
M_position = fig_M.circle('x', 'M', **pos_opt)
# figures for the stresses and strains
FIG_B_ss = 200
FIG_H_ss = 200
options_stress_strain = dict(
toolbar_location=None,
y_axis_label="Height h [mm]",
plot_width=FIG_B_ss,
plot_height=FIG_H_ss
)
fig_stress_N = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Axial stress",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2099 [MPa]")
fig_stress_N.yaxis.visible = False
fig_axial_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Axial strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2099 [%]",
y_range=fig_stress_N.y_range)
fig_axial_strain.yaxis.visible = False
fig_stress_M = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Bending stress and centroid",
y_range=fig_stress_N.y_range,
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2098 [MPa]")
fig_stress_M.yaxis.visible = False
fig_bending_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Bending strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2098 [%]",
y_range=fig_stress_N.y_range)
fig_bending_strain.yaxis.visible = False
fig_stress_V = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Shear stress",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU}\u1d65 [MPa]")
fig_stress_V.yaxis.visible = False
fig_stress_sigma = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER SIGMA} and neutral axis",
y_range=fig_stress_N.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA} [MPa]")
fig_stress_tau = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER TAU}",
y_range=fig_stress_V.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU} [MPa]")
# plot stress N V M
- discr_stress_strain = 10
+ discr_stress_strain = 201
scale_x = 25
y_discr = np.linspace(0, h, discr_stress_strain)
sigma_N = stst.compute_sigma_axial(y_discr, 0, A)
N_stress_diag = models.stress_diagram(fig_stress_N, sigma_N, h,
source_section_scheme, scale_x=scale_x/10)
+ fig_stress_N.add_tools(HoverTool(renderers=[N_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
sigma_M = stst.compute_sigma_bending(y_discr, 0, Iy, yG)
(M_stress_diag, centroid) = models.stress_diagram(fig_stress_M, sigma_M, h,
source_section_scheme, True, yG, scale_x=scale_x)
+ fig_stress_M.add_tools(HoverTool(renderers=[M_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
S_rect = beam_section.compute_first_moment_of_area(y_discr, b, h, yG)
tau_V = stst.compute_tau_shear(y_discr, 0, S_rect, Iy, b)
V_stress_diag = models.stress_diagram(fig_stress_V, tau_V, h, source_section_scheme, scale_x=1)
+ fig_stress_V.add_tools(HoverTool(renderers=[V_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot stress sigma and tau
sigma_total = sigma_M + sigma_N
(sigma_stress_diag, neutral_axis) = models.stress_diagram(fig_stress_sigma, sigma_total, h,
source_section_scheme,True, yG, scale_x=scale_x)
+ fig_stress_sigma.add_tools(HoverTool(renderers=[sigma_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
tau_total = tau_V
tau_stress_diag = models.stress_diagram(fig_stress_tau, tau_total, h,
source_section_scheme, scale_x=1)
+ fig_stress_tau.add_tools(HoverTool(renderers=[tau_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot strain N M
strain_axial = stst.compute_epsilon_axial(y_discr, sigma_N, E)
axial_strain_diag = models.strain_diagram(fig_axial_strain, strain_axial, h, source_section_scheme)
+ fig_axial_strain.add_tools(HoverTool(renderers=[axial_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
+
strain_bending = stst.compute_epsilon_bending(y_discr, sigma_M, E)
bending_strain_diag = models.strain_diagram(fig_bending_strain, strain_bending, h, source_section_scheme)
+ fig_bending_strain.add_tools(HoverTool(renderers=[bending_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
# figures for NVM
fig_NM_section = figure(**options_stress_strain,
title="N and M at position x",
match_aspect=True)
fig_NM_section.axis.visible = False
fig_NM_section.grid.grid_line_alpha = 0
fig_V_section = figure(**options_stress_strain,
title="V at position x",
match_aspect=True)
fig_V_section.axis.visible = False
fig_V_section.grid.grid_line_alpha = 0
# section with NVM
models.section_diagram(fig_NM_section)
models.section_diagram(fig_V_section)
# NVM in section
section_N = models.force_vector(fig_NM_section, 0, 0, 0, 0, 0, 'red')
section_V = models.force_vector(fig_V_section, 0, 0, 0, 0, 0, 'red')
(section_M_line, section_M_head, source_section_M) = models.define_curvedArrow(fig_NM_section, 0, 0, 0, size_head=0)
# NVM label in section
OFFSET_N = 1
label_N_section = fig_NM_section.text(x=[P*1.1], y=[OFFSET_N], text=[""], text_color="red", text_baseline='bottom')
label_M_section = fig_NM_section.text(x=[OFFSET_N*6], y=[-OFFSET_N*5], text=[""], text_color="red", text_baseline='top')
label_V_section = fig_V_section.text(x=[OFFSET_N*5], y=[0], text=[""], text_color="red", text_baseline='middle')
########################################################
# Define the new figures, widgets and renderers
########################################################
SCALE_TAU = 5
# Modify the beam figure and plots (see in the previous code cell)
# Modifiy focus point to square in beam
beam_position = fig_beam.square('x', 'y_var', **pos_opt)
# choose height of interest
slider_y = Slider(
title="Change the height y along the section [mm]",
start=0,
end=h,
step=1,
value=initial_y
)
# choose angle theta of interest
slider_theta_element = Slider(
title="Change the angle \N{GREEK SMALL LETTER THETA} of the element [°]",
start=0,
end=90,
step=0.5,
value=initial_theta_element
)
# figure Mohr circle
fig_Mohr_circle = figure(toolbar_location=None,
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA} [MPa]",
y_axis_label="Stress \N{GREEK SMALL LETTER TAU} [MPa]",
plot_height=FIG_MOHR,
plot_width=FIG_MOHR,
match_aspect=True,
# x_range=[-MAX_STRESS_MOHR, MAX_STRESS_MOHR],
title="Mohr circle, x axis: stress \N{GREEK SMALL LETTER SIGMA} [MPa], y axis: stress \N{GREEK SMALL LETTER TAU} [MPa]"
)
fig_Mohr_circle.axis.fixed_location = 0
# figure stress state element
fig_stress_state = figure(toolbar_location=None,
plot_height=FIG_STRESS_STATE,
plot_width=FIG_STRESS_STATE,
match_aspect=True,
title="Stress state"
)
fig_stress_state.grid.grid_line_alpha = 0
fig_stress_state.axis.visible = False
fig_stress_state.min_border_left = 0
fig_stress_state.rect([MAX_DIM_STRESS_STATE*0.4], [MAX_DIM_STRESS_STATE*0.4],
width=MAX_DIM_STRESS_STATE*1.2,
height=MAX_DIM_STRESS_STATE*1.2,
alpha=0,
fill_alpha=0)
# stress state (theta 0)
fig_stress_state.rect([0], [0],
width=MAX_STRESS/2,
height=MAX_STRESS/2,
angle=0,
fill_alpha=0, color='black', line_width=2)
fig_stress_state.text([0], [0],
text=["Fixed \nelement"],
text_align="center", text_baseline="middle",
text_font_size="14px")
# stress state variable
stress_state_theta = fig_stress_state.rect([MAX_STRESS*2], [0],
width=MAX_STRESS/2,
height=MAX_STRESS/2,
angle=initial_theta_element,
fill_alpha=0, color='black', line_width=2)
label_stress_state_theta = fig_stress_state.text([MAX_STRESS*2], [0],
text=["Rotating \nelement"],
text_align="center", text_baseline="middle",
text_font_size="14px")
# rotating axis
rotating_axis = fig_stress_state.line([0, MAX_DIM_STRESS_STATE], [0, 0],
line_dash="4 4", line_color="black", line_width=0.5)
# arc and label theta in stress state
arc_theta_element = fig_stress_state.arc(x=[0], y=[0],
radius=MAX_STRESS, start_angle=0, end_angle=0,
line_color="gray", line_dash="2 5")
label_theta_element = fig_stress_state.text([MAX_STRESS], [0],
text=[""],
text_baseline="middle", x_offset=5, text_font_size="14px")
# fixed axis
fig_stress_state.line([0, MAX_DIM_STRESS_STATE], [0, 0],
line_dash="4 4", line_color="black", line_width=0.5)
# stress state arrows
arrows_stress_state = models.set_arrows_stress_state(fig_stress_state, sigma_x0, sigma_y0, tau_0, MAX_STRESS/2,
SCALE_TAU)
# stress state theta arrows
arrows_stress_state_theta = models.set_arrows_stress_state(fig_stress_state, sigma_x0, sigma_y0, tau_0, MAX_STRESS/2,
SCALE_TAU, MAX_STRESS*2)
# Mohr circle
Mohr_circle = fig_Mohr_circle.circle([sigma_average_mohr], [0],
radius=r_circle_mohr,
fill_alpha=0, color="gray")
# arc and label theta in Mohr circle
arc_theta_Mohr = fig_Mohr_circle.arc(x=[sigma_average_mohr], y=[0],
radius=r_circle_mohr/2, start_angle=0, end_angle=0,
line_color="gray", line_dash="2 5")
label_theta_Mohr = fig_Mohr_circle.text([sigma_average_mohr+r_circle_mohr/2], [0],
text=[""],
text_baseline="middle", x_offset=5, text_font_size="14px")
arc_theta_p_Mohr = fig_Mohr_circle.arc(x=[sigma_average_mohr], y=[0],
radius=r_circle_mohr/2, start_angle=0, end_angle=0,
line_color="gray", line_dash="2 5")
label_theta_p_Mohr = fig_Mohr_circle.text([sigma_average_mohr+r_circle_mohr/5*2], [0],
text=[""],
text_baseline="middle", x_offset=5, text_font_size="14px")
# linking line and two points from current stress state
mohr_points_opt = dict(
size=5,
fill_alpha=0.5,
alpha=0.5
)
line_stress_state = fig_Mohr_circle.line([sigma_x0, tau_0], [sigma_y0, -tau_0],
line_dash="4 4", line_color="blue", line_width=0.5)
points_stress_state = fig_Mohr_circle.circle([sigma_x0, tau_0], [sigma_y0, -tau_0],
**mohr_points_opt, color="blue", fill_color="blue")
str_label_stress_state1 = "Fixed element \n(\N{GREEK SMALL LETTER SIGMA}\N{LATIN SUBSCRIPT SMALL LETTER X}\N{SUBSCRIPT ZERO}, \N{GREEK SMALL LETTER TAU}\N{SUBSCRIPT ZERO})"
# NB: no subscript of latin y, so use gamma (very similar in the display)
str_label_stress_state2 = "Fixed element \n(\N{GREEK SMALL LETTER SIGMA}\N{Greek Subscript Small Letter Gamma}\N{SUBSCRIPT ZERO}, -\N{GREEK SMALL LETTER TAU}\N{SUBSCRIPT ZERO})"
label_points_stress_state = fig_Mohr_circle.text([sigma_x0, tau_0], [sigma_y0, -tau_0],
text=[str_label_stress_state1, str_label_stress_state2],
color="blue", x_offset=5, y_offset=18, text_font_size="14px")
# linking line and two points from stress state in function of theta
line_stress_state_theta = fig_Mohr_circle.line([sigma_x0, tau_0], [sigma_y0, -tau_0],
line_dash="4 4", line_color="red", line_width=0.5)
points_stress_state_theta = fig_Mohr_circle.circle([sigma_x0, tau_0], [sigma_y0, -tau_0],
**mohr_points_opt, color="red", fill_color="red")
str_label_stress_state_theta1 = "Rotating element \n(\N{GREEK SMALL LETTER SIGMA}\N{LATIN SUBSCRIPT SMALL LETTER X}, \N{GREEK SMALL LETTER TAU})"
# NB: no subscript of latin y, so use gamma (very similar in the display)
str_label_stress_state_theta2 = "Rotating element \n(\N{GREEK SMALL LETTER SIGMA}\N{Greek Subscript Small Letter Gamma}, -\N{GREEK SMALL LETTER TAU})"
label_points_stress_state_theta = fig_Mohr_circle.text([sigma_x0, tau_0], [sigma_y0, -tau_0],
text=[str_label_stress_state_theta1, str_label_stress_state_theta2],
text_align="right",
color="red", x_offset=-5, y_offset=18, text_font_size="14px")
-
+ # add hover for 4 points
+ fig_Mohr_circle.add_tools(HoverTool(renderers=[points_stress_state, points_stress_state_theta],
+ tooltips= [("Sigma", "@x MPa"), ("Tau", "@y MPa")]))
+
########################################################
# Configurethe logics
########################################################
update_circle_mohr = f"""
const y_var = db['y_var'][0]
const A = db['A'][0]
const b = db['b'][0]
const h = db['h'][0]
const yG = db['yG'][0]
const Iy = db['Iy'][0]
const theta_element = db['theta_element'][0]
const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))
const sigma_y0 = 0
const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))
const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)
const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)
const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)
const theta = compute_theta_mohr(theta_element, theta_principal)
const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)
// update data
db['sigma_x0'][0] = sigma_x0
db['sigma_y0'][0] = sigma_y0
db['tau_0'][0] = tau_0
db['sigma_average'][0] = sigma_average
db['r_circle_mohr'][0] = r_circle
db['sigma_x'][0] = new_state[0]
db['sigma_y'][0] = new_state[1]
db['tau'][0] = new_state[2]
db['theta'][0] = theta
update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)
"""
args_slider_pos = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
s_M=source_M,
arr_head=scheme_M_head,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
Mohr_circle=Mohr_circle,
line_stress_state=line_stress_state,
line_stress_state_theta=line_stress_state_theta,
points_stress_state=points_stress_state,
points_stress_state_theta=points_stress_state_theta,
label_points_stress_state=label_points_stress_state,
label_points_stress_state_theta=label_points_stress_state_theta,
arc_theta_Mohr=arc_theta_Mohr,
label_theta_Mohr=label_theta_Mohr,
arc_theta_p_Mohr=arc_theta_p_Mohr,
label_theta_p_Mohr=label_theta_p_Mohr,
arrow_sigma_x1=arrows_stress_state[0],
arrow_sigma_x2=arrows_stress_state[1],
arrow_sigma_y1=arrows_stress_state[2],
arrow_sigma_y2=arrows_stress_state[3],
arrow_tau_x1=arrows_stress_state[4],
arrow_tau_x2=arrows_stress_state[5],
arrow_tau_y1=arrows_stress_state[6],
arrow_tau_y2=arrows_stress_state[7],
arrow_sigma_x1_theta=arrows_stress_state_theta[0],
arrow_sigma_x2_theta=arrows_stress_state_theta[1],
arrow_sigma_y1_theta=arrows_stress_state_theta[2],
arrow_sigma_y2_theta=arrows_stress_state_theta[3],
arrow_tau_x1_theta=arrows_stress_state_theta[4],
arrow_tau_x2_theta=arrows_stress_state_theta[5],
arrow_tau_y1_theta=arrows_stress_state_theta[6],
arrow_tau_y2_theta=arrows_stress_state_theta[7])
code_slider_pos = f"""
// retrieve data
const db = source.data
const data_sb = s_sb.data
const data_q = s_q.data
const FBD = db['FBD'][0]
const pos = cb_obj.value
const q = db['q'][0]
const L = db['L'][0]
const N = compute_N(db['P'][0])
const V = compute_V(pos, q, L)
const M = compute_M(pos, q, L)
// update data
db['N'][0] = N
db['V'][0] = V
db['M'][0] = M
db['x'][0] = pos
// check state
check_state(db)
// update:
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
{update_circle_mohr}
update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)
update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)
update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)
update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)
update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)
update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)
// apply the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
// declare functions
{sb.implement_compute_NJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_NVM_diagramJS()}
{models.implement_check_stateJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_sigma_axialJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_tau_shearJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_neutral_axisJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_update_NVM_sectionJS()}
{mohrcircle.implement_compute_radius_mohrJS()}
{mohrcircle.implement_compute_sigma_average_mohrJS()}
{mohrcircle.implement_compute_stress_state_mohrJS()}
{mohrcircle.implement_compute_principal_theta_mohrJS()}
{mohrcircle.implement_compute_theta_mohrJS()}
{mohrcircle.implement_update_circle_mohrJS()}
{mohrcircle.implement_update_sigmax_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_sigmay_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_tau_stateJS(MAX_STRESS/2, SCALE_TAU)}
{mohrcircle.implement_update_sigmax_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_sigmay_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_tau_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2, SCALE_TAU)}
"""
updade_slider_pos = CustomJS(args=args_slider_pos, code=code_slider_pos)
args_slider_b = dict(source=source,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
Mohr_circle=Mohr_circle,
line_stress_state=line_stress_state,
points_stress_state=points_stress_state,
points_stress_state_theta=points_stress_state_theta,
line_stress_state_theta=line_stress_state_theta,
label_points_stress_state=label_points_stress_state,
label_points_stress_state_theta=label_points_stress_state_theta,
arc_theta_Mohr=arc_theta_Mohr,
label_theta_Mohr=label_theta_Mohr,
arc_theta_p_Mohr=arc_theta_p_Mohr,
label_theta_p_Mohr=label_theta_p_Mohr,
arrow_sigma_x1=arrows_stress_state[0],
arrow_sigma_x2=arrows_stress_state[1],
arrow_sigma_y1=arrows_stress_state[2],
arrow_sigma_y2=arrows_stress_state[3],
arrow_tau_x1=arrows_stress_state[4],
arrow_tau_x2=arrows_stress_state[5],
arrow_tau_y1=arrows_stress_state[6],
arrow_tau_y2=arrows_stress_state[7],
arrow_sigma_x1_theta=arrows_stress_state_theta[0],
arrow_sigma_x2_theta=arrows_stress_state_theta[1],
arrow_sigma_y1_theta=arrows_stress_state_theta[2],
arrow_sigma_y2_theta=arrows_stress_state_theta[3],
arrow_tau_x1_theta=arrows_stress_state_theta[4],
arrow_tau_x2_theta=arrows_stress_state_theta[5],
arrow_tau_y1_theta=arrows_stress_state_theta[6],
arrow_tau_y2_theta=arrows_stress_state_theta[7])
code_change_b = f"""
// retrieve data used
const db = source.data
const b = cb_obj.value // value of the slider
const h = db['h'][0]
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const yG = db['yG'][0]
const N = db['N'][0]
const M = db['M'][0]
const V = db['V'][0]
const y_var = db['y_var'][0]
const theta_element = db['theta_element'][0]
const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))
const sigma_y0 = 0
const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))
const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)
const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)
const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)
const theta = compute_theta_mohr(theta_element, theta_principal)
const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)
// apply the changes
db['b'][0] = b
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
db['sigma_x0'][0] = sigma_x0
db['sigma_y0'][0] = sigma_y0
db['tau_0'][0] = tau_0
db['sigma_average'][0] = sigma_average
db['r_circle_mohr'][0] = r_circle
db['sigma_x'][0] = new_state[0]
db['sigma_y'][0] = new_state[1]
db['tau'][0] = new_state[2]
db['theta'][0] = theta
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
// Mohr circle
update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)
// stress state
update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)
update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)
update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)
// stress state (theta)
update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)
update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)
update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_arrow_growthJS()}
{mohrcircle.implement_compute_radius_mohrJS()}
{mohrcircle.implement_compute_stress_state_mohrJS()}
{mohrcircle.implement_compute_sigma_average_mohrJS()}
{mohrcircle.implement_compute_principal_theta_mohrJS()}
{mohrcircle.implement_compute_theta_mohrJS()}
{mohrcircle.implement_update_circle_mohrJS()}
{js.implement_update_arrowJS()}
{mohrcircle.implement_update_sigmax_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_sigmay_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_tau_stateJS(MAX_STRESS/2, SCALE_TAU)}
{mohrcircle.implement_update_sigmax_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_sigmay_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_tau_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2, SCALE_TAU)}
"""
update_b = CustomJS(args=args_slider_b, code=code_change_b)
args_slider_h = dict(source=source,
s_ss=source_section_scheme,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
slider_y=slider_y,
beam=beam,
Mohr_circle=Mohr_circle,
line_stress_state=line_stress_state,
points_stress_state=points_stress_state,
points_stress_state_theta=points_stress_state_theta,
line_stress_state_theta=line_stress_state_theta,
label_points_stress_state=label_points_stress_state,
label_points_stress_state_theta=label_points_stress_state_theta,
arc_theta_Mohr=arc_theta_Mohr,
label_theta_Mohr=label_theta_Mohr,
arc_theta_p_Mohr=arc_theta_p_Mohr,
label_theta_p_Mohr=label_theta_p_Mohr,
arrow_sigma_x1=arrows_stress_state[0],
arrow_sigma_x2=arrows_stress_state[1],
arrow_sigma_y1=arrows_stress_state[2],
arrow_sigma_y2=arrows_stress_state[3],
arrow_tau_x1=arrows_stress_state[4],
arrow_tau_x2=arrows_stress_state[5],
arrow_tau_y1=arrows_stress_state[6],
arrow_tau_y2=arrows_stress_state[7],
arrow_sigma_x1_theta=arrows_stress_state_theta[0],
arrow_sigma_x2_theta=arrows_stress_state_theta[1],
arrow_sigma_y1_theta=arrows_stress_state_theta[2],
arrow_sigma_y2_theta=arrows_stress_state_theta[3],
arrow_tau_x1_theta=arrows_stress_state_theta[4],
arrow_tau_x2_theta=arrows_stress_state_theta[5],
arrow_tau_y1_theta=arrows_stress_state_theta[6],
arrow_tau_y2_theta=arrows_stress_state_theta[7])
code_change_h = f"""
// solve sliders conflict
const db = source.data
const h = cb_obj.value // value of the slider
if (h < db['y_var'][0]) {{
db['y_var'][0] = h
}}
slider_y.end = h
if (h < slider_y.value) {{
slider_y.value = h
}}
// retrieve data used
const data_ss = s_ss.data
const b = db['b'][0]
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const N = db['N'][0]
const V = db['V'][0]
const M = db['M'][0]
const yG = compute_centroid_y(h)
const y_var = db['y_var'][0]
const theta_element = db['theta_element'][0]
const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))
const sigma_y0 = 0
const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))
const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)
const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)
const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)
const theta = compute_theta_mohr(theta_element, theta_principal)
const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)
// apply the changes
db['h'][0] = h
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['yG'][0] = yG
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
beam.glyph.height = h // change the beam height
beam.glyph.y = h/2
data_ss['y'][1] = h // change the height of the section in the diagrams
db['sigma_x0'][0] = sigma_x0
db['sigma_y0'][0] = sigma_y0
db['tau_0'][0] = tau_0
db['sigma_average'][0] = sigma_average
db['r_circle_mohr'][0] = r_circle
db['sigma_x'][0] = new_state[0]
db['sigma_y'][0] = new_state[1]
db['tau'][0] = new_state[2]
db['theta'][0] = theta
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
// Mohr circle
update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)
// stress state
update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)
update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)
update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)
// stress state (theta)
update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)
update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)
update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)
// emit the changes
source.change.emit()
s_ss.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{js.implement_arrow_growthJS()}
{mohrcircle.implement_compute_radius_mohrJS()}
{mohrcircle.implement_compute_stress_state_mohrJS()}
{mohrcircle.implement_compute_sigma_average_mohrJS()}
{mohrcircle.implement_compute_principal_theta_mohrJS()}
{mohrcircle.implement_compute_theta_mohrJS()}
{mohrcircle.implement_update_circle_mohrJS()}
{js.implement_update_arrowJS()}
{mohrcircle.implement_update_sigmax_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_sigmay_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_tau_stateJS(MAX_STRESS/2, SCALE_TAU)}
{mohrcircle.implement_update_sigmax_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_sigmay_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_tau_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2, SCALE_TAU)}
"""
update_h = CustomJS(args=args_slider_h, code=code_change_h)
args_checkbox_P = dict(source=source,
s_M=source_M,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
N_diag=N_diag,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
Mohr_circle=Mohr_circle,
line_stress_state=line_stress_state,
points_stress_state=points_stress_state,
points_stress_state_theta=points_stress_state_theta,
line_stress_state_theta=line_stress_state_theta,
label_points_stress_state=label_points_stress_state,
label_points_stress_state_theta=label_points_stress_state_theta,
arc_theta_Mohr=arc_theta_Mohr,
label_theta_Mohr=label_theta_Mohr,
arc_theta_p_Mohr=arc_theta_p_Mohr,
label_theta_p_Mohr=label_theta_p_Mohr,
arrow_sigma_x1=arrows_stress_state[0],
arrow_sigma_x2=arrows_stress_state[1],
arrow_sigma_y1=arrows_stress_state[2],
arrow_sigma_y2=arrows_stress_state[3],
arrow_sigma_x1_theta=arrows_stress_state_theta[0],
arrow_sigma_x2_theta=arrows_stress_state_theta[1],
arrow_sigma_y1_theta=arrows_stress_state_theta[2],
arrow_sigma_y2_theta=arrows_stress_state_theta[3],
arrow_tau_x1_theta=arrows_stress_state_theta[4],
arrow_tau_x2_theta=arrows_stress_state_theta[5],
arrow_tau_y1_theta=arrows_stress_state_theta[6],
arrow_tau_y2_theta=arrows_stress_state_theta[7])
code_checkbox_P = f"""
// retrieve var from the object that uses callback
var f = cb_obj.active // checkbox P
if (f.length==0) f = [1]
const P = {P}*(1-f)
const db = source.data
const N = compute_N(P)
const M = db['M'][0]
const A = db['A'][0]
const Iy = db['Iy'][0]
const yG = db['yG'][0]
const y_var = db['y_var'][0]
const theta_element = db['theta_element'][0]
const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))
const sigma_y0 = 0
const tau_0 = db['tau_0'][0]
const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)
const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)
const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)
const theta = compute_theta_mohr(theta_element, theta_principal)
const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)
// apply the changes
db['P'][0] = P
db['N'][0] = N
db['Rx'][0] = compute_Rx(db['P'][0])
db['sigma_x0'][0] = sigma_x0
db['sigma_y0'][0] = sigma_y0
db['sigma_average'][0] = sigma_average
db['r_circle_mohr'][0] = r_circle
db['sigma_x'][0] = new_state[0]
db['sigma_y'][0] = new_state[1]
db['tau'][0] = new_state[2]
db['theta'][0] = theta
// update
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_N_diagram(db, N_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// Mohr circle
update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)
// stress state
update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)
update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)
// stress state (theta)
update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)
update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)
update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)
// emit the changes
source.change.emit()
// declare functions
{sb.implement_update_external_forcesJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_compute_RxJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_compute_NJS()}
{sb.implement_update_N_diagramJS(discr_NVM)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{stst.implement_compute_total_tauJS()}
{js.implement_arrow_growthJS()}
{mohrcircle.implement_compute_radius_mohrJS()}
{mohrcircle.implement_compute_stress_state_mohrJS()}
{mohrcircle.implement_compute_sigma_average_mohrJS()}
{mohrcircle.implement_compute_principal_theta_mohrJS()}
{mohrcircle.implement_compute_theta_mohrJS()}
{mohrcircle.implement_update_circle_mohrJS()}
{js.implement_update_arrowJS()}
{mohrcircle.implement_update_sigmax_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_sigmay_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_sigmax_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_sigmay_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_tau_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2, SCALE_TAU)}
"""
update_checkbox_P = CustomJS(args=args_checkbox_P, code=code_checkbox_P)
args_radiogroup_FBD = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
s_M=source_M,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_radiogroup_FBD = f"""
// retrieve data
const db = source.data
const FBD = cb_obj.active
const data_sb = s_sb.data
const data_q = s_q.data
const pos = db['x'][0]
// apply the changes
db['FBD'][0] = FBD
// update
check_state(db)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// emit the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
{models.implement_check_stateJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_arrowJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_radiogroup_FBD = CustomJS(args=args_radiogroup_FBD, code=code_radiogroup_FBD)
args_slider_q = dict(source=source,
s_q=source_scheme_q,
s_M=source_M,
div_f=div_forces,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
V_diag=V_diag,
M_diag=M_diag,
centroid=centroid,
neutral_axis=neutral_axis,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
Mohr_circle=Mohr_circle,
line_stress_state=line_stress_state,
points_stress_state=points_stress_state,
points_stress_state_theta=points_stress_state_theta,
line_stress_state_theta=line_stress_state_theta,
label_points_stress_state=label_points_stress_state,
label_points_stress_state_theta=label_points_stress_state_theta,
arc_theta_Mohr=arc_theta_Mohr,
label_theta_Mohr=label_theta_Mohr,
arc_theta_p_Mohr=arc_theta_p_Mohr,
label_theta_p_Mohr=label_theta_p_Mohr,
arrow_sigma_x1=arrows_stress_state[0],
arrow_sigma_x2=arrows_stress_state[1],
arrow_sigma_y1=arrows_stress_state[2],
arrow_sigma_y2=arrows_stress_state[3],
arrow_tau_x1=arrows_stress_state[4],
arrow_tau_x2=arrows_stress_state[5],
arrow_tau_y1=arrows_stress_state[6],
arrow_tau_y2=arrows_stress_state[7],
arrow_sigma_x1_theta=arrows_stress_state_theta[0],
arrow_sigma_x2_theta=arrows_stress_state_theta[1],
arrow_sigma_y1_theta=arrows_stress_state_theta[2],
arrow_sigma_y2_theta=arrows_stress_state_theta[3],
arrow_tau_x1_theta=arrows_stress_state_theta[4],
arrow_tau_x2_theta=arrows_stress_state_theta[5],
arrow_tau_y1_theta=arrows_stress_state_theta[6],
arrow_tau_y2_theta=arrows_stress_state_theta[7])
code_slider_q = f"""
// retrieve data
const db = source.data
const q = cb_obj.value
const pos = db['x'][0]
const L = db['L'][0]
const N = db['N'][0]
const V = compute_V(pos, q, L)
const M = compute_M(pos, q, L)
const y_var = db['y_var'][0]
const A = db['A'][0]
const b = db['b'][0]
const h = db['h'][0]
const yG = db['yG'][0]
const Iy = db['Iy'][0]
const theta_element = db['theta_element'][0]
const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))
const sigma_y0 = 0
const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))
const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)
const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)
const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)
const theta = compute_theta_mohr(theta_element, theta_principal)
const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)
// update data
db['q'][0] = q
db['V'][0] = V
db['M'][0] = M
db['Ry_l'][0] = compute_Ry_l(q, L)
db['Ry_r'][0] = compute_Ry_r(q, L)
db['sigma_x0'][0] = sigma_x0
db['sigma_y0'][0] = sigma_y0
db['tau_0'][0] = tau_0
db['sigma_average'][0] = sigma_average
db['r_circle_mohr'][0] = r_circle
db['sigma_x'][0] = new_state[0]
db['sigma_y'][0] = new_state[1]
db['tau'][0] = new_state[2]
db['theta'][0] = theta
// update
update_u_load(db, s_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_V_diagram(db, V_diag)
update_M_diagram(db, M_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// Mohr circle
update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)
// stress state
update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)
update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)
update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)
// stress state (theta)
update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)
update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)
update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)
// apply changes
source.change.emit()
// declare functions
{js.implement_update_arrowJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_compute_Ry_lJS()}
{sb.implement_compute_Ry_rJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_update_V_diagramJS(discr_NVM)}
{sb.implement_update_M_diagramJS(discr_NVM)}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_u_loadJS(OFFSET_Q)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
{mohrcircle.implement_compute_radius_mohrJS()}
{mohrcircle.implement_compute_stress_state_mohrJS()}
{mohrcircle.implement_compute_sigma_average_mohrJS()}
{mohrcircle.implement_compute_principal_theta_mohrJS()}
{mohrcircle.implement_compute_theta_mohrJS()}
{mohrcircle.implement_update_circle_mohrJS()}
{js.implement_update_arrowJS()}
{mohrcircle.implement_update_sigmax_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_sigmay_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_tau_stateJS(MAX_STRESS/2, SCALE_TAU)}
{mohrcircle.implement_update_sigmax_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_sigmay_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_tau_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2, SCALE_TAU)}
"""
update_slider_q = CustomJS(args=args_slider_q, code=code_slider_q)
args_slider_theta = dict(source=source,
Mohr_circle=Mohr_circle,
line_stress_state=line_stress_state,
points_stress_state=points_stress_state,
line_stress_state_theta=line_stress_state_theta,
points_stress_state_theta=points_stress_state_theta,
label_points_stress_state=label_points_stress_state,
label_points_stress_state_theta=label_points_stress_state_theta,
stress_state_theta=stress_state_theta,
label_stress_state_theta=label_stress_state_theta,
arc_theta_element=arc_theta_element,
label_theta_element= label_theta_element,
arc_theta_Mohr=arc_theta_Mohr,
label_theta_Mohr=label_theta_Mohr,
arc_theta_p_Mohr=arc_theta_p_Mohr,
label_theta_p_Mohr=label_theta_p_Mohr,
rotating_axis=rotating_axis,
beam_position=beam_position,
arrow_sigma_x1_theta=arrows_stress_state_theta[0],
arrow_sigma_x2_theta=arrows_stress_state_theta[1],
arrow_sigma_y1_theta=arrows_stress_state_theta[2],
arrow_sigma_y2_theta=arrows_stress_state_theta[3],
arrow_tau_x1_theta=arrows_stress_state_theta[4],
arrow_tau_x2_theta=arrows_stress_state_theta[5],
arrow_tau_y1_theta=arrows_stress_state_theta[6],
arrow_tau_y2_theta=arrows_stress_state_theta[7])
code_slider_theta = f"""
// retrieve data
const db = source.data
const theta_element = cb_obj.value/180*Math.PI
const sigma_x0 = db['sigma_x0'][0]
const sigma_y0 = db['sigma_y0'][0]
const tau_0 = db['tau_0'][0]
const sigma_average = db['sigma_average'][0]
const r_circle = db['r_circle_mohr'][0]
const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)
const theta = compute_theta_mohr(theta_element, theta_principal)
const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)
// update data
db['sigma_x'][0] = new_state[0]
db['sigma_y'][0] = new_state[1]
db['tau'][0] = new_state[2]
db['theta_element'][0] = theta_element
db['theta'][0] = theta
// update
// square point:
beam_position.glyph.angle = theta_element
// stress state element
update_stress_state_elements(db, stress_state_theta, rotating_axis, label_stress_state_theta, arc_theta_element, label_theta_element)
// stress state (theta)
update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)
update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)
update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)
// update Mohr circle
update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)
// apply changes
source.change.emit()
// declare functions
{mohrcircle.implement_update_stress_state_elementsJS(MAX_STRESS, MAX_DIM_STRESS_STATE)}
{js.implement_arrow_growthJS()}
{mohrcircle.implement_compute_stress_state_mohrJS()}
{mohrcircle.implement_compute_principal_theta_mohrJS()}
{mohrcircle.implement_compute_theta_mohrJS()}
{mohrcircle.implement_update_circle_mohrJS()}
{js.implement_update_arrowJS()}
{mohrcircle.implement_update_sigmax_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_sigmay_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_tau_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2, SCALE_TAU)}
"""
update_slider_theta = CustomJS(args=args_slider_theta, code=code_slider_theta)
args_slider_y = dict(source=source,
Mohr_circle=Mohr_circle,
line_stress_state=line_stress_state,
points_stress_state=points_stress_state,
line_stress_state_theta=line_stress_state_theta,
points_stress_state_theta=points_stress_state_theta,
label_points_stress_state=label_points_stress_state,
label_points_stress_state_theta=label_points_stress_state_theta,
arc_theta_Mohr=arc_theta_Mohr,
label_theta_Mohr=label_theta_Mohr,
arc_theta_p_Mohr=arc_theta_p_Mohr,
label_theta_p_Mohr=label_theta_p_Mohr,
beam_position=beam_position,
arrow_sigma_x1=arrows_stress_state[0],
arrow_sigma_x2=arrows_stress_state[1],
arrow_sigma_y1=arrows_stress_state[2],
arrow_sigma_y2=arrows_stress_state[3],
arrow_tau_x1=arrows_stress_state[4],
arrow_tau_x2=arrows_stress_state[5],
arrow_tau_y1=arrows_stress_state[6],
arrow_tau_y2=arrows_stress_state[7],
arrow_sigma_x1_theta=arrows_stress_state_theta[0],
arrow_sigma_x2_theta=arrows_stress_state_theta[1],
arrow_sigma_y1_theta=arrows_stress_state_theta[2],
arrow_sigma_y2_theta=arrows_stress_state_theta[3],
arrow_tau_x1_theta=arrows_stress_state_theta[4],
arrow_tau_x2_theta=arrows_stress_state_theta[5],
arrow_tau_y1_theta=arrows_stress_state_theta[6],
arrow_tau_y2_theta=arrows_stress_state_theta[7])
code_slider_y = f"""
// retrieve data
const db = source.data
const y_var = cb_obj.value
const N = db['N'][0]
const V = db['V'][0]
const M = db['M'][0]
const A = db['A'][0]
const b = db['b'][0]
const h = db['h'][0]
const yG = db['yG'][0]
const Iy = db['Iy'][0]
const theta_element = db['theta_element'][0]
const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))
const sigma_y0 = 0
const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))
const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)
const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)
const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)
const theta = compute_theta_mohr(theta_element, theta_principal)
const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)
// update data
db['y_var'][0] = y_var
db['sigma_x0'][0] = sigma_x0
db['sigma_y0'][0] = sigma_y0
db['tau_0'][0] = tau_0
db['sigma_average'][0] = sigma_average
db['r_circle_mohr'][0] = r_circle
db['sigma_x'][0] = new_state[0]
db['sigma_y'][0] = new_state[1]
db['tau'][0] = new_state[2]
db['theta'][0] = theta
// update
// square point:
beam_position.glyph.y = y_var
// update Mohr circle
update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)
// stress state
update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)
update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)
update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)
// stress state (theta)
update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)
update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)
update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)
// apply changes
source.change.emit()
// declare functions
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_sigma_axialJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_tau_shearJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{js.implement_arrow_growthJS()}
{mohrcircle.implement_compute_radius_mohrJS()}
{mohrcircle.implement_compute_stress_state_mohrJS()}
{mohrcircle.implement_compute_sigma_average_mohrJS()}
{mohrcircle.implement_compute_principal_theta_mohrJS()}
{mohrcircle.implement_compute_theta_mohrJS()}
{mohrcircle.implement_update_circle_mohrJS()}
{js.implement_update_arrowJS()}
{mohrcircle.implement_update_sigmax_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_sigmay_stateJS(MAX_STRESS/2)}
{mohrcircle.implement_update_tau_stateJS(MAX_STRESS/2, SCALE_TAU)}
{mohrcircle.implement_update_sigmax_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_sigmay_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2)}
{mohrcircle.implement_update_tau_state_thetaJS(MAX_STRESS/2, MAX_STRESS*2, SCALE_TAU)}
"""
update_slider_y = CustomJS(args=args_slider_y, code=code_slider_y)
# apply the logics
slider_b.js_on_change('value', update_b)
slider_h.js_on_change('value', update_h)
slider_position.js_on_change('value', updade_slider_pos)
checkbox_P.js_on_click(update_checkbox_P)
radiogroup_FBD.js_on_click(update_radiogroup_FBD)
slider_q.js_on_change('value', update_slider_q)
slider_theta_element.js_on_change('value', update_slider_theta)
slider_y.js_on_change('value', update_slider_y)
########################################################
# Build the layout
########################################################
padding_layout = 10
layout1 = layout([
[column(row(column(fig_scheme,
row(fig_section, Spacer(width=padding_layout), column(Spacer(height=padding_layout),
slider_b,
slider_h,
# row(div_geo, div_forces),
slider_y,
slider_theta_element,
Spacer(height=padding_layout),
slider_position,
slider_q,
div_rg_FBD,
radiogroup_FBD,
div_cb_P,
checkbox_P))),
column(fig_beam,
Spacer(height=padding_layout),
fig_N,
fig_V,
fig_M)),
row(column(
row(fig_NM_section, fig_axial_strain, fig_stress_N, fig_bending_strain, fig_stress_M, fig_stress_sigma),
row(fig_V_section, Spacer(width=FIG_B_ss), fig_stress_V, Spacer(width=FIG_B_ss), Spacer(width=FIG_B_ss), fig_stress_tau),
))
),
column(fig_Mohr_circle, fig_stress_state)
],
])
show(layout1)
\ No newline at end of file
diff --git a/HiddenCode/hidden_code_nb_plastic.py b/HiddenCode/hidden_code_nb_plastic.py
index 8cf8c6f..6f31687 100644
--- a/HiddenCode/hidden_code_nb_plastic.py
+++ b/HiddenCode/hidden_code_nb_plastic.py
@@ -1,1183 +1,1188 @@
import math
import numpy as np
from bokeh.layouts import layout, column, row
from bokeh.models.annotations import Label, Arrow
from bokeh.models.arrow_heads import VeeHead
-from bokeh.models import Div, CustomJS, Slider, Spacer, Text
+from bokeh.models import Div, CustomJS, Slider, Spacer, Text, HoverTool
from bokeh.models.widgets import RadioButtonGroup, CheckboxButtonGroup
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_notebook
from cienpy import simplebeam as sb
from cienpy import rectangular_section as beam_section
from cienpy import stress_strain_elastic as ststel
from cienpy import stress_strain_plastic as ststpl
from cienpy import models
from cienpy import javascriptcodes as js
output_notebook()
def main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, E_steel, fy, fy_steel, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr):
########################################################
# Initialisation
########################################################
# constants for the visualisation
SCALE = 10
OFFSET_Q = q
MAX_B = 3*b
MAX_H = 3*h
MAX_Q = q/4*5
# store the values in a specific format
data_beam = dict(
x=[0, L],
y=[0, 0]
)
data_scheme_beam = dict(
x=[0, L*SCALE],
y=[0, 0]
)
data_scheme_q = dict(
x=[0, 0, L*SCALE, L*SCALE],
y=[OFFSET_Q, OFFSET_Q+q, OFFSET_Q+q, OFFSET_Q],
x_fade=[0, 0, L*SCALE, L*SCALE]
)
data_section_scheme = dict(
x=[0, 0],
y=[0, h]
)
initial_position = L
initial_state = 'IDLE' # possible cases: IDLE, R_SEC, L_SEC
initial_FBD = 0 # right=0 left=1
data = dict( # stores every useful single variable
state=[initial_state],
FBD=[initial_FBD],
SCALE=[SCALE],
L=[L],
b=[b],
h=[h],
E=[E],
fy=[fy],
A=[A],
Iy=[Iy],
Iz=[Iz],
yG=[yG],
y_n_axis=[y_n_axis],
P=[P],
x=[initial_position],
y=[0],
q=[q],
Rx=[Rx],
Ry_l=[Ry_l],
Ry_r=[Ry_r],
N=[N],
V=[V],
M=[M],
xF=[L*SCALE]
)
source_beam = ColumnDataSource(data_beam)
source_scheme_beam = ColumnDataSource(data_scheme_beam)
source_scheme_q = ColumnDataSource(data_scheme_q)
source_section_scheme = ColumnDataSource(data_section_scheme)
source = ColumnDataSource(data)
########################################################
# Define figures, widgets and renderers as from the previous notebook
########################################################
FIG_H_B = 200 # height figure beam
FIG_B_B = 700 # width figure beam
FIG_H_S = FIG_H_B # height figure scheme
FIG_B_S = FIG_B_B # width figure scheme
FIG_H_SEC = 600 # height figure section
DIV_B_GEO = 170
DIV_B_FORCES = 170
options = dict(
toolbar_location=None
)
# figure for the beam
paddingx = 0.2*L
int_x_b = (0-paddingx, L+paddingx)
int_y_b = (-OFFSET_Q/SCALE, (MAX_Q+OFFSET_Q)/SCALE)
fig_beam = sb.define_fig_beam(int_x_b, int_y_b, options,
f_h=FIG_H_B, f_b=FIG_B_B)
# figure for the cross-section
fig_section = sb.define_fig_section(MAX_B*0.8, MAX_H*0.8, options, FIG_H_SEC)
# beam
(beam, support_l, support_r) = sb.draw_beam(fig_beam, source_beam, L,
ratio = (int_y_b[1]-int_y_b[0])/FIG_H_B*100)
# section
section = beam_section.draw_section(fig_section, b, h)
# show mechanical parameters
div_geo = Div(width= DIV_B_GEO,
text=beam_section.div_text_geo(round(h), round(b), round(L),
"{:.2e}".format(A),
"{:.2e}".format(Iy),
"{:.2e}".format(Iz)))
# change geometry
slider_b = Slider(
title="Change the width b [mm]",
start=10,
end=MAX_B,
step=10,
value=b
)
slider_h = Slider(
title="Change the height h [mm]",
start=20,
end=MAX_H,
step=20,
value=h
)
# reference system
axis_arrow_length = 0.8
axis_arrow_scale = 100
models.force_vector(fig_section, axis_arrow_length*10, 0, 0, 0, axis_arrow_length*axis_arrow_scale*1.6, 'gray') # y axis
fig_section.text(x=[0], y=[axis_arrow_length*axis_arrow_scale*1.7], text=["y"], text_color='gray', text_baseline='middle', angle=math.pi/2)
models.force_vector(fig_section, axis_arrow_length*10, 0, -axis_arrow_length*axis_arrow_scale, 0, 0, 'gray') # z axis
fig_section.text(x=[-axis_arrow_length*axis_arrow_scale*1.1], y=[0], text=["z"], text_color='gray', text_align='right', text_baseline='middle')
# figure for the forces and moments
fig_scheme = sb.define_figure_scheme(L, SCALE, MAX_Q, OFFSET_Q, options, FIG_H_S, FIG_B_S)
# uniform load (beam)
u_load = fig_beam.rect([L/2], [(q/2+OFFSET_Q)/SCALE], width=L, height=q/SCALE,
fill_color='blue', color='navy', fill_alpha=0.6, alpha=0.6)
label_u_load = fig_beam.text(x=[-0.2], y=[OFFSET_Q/SCALE], text=["q"], text_color="blue")
# axial force (beam)
axial_force = models.force_vector(fig_beam, P, L+P/SCALE, L, 0, 0, 'green')
label_P_force = fig_beam.text(x=[L+P/2/SCALE], y=[OFFSET_Q/SCALE/2], text=["P"], text_color="green")
# position point
pos_opt = dict(
source=source,
size=10,
fill_alpha=0.5,
fill_color="magenta",
color="magenta",
alpha=0.5
)
beam_position = fig_beam.circle('x', 'y', **pos_opt)
forces_position = fig_scheme.circle('xF', 'y', **pos_opt)
# beam (scheme)
scheme_beam = fig_scheme.line('x', 'y', source=source_scheme_beam, line_width=2, color='black')
scheme_fade_beam = fig_scheme.line(x=[0, L*SCALE], y=[0, 0], line_width=2, color='black', alpha=0.2)
# uniform load (scheme)
scheme_u_load = fig_scheme.patch('x', 'y', source=source_scheme_q, fill_color='blue', color='navy',
fill_alpha=0.3, alpha=0.3)
scheme_fade_u_load = fig_scheme.patch('x_fade', 'y', source=source_scheme_q, fill_color='blue',
color='navy', fill_alpha=0.3, alpha=0.3)
# axial force (scheme)
scheme_axial_force = models.force_vector(fig_scheme, P, L*SCALE+P, L*SCALE, 0, 0, 'green')
# Reactions (scheme)
scheme_Ry_r = models.force_vector(fig_scheme, Ry_r, L*SCALE, L*SCALE, -Ry_r, 0, 'orange')
scheme_Ry_l = models.force_vector(fig_scheme, Ry_l, 0, 0, -Ry_l, 0, 'orange')
scheme_Rx_l = models.force_vector(fig_scheme, Rx, -Rx, 0, 0, 0, 'orange')
# force N
scheme_N = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# force V
scheme_V = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# moment M
(scheme_M_line, scheme_M_head, source_M) = models.define_curvedArrow(fig_scheme, 0, 0, 0, size_head=0)
# change the uniform load q
slider_q = Slider(
title="Change the uniform load q [kN/m]",
start=0.1,
end=MAX_Q,
step=0.1,
value=q
)
# choose position of interest
slider_position = Slider(
title="Change the position x along the beam [m]",
start=0,
end=L,
step=0.02,
value=L
)
# choose left or right FBD
div_rg_FBD = Div(text="Free-body diagram (FBD):")
radiogroup_FBD = RadioButtonGroup(labels=['Right-hand', 'Left-hand'], active=initial_FBD)
# choose axial force or not
div_cb_P = Div(text=f"Axial force P={P} kN (applied)")
checkbox_P = CheckboxButtonGroup(labels=['Apply or remove axial force P'], active=[0])
# show values of forces and moments
div_forces = Div(width=DIV_B_FORCES,
text=sb.div_text_forces(P, P, Ry_l, Ry_r, "No cross section analysed.", 0, 0, 0))
# figures for the diagrams
options_diag = dict(
toolbar_location=None,
x_axis_label="Position [m]",
plot_width=FIG_B_B,
x_range=fig_beam.x_range
)
fig_N = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Axial force", "@y kN")],
y_axis_label="Axial force N [kN]",
plot_height=int(FIG_H_B*0.8),
title="N V M Diagrams")
fig_V = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Shear force", "@y kN")],
y_axis_label="Shear force V [kN]",
plot_height=int(FIG_H_B*0.8))
fig_M = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Bending moment", "@y kNm")],
y_axis_label="Bending moment M [kNm]",
plot_height=FIG_H_B)
fig_N.xaxis.visible = False
fig_V.xaxis.visible = False
# plot N V M
N_diag = models.NVM_diagram(fig_N, x_discr, N_discr, L, source_beam)
+ fig_N.add_tools(HoverTool(renderers=[N_diag],
+ tooltips= [("Position", "@x m"), ("Axial force", "@y kN")]))
+
V_diag = models.NVM_diagram(fig_V, x_discr, V_discr, L, source_beam)
+ fig_V.add_tools(HoverTool(renderers=[V_diag],
+ tooltips= [("Position", "@x m"), ("Shear force", "@y kN")]))
+
M_diag = models.NVM_diagram(fig_M, x_discr, M_discr, L, source_beam)
+ fig_M.add_tools(HoverTool(renderers=[M_diag],
+ tooltips= [("Position", "@x m"), ("Bending moment", "@y kNm")]))
# point that shows the position that it's analyzed
N_position = fig_N.circle('x', 'N', **pos_opt)
V_position = fig_V.circle('x', 'V', **pos_opt)
M_position = fig_M.circle('x', 'M', **pos_opt)
# figures for the stresses and strains
FIG_B_ss = 200
FIG_H_ss = 200
options_stress_strain = dict(
toolbar_location=None,
y_axis_label="Height h [mm]",
plot_height=FIG_H_ss
)
fig_stress_N = figure(**options_stress_strain,
plot_width=FIG_B_ss,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Axial stress",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2099 [MPa]")
fig_stress_N.yaxis.visible = False
fig_axial_strain = figure(**options_stress_strain,
plot_width=FIG_B_ss,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Axial strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2099 [%]",
y_range=fig_stress_N.y_range)
fig_axial_strain.yaxis.visible = False
fig_stress_M = figure(**options_stress_strain,
plot_width=FIG_B_ss,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Bending stress and centroid",
y_range=fig_stress_N.y_range,
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2098 [MPa]")
fig_stress_M.yaxis.visible = False
fig_bending_strain = figure(**options_stress_strain,
plot_width=FIG_B_ss,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Bending strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2098 [%]",
y_range=fig_stress_N.y_range)
fig_bending_strain.yaxis.visible = False
fig_stress_V = figure(**options_stress_strain,
plot_width=FIG_B_ss,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Shear stress",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU}\u1d65 [MPa]")
fig_stress_V.yaxis.visible = False
fig_stress_sigma = figure(**options_stress_strain,
plot_width=int(FIG_B_ss*1.2),
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress (green=yield) and N.A.",
y_range=fig_stress_N.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA} [MPa]")
fig_stress_tau = figure(**options_stress_strain,
plot_width=int(FIG_B_ss*1.2),
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER TAU}",
y_range=fig_stress_V.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU} [MPa]")
# plot stress N V M
- discr_stress_strain = 10
+ discr_stress_strain = 201
scale_x = 25
y_discr = np.linspace(0, h, discr_stress_strain)
sigma_N = ststel.compute_sigma_axial(y_discr, 0, A)
N_stress_diag = models.stress_diagram(fig_stress_N, sigma_N, h,
source_section_scheme, scale_x=scale_x/10)
+ fig_stress_N.add_tools(HoverTool(renderers=[N_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
sigma_M = ststel.compute_sigma_bending(y_discr, 0, Iy, yG)
(M_stress_diag, centroid) = models.stress_diagram(fig_stress_M, sigma_M, h,
source_section_scheme, True, yG, scale_x=scale_x)
+ fig_stress_M.add_tools(HoverTool(renderers=[M_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
S_rect = beam_section.compute_first_moment_of_area(y_discr, b, h, yG)
tau_V = ststel.compute_tau_shear(y_discr, 0, S_rect, Iy, b)
V_stress_diag = models.stress_diagram(fig_stress_V, tau_V, h, source_section_scheme, scale_x=1)
+ fig_stress_V.add_tools(HoverTool(renderers=[V_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot stress sigma (moved below) and tau
tau_total = tau_V
tau_stress_diag = models.stress_diagram(fig_stress_tau, tau_total, h,
source_section_scheme, scale_x=1)
+ fig_stress_tau.add_tools(HoverTool(renderers=[tau_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot strain N M
strain_axial = ststel.compute_epsilon_axial(y_discr, sigma_N, E)
axial_strain_diag = models.strain_diagram(fig_axial_strain, strain_axial, h, source_section_scheme)
+ fig_axial_strain.add_tools(HoverTool(renderers=[axial_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
+
strain_bending = ststel.compute_epsilon_bending(y_discr, sigma_M, E)
bending_strain_diag = models.strain_diagram(fig_bending_strain, strain_bending, h, source_section_scheme)
+ fig_bending_strain.add_tools(HoverTool(renderers=[bending_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
# figures for NVM
fig_NM_section = figure(**options_stress_strain,
plot_width=FIG_B_ss,
title="N and M at position x",
match_aspect=True)
fig_NM_section.axis.visible = False
fig_NM_section.grid.grid_line_alpha = 0
fig_V_section = figure(**options_stress_strain,
plot_width=FIG_B_ss,
title="V at position x",
match_aspect=True)
fig_V_section.axis.visible = False
fig_V_section.grid.grid_line_alpha = 0
# section with NVM
models.section_diagram(fig_NM_section)
models.section_diagram(fig_V_section)
# NVM in section
section_N = models.force_vector(fig_NM_section, 0, 0, 0, 0, 0, 'red')
section_V = models.force_vector(fig_V_section, 0, 0, 0, 0, 0, 'red')
(section_M_line, section_M_head, source_section_M) = models.define_curvedArrow(fig_NM_section, 0, 0, 0, size_head=0)
# NVM label in section
OFFSET_N = 1
label_N_section = fig_NM_section.text(x=[P*1.1], y=[OFFSET_N], text=[""], text_color="red", text_baseline='bottom')
label_M_section = fig_NM_section.text(x=[OFFSET_N*6], y=[-OFFSET_N*5], text=[""], text_color="red", text_baseline='top')
label_V_section = fig_V_section.text(x=[OFFSET_N*5], y=[0], text=[""], text_color="red", text_baseline='middle')
########################################################
# Define the new figures, widgets and renderers
########################################################
# choose different elastic modulus
E_wood = 8e3 # [MPa]
E_concrete = 26e3 # [MPa]
E_ceramic = 300e3 # [MPa]
slider_elastic = Slider(
title="Change the elastic modulus [MPa]",
start=E_wood,
end=E_ceramic,
step=1e3,
value=E,
margin=(5, 5, 0, 5)
)
# show values of E
div_E = Div(margin=(0, 5, 0, 5),
text=f"""
<p style='font-size:12px'>
E<sub>wood</sub> = {math.trunc(E_wood/1e3)} GPa; E<sub>concrete</sub> = {math.trunc(E_concrete/1e3)} GPa<br>
E<sub>steel</sub> = {math.trunc(E_steel/1e3)} GPa; E<sub>ceramic</sub> = {math.trunc(E_ceramic/1e3)} GPa</p>
""")
# choose different yield strength
fy_wood = 16 # [MPa] (bending)
fy_concrete = 25 # [MPa]
fy_glass = 1000 # [MPa] (compressive)
slider_yield = Slider(
title="Change the yield strength [MPa]",
start=fy_wood,
end=fy_glass,
step=1,
value=fy,
margin=(0, 5, 0, 5)
)
# show values of fy
div_fy = Div(margin=(0, 5, 0, 5),
text=f"""
<p style='font-size:12px'>
f<sub>y,wood</sub> = {math.trunc(fy_wood)} MPa; f<sub>y,concrete</sub> = {math.trunc(fy_concrete)} MPa<br>
f<sub>y,steel</sub> = {math.trunc(fy_steel)} MPa; f<sub>y,glass</sub> = {math.trunc(fy_glass)} MPa</p>
""")
# add total strain epsilon
fig_total_strain = figure(**options_stress_strain,
plot_width=FIG_B_ss,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Total strain (green=yield)",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON} [%]",
y_range=fig_stress_N.y_range)
fig_total_strain.yaxis.visible = False
# add the strain and stress with yield implemented
# plastic
- discr_pl = 2000
+ discr_pl = 2001
(stress_pl, strain_pl, y_discr_pl, yNA_pl) = ststpl.compute_total_stress_strain(discr_pl, h, fy, E, N, M, A, Iy, yG)
tmp_y = np.linspace(0, h, len(stress_pl))
total_stress_pl_diag = fig_stress_sigma.line([0, *stress_pl, 0], [0, *tmp_y, h], color='green')
total_strain_pl_diag = fig_total_strain.line(strain_pl*0, y_discr_pl, color='green')
# elastic
total_strain = ststel.compute_total_epsilon(strain_axial, strain_bending)
total_strain_diag = models.strain_diagram(fig_total_strain, total_strain, h, source_section_scheme)
+ fig_total_strain.add_tools(HoverTool(renderers=[total_strain_diag, total_strain_pl_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
+
# (moved from above, total stress sigma elastic)
sigma_total = sigma_M + sigma_N
(sigma_stress_diag, neutral_axis) = models.stress_diagram(fig_stress_sigma, sigma_total, h,
source_section_scheme,True, yG, scale_x=scale_x)
+ fig_stress_sigma.add_tools(HoverTool(renderers=[sigma_stress_diag, total_stress_pl_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
########################################################
# Configurethe logics
########################################################
args_slider_pos = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
discr_stress=discr_stress_strain,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
s_M=source_M,
arr_head=scheme_M_head,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
total_strain_diag=total_strain_diag,
total_stress_pl_diag=total_stress_pl_diag,
total_strain_pl_diag=total_strain_pl_diag)
code_slider_pos = f"""
// retrieve data
const db = source.data
const data_sb = s_sb.data
const data_q = s_q.data
const FBD = db['FBD'][0]
const pos = cb_obj.value
const q = db['q'][0]
const L = db['L'][0]
// update data
db['N'][0] = compute_N(db['P'][0])
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['x'][0] = pos
// check state
check_state(db)
// update:
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)
// apply the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
// declare functions
{sb.implement_compute_NJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_NVM_diagramJS()}
{models.implement_check_stateJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{ststel.implement_compute_sigma_axialJS()}
{ststel.implement_compute_sigma_bendingJS()}
{ststel.implement_compute_tau_shearJS()}
{ststel.implement_compute_epsilon_axialJS()}
{ststel.implement_compute_epsilon_bendingJS()}
{ststel.implement_compute_total_sigmaJS()}
{ststel.implement_compute_total_tauJS()}
{ststel.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_update_NVM_sectionJS()}
{js.implement_update_plastic_stress_strainJS(discr_pl)}
{ststpl.implement_compute_NyJS()}
{ststpl.implement_compute_MyJS()}
{ststpl.implement_compute_total_stress_strainJS()}
{ststpl.implement_support_function_plasticJS()}
{ststel.implement_compute_total_epsilonJS()}
"""
updade_slider_pos = CustomJS(args=args_slider_pos, code=code_slider_pos)
args_slider_b = dict(source=source,
s_b=source_beam,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
total_strain_diag=total_strain_diag,
total_stress_pl_diag=total_stress_pl_diag,
total_strain_pl_diag=total_strain_pl_diag)
code_change_b = f"""
// retrieve data used
const db = source.data
const b = cb_obj.value // value of the slider
const h = db['h'][0]
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const yG = db['yG'][0]
const N = db['N'][0]
const M = db['M'][0]
// apply the changes
db['b'][0] = b
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{ststel.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{ststel.implement_compute_epsilon_axialJS()}
{ststel.implement_compute_epsilon_bendingJS()}
{ststel.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{ststel.implement_compute_sigma_bendingJS()}
{ststel.implement_compute_total_sigmaJS()}
{ststel.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{ststel.implement_compute_tau_shearJS()}
{beam_section.implement_compute_centroid_yJS()}
{ststel.implement_compute_neutral_axisJS()}
{js.implement_update_plastic_stress_strainJS(discr_pl)}
{ststpl.implement_compute_NyJS()}
{ststpl.implement_compute_MyJS()}
{ststpl.implement_compute_total_stress_strainJS()}
{ststpl.implement_support_function_plasticJS()}
{ststel.implement_compute_total_epsilonJS()}
"""
update_b = CustomJS(args=args_slider_b, code=code_change_b)
args_slider_h = dict(source=source,
s_b=source_beam,
s_ss=source_section_scheme,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
total_strain_diag=total_strain_diag,
total_stress_pl_diag=total_stress_pl_diag,
total_strain_pl_diag=total_strain_pl_diag)
code_change_h = f"""
// retrieve data used
const db = source.data
const data_ss = s_ss.data
const b = db['b'][0]
const h = cb_obj.value // value of the slider
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const N = db['N'][0]
const M = db['M'][0]
const yG = compute_centroid_y(h)
// apply the changes
db['h'][0] = h
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['yG'][0] = yG
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
data_ss['y'][1] = h // change the height of the section in the diagrams
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)
// emit the changes
source.change.emit()
s_ss.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{beam_section.implement_compute_centroid_yJS()}
{ststel.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{ststel.implement_compute_epsilon_axialJS()}
{ststel.implement_compute_epsilon_bendingJS()}
{ststel.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{ststel.implement_compute_sigma_bendingJS()}
{ststel.implement_compute_total_sigmaJS()}
{ststel.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{ststel.implement_compute_tau_shearJS()}
{js.implement_update_plastic_stress_strainJS(discr_pl)}
{ststpl.implement_compute_NyJS()}
{ststpl.implement_compute_MyJS()}
{ststpl.implement_compute_total_stress_strainJS()}
{ststpl.implement_support_function_plasticJS()}
{ststel.implement_compute_total_epsilonJS()}
"""
update_h = CustomJS(args=args_slider_h, code=code_change_h)
args_checkbox_P = dict(source=source,
s_M=source_M,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
N_diag=N_diag,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
total_strain_diag=total_strain_diag,
total_stress_pl_diag=total_stress_pl_diag,
total_strain_pl_diag=total_strain_pl_diag)
code_checkbox_P = f"""
// retrieve var from the object that uses callback
var f = cb_obj.active // checkbox P
if (f.length==0) f = [1]
const db = source.data
// apply the changes
db['P'][0] = {P}*(1-f)
db['N'][0] = compute_N(db['P'][0])
db['Rx'][0] = compute_Rx(db['P'][0])
// update
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_N_diagram(db, N_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)
// emit the changes
source.change.emit()
// declare functions
{sb.implement_update_external_forcesJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_compute_RxJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_compute_NJS()}
{sb.implement_update_N_diagramJS(discr_NVM)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{ststel.implement_compute_epsilon_axialJS()}
{ststel.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{ststel.implement_compute_neutral_axisJS()}
{ststel.implement_compute_sigma_bendingJS()}
{ststel.implement_compute_total_sigmaJS()}
{ststel.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{ststel.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_plastic_stress_strainJS(discr_pl)}
{ststpl.implement_compute_NyJS()}
{ststpl.implement_compute_MyJS()}
{ststpl.implement_compute_total_stress_strainJS()}
{ststpl.implement_support_function_plasticJS()}
{ststel.implement_compute_total_epsilonJS()}
{ststel.implement_compute_epsilon_bendingJS()}
"""
update_checkbox_P = CustomJS(args=args_checkbox_P, code=code_checkbox_P)
args_radiogroup_FBD = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
s_M=source_M,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_radiogroup_FBD = f"""
// retrieve data
const db = source.data
const FBD = cb_obj.active
const data_sb = s_sb.data
const data_q = s_q.data
const pos = db['x'][0]
// apply the changes
db['FBD'][0] = FBD
// update
check_state(db)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// emit the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
{models.implement_check_stateJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_arrowJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_radiogroup_FBD = CustomJS(args=args_radiogroup_FBD, code=code_radiogroup_FBD)
args_slider_q = dict(source=source,
s_q=source_scheme_q,
s_M=source_M,
div_f=div_forces,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
V_diag=V_diag,
M_diag=M_diag,
centroid=centroid,
neutral_axis=neutral_axis,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
total_strain_diag=total_strain_diag,
total_stress_pl_diag=total_stress_pl_diag,
total_strain_pl_diag=total_strain_pl_diag)
code_slider_q = f"""
// retrieve data
const db = source.data
const q = cb_obj.value
const pos = db['x'][0]
const L = db['L'][0]
// update q
db['q'][0] = q
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['Ry_l'][0] = compute_Ry_l(q, L)
db['Ry_r'][0] = compute_Ry_r(q, L)
// update
update_u_load(db, s_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_V_diagram(db, V_diag)
update_M_diagram(db, M_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)
// apply changes
source.change.emit()
// declare functions
{js.implement_update_arrowJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_compute_Ry_lJS()}
{sb.implement_compute_Ry_rJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_update_V_diagramJS(discr_NVM)}
{sb.implement_update_M_diagramJS(discr_NVM)}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_u_loadJS(OFFSET_Q)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{ststel.implement_compute_epsilon_bendingJS()}
{ststel.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{ststel.implement_compute_neutral_axisJS()}
{beam_section.implement_compute_centroid_yJS()}
{ststel.implement_compute_sigma_bendingJS()}
{ststel.implement_compute_total_sigmaJS()}
{ststel.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{ststel.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_plastic_stress_strainJS(discr_pl)}
{ststpl.implement_compute_NyJS()}
{ststpl.implement_compute_MyJS()}
{ststpl.implement_compute_total_stress_strainJS()}
{ststpl.implement_support_function_plasticJS()}
{ststel.implement_compute_total_epsilonJS()}
{ststel.implement_compute_epsilon_axialJS()}
"""
update_slider_q = CustomJS(args=args_slider_q, code=code_slider_q)
args_slider_yield = dict(source=source,
total_strain_diag=total_strain_diag,
total_stress_pl_diag=total_stress_pl_diag,
total_strain_pl_diag=total_strain_pl_diag)
code_slider_yield = f"""
// retrieve data
const db = source.data
const fy = cb_obj.value
const L = db['L'][0]
// update q
db['fy'][0] = fy
// update
update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)
// apply changes
source.change.emit()
// declare functions
{js.implement_update_plastic_stress_strainJS(discr_pl)}
{ststpl.implement_compute_NyJS()}
{ststpl.implement_compute_MyJS()}
{ststpl.implement_compute_total_stress_strainJS()}
{ststpl.implement_support_function_plasticJS()}
{ststel.implement_compute_total_epsilonJS()}
{js.implement_linspaceJS()}
{ststel.implement_compute_epsilon_axialJS()}
{ststel.implement_compute_epsilon_bendingJS()}
{ststel.implement_compute_sigma_axialJS()}
{ststel.implement_compute_sigma_bendingJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
"""
update_slider_yield = CustomJS(args=args_slider_yield, code=code_slider_yield)
# for the implementation in the other nbs!!!
# args_slider_elastic = dict(source=source,
# N_stress_diag=N_stress_diag,
# axial_strain_diag=axial_strain_diag,
# M_stress_diag=M_stress_diag,
# bending_strain_diag=bending_strain_diag,
# centroid=centroid)
# code_slider_elastic = f"""
# // retrieve data
# const db = source.data
# const E = cb_obj.value
# // update E
# db['E'][0] = E
# // update
# update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
# update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
# // apply changes
# source.change.emit()
# // declare functions
# {js.implement_linspaceJS()}
# {sb.implement_compute_NJS()}
# {js.implement_update_bending_stress_strainJS(discr_stress_strain)}
# {js.implement_update_axial_stress_strainJS(discr_stress_strain)}
# {ststel.implement_compute_epsilon_bendingJS()}
# {ststel.implement_compute_epsilon_axialJS()}
# {ststel.implement_compute_sigma_axialJS()}
# {js.implement_update_stress_diagramJS()}
# {js.implement_update_strain_diagramJS()}
# {ststel.implement_compute_sigma_bendingJS()}
# """
# update_slider_elastic = CustomJS(args=args_slider_elastic, code=code_slider_elastic)
# slider_elastic.js_on_change('value', update_slider_elastic)
args_slider_elastic = dict(source=source,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
centroid=centroid,
total_strain_diag=total_strain_diag,
total_stress_pl_diag=total_stress_pl_diag,
total_strain_pl_diag=total_strain_pl_diag)
code_slider_elastic = f"""
// retrieve data
const db = source.data
const E = cb_obj.value
// update E
db['E'][0] = E
// update
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)
// apply changes
source.change.emit()
// declare functions
{js.implement_linspaceJS()}
{sb.implement_compute_NJS()}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{ststel.implement_compute_epsilon_bendingJS()}
{ststel.implement_compute_epsilon_axialJS()}
{ststel.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{ststel.implement_compute_sigma_bendingJS()}
{js.implement_update_plastic_stress_strainJS(discr_pl)}
{ststpl.implement_compute_NyJS()}
{ststpl.implement_compute_MyJS()}
{ststpl.implement_compute_total_stress_strainJS()}
{ststpl.implement_support_function_plasticJS()}
{ststel.implement_compute_total_epsilonJS()}
"""
update_slider_elastic = CustomJS(args=args_slider_elastic, code=code_slider_elastic)
# apply the logics
slider_b.js_on_change('value', update_b)
slider_h.js_on_change('value', update_h)
slider_position.js_on_change('value', updade_slider_pos)
checkbox_P.js_on_click(update_checkbox_P)
radiogroup_FBD.js_on_click(update_radiogroup_FBD)
slider_q.js_on_change('value', update_slider_q)
slider_elastic.js_on_change('value', update_slider_elastic)
slider_yield.js_on_change('value', update_slider_yield)
########################################################
# Build the layout
########################################################
padding_layout = 10
layout1 = layout([
[column(row(column(fig_scheme,
row(fig_section, Spacer(width=padding_layout), column(Spacer(height=padding_layout*3),
slider_b,
slider_h,
# row(div_geo, div_forces),
slider_position,
slider_q,
slider_elastic,
div_E,
slider_yield,
div_fy,
# Spacer(height=padding_layout),
div_rg_FBD,
radiogroup_FBD,
div_cb_P,
checkbox_P))),
column(fig_beam,
Spacer(height=padding_layout),
fig_N,
fig_V,
fig_M)),
row(column(
row(fig_NM_section, fig_axial_strain, fig_stress_N, fig_bending_strain, fig_stress_M, fig_total_strain, fig_stress_sigma),
row(fig_V_section, Spacer(width=FIG_B_ss), fig_stress_V, Spacer(width=FIG_B_ss), Spacer(width=FIG_B_ss), Spacer(width=FIG_B_ss), fig_stress_tau),
))
),
],
])
show(layout1)
\ No newline at end of file
diff --git a/HiddenCode/hidden_code_nb_stress.py b/HiddenCode/hidden_code_nb_stress.py
index 8f4675f..5b9e3f4 100644
--- a/HiddenCode/hidden_code_nb_stress.py
+++ b/HiddenCode/hidden_code_nb_stress.py
@@ -1,923 +1,929 @@
import math
import numpy as np
from bokeh.layouts import layout, column, row
from bokeh.models.annotations import Label, Arrow
from bokeh.models.arrow_heads import VeeHead
-from bokeh.models import Div, CustomJS, Slider, Spacer, Text
+from bokeh.models import Div, CustomJS, Slider, Spacer, Text, HoverTool
from bokeh.models.widgets import RadioButtonGroup, CheckboxButtonGroup
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_notebook
from cienpy import simplebeam as sb
from cienpy import rectangular_section as beam_section
from cienpy import stress_strain_elastic as stst
from cienpy import models
from cienpy import javascriptcodes as js
output_notebook()
def main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr):
########################################################
# Initialisation
########################################################
# constants for the visualisation
SCALE = 10
OFFSET_Q = q
MAX_B = 3*b
MAX_H = 3*h
MAX_Q = q/4*5
# store the values in a specific format
data_beam = dict(
x=[0, L],
y=[0, 0]
)
data_scheme_beam = dict(
x=[0, L*SCALE],
y=[0, 0]
)
data_scheme_q = dict(
x=[0, 0, L*SCALE, L*SCALE],
y=[OFFSET_Q, OFFSET_Q+q, OFFSET_Q+q, OFFSET_Q],
x_fade=[0, 0, L*SCALE, L*SCALE]
)
data_section_scheme = dict(
x=[0, 0],
y=[0, h]
)
initial_position = L
initial_state = 'IDLE' # possible cases: IDLE, R_SEC, L_SEC
initial_FBD = 0 # right=0 left=1
data = dict( # stores every useful single variable
state=[initial_state],
FBD=[initial_FBD],
SCALE=[SCALE],
L=[L],
b=[b],
h=[h],
E=[E],
A=[A],
Iy=[Iy],
Iz=[Iz],
yG=[yG],
y_n_axis=[y_n_axis],
P=[P],
x=[initial_position],
y=[0],
q=[q],
Rx=[Rx],
Ry_l=[Ry_l],
Ry_r=[Ry_r],
N=[N],
V=[V],
M=[M],
xF=[L*SCALE]
)
source_beam = ColumnDataSource(data_beam)
source_scheme_beam = ColumnDataSource(data_scheme_beam)
source_scheme_q = ColumnDataSource(data_scheme_q)
source_section_scheme = ColumnDataSource(data_section_scheme)
source = ColumnDataSource(data)
########################################################
# Define figures, widgets and renderers as from the previous notebook
########################################################
FIG_H_B = 200 # height figure beam
FIG_B_B = 700 # width figure beam
FIG_H_S = FIG_H_B # height figure scheme
FIG_B_S = FIG_B_B # width figure scheme
FIG_H_SEC = 600 # height figure section
DIV_B_GEO = 170
DIV_B_FORCES = 170
options = dict(
toolbar_location=None
)
# figure for the beam
paddingx = 0.2*L
int_x_b = (0-paddingx, L+paddingx)
int_y_b = (-OFFSET_Q/SCALE, (MAX_Q+OFFSET_Q)/SCALE)
fig_beam = sb.define_fig_beam(int_x_b, int_y_b, options,
f_h=FIG_H_B, f_b=FIG_B_B)
# figure for the cross-section
fig_section = sb.define_fig_section(MAX_B*0.8, MAX_H*0.8, options, FIG_H_SEC)
# beam
(beam, support_l, support_r) = sb.draw_beam(fig_beam, source_beam, L,
ratio = (int_y_b[1]-int_y_b[0])/FIG_H_B*100)
# section
section = beam_section.draw_section(fig_section, b, h)
# show mechanical parameters
div_geo = Div(width= DIV_B_GEO,
text=beam_section.div_text_geo(round(h), round(b), round(L),
"{:.2e}".format(A),
"{:.2e}".format(Iy),
"{:.2e}".format(Iz)))
# change geometry
slider_b = Slider(
title="Change the width b [mm]",
start=10,
end=MAX_B,
step=10,
value=b
)
slider_h = Slider(
title="Change the height h [mm]",
start=20,
end=MAX_H,
step=20,
value=h
)
# reference system
axis_arrow_length = 0.8
axis_arrow_scale = 100
models.force_vector(fig_section, axis_arrow_length*10, 0, 0, 0, axis_arrow_length*axis_arrow_scale*1.6, 'gray') # y axis
fig_section.text(x=[0], y=[axis_arrow_length*axis_arrow_scale*1.7], text=["y"], text_color='gray', text_baseline='middle', angle=math.pi/2)
models.force_vector(fig_section, axis_arrow_length*10, 0, -axis_arrow_length*axis_arrow_scale, 0, 0, 'gray') # z axis
fig_section.text(x=[-axis_arrow_length*axis_arrow_scale*1.1], y=[0], text=["z"], text_color='gray', text_align='right', text_baseline='middle')
# figure for the forces and moments
fig_scheme = sb.define_figure_scheme(L, SCALE, MAX_Q, OFFSET_Q, options, FIG_H_S, FIG_B_S)
# uniform load (beam)
u_load = fig_beam.rect([L/2], [(q/2+OFFSET_Q)/SCALE], width=L, height=q/SCALE,
fill_color='blue', color='navy', fill_alpha=0.6, alpha=0.6)
label_u_load = fig_beam.text(x=[-0.2], y=[OFFSET_Q/SCALE], text=["q"], text_color="blue")
# axial force (beam)
axial_force = models.force_vector(fig_beam, P, L+P/SCALE, L, 0, 0, 'green')
label_P_force = fig_beam.text(x=[L+P/2/SCALE], y=[OFFSET_Q/SCALE/2], text=["P"], text_color="green")
# position point
pos_opt = dict(
source=source,
size=10,
fill_alpha=0.5,
fill_color="magenta",
color="magenta",
alpha=0.5
)
beam_position = fig_beam.circle('x', 'y', **pos_opt)
forces_position = fig_scheme.circle('xF', 'y', **pos_opt)
# beam (scheme)
scheme_beam = fig_scheme.line('x', 'y', source=source_scheme_beam, line_width=2, color='black')
scheme_fade_beam = fig_scheme.line(x=[0, L*SCALE], y=[0, 0], line_width=2, color='black', alpha=0.2)
# uniform load (scheme)
scheme_u_load = fig_scheme.patch('x', 'y', source=source_scheme_q, fill_color='blue', color='navy',
fill_alpha=0.3, alpha=0.3)
scheme_fade_u_load = fig_scheme.patch('x_fade', 'y', source=source_scheme_q, fill_color='blue',
color='navy', fill_alpha=0.3, alpha=0.3)
# axial force (scheme)
scheme_axial_force = models.force_vector(fig_scheme, P, L*SCALE+P, L*SCALE, 0, 0, 'green')
# Reactions (scheme)
scheme_Ry_r = models.force_vector(fig_scheme, Ry_r, L*SCALE, L*SCALE, -Ry_r, 0, 'orange')
scheme_Ry_l = models.force_vector(fig_scheme, Ry_l, 0, 0, -Ry_l, 0, 'orange')
scheme_Rx_l = models.force_vector(fig_scheme, Rx, -Rx, 0, 0, 0, 'orange')
# force N
scheme_N = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# force V
scheme_V = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# moment M
(scheme_M_line, scheme_M_head, source_M) = models.define_curvedArrow(fig_scheme, 0, 0, 0, size_head=0)
# change the uniform load q
slider_q = Slider(
title="Change the uniform load q [kN/m]",
start=0.1,
end=MAX_Q,
step=0.1,
value=q
)
# choose position of interest
slider_position = Slider(
title="Change the position x along the beam [m]",
start=0,
end=L,
step=0.02,
value=L
)
# choose left or right FBD
div_rg_FBD = Div(text="Free-body diagram (FBD):")
radiogroup_FBD = RadioButtonGroup(labels=['Right-hand', 'Left-hand'], active=initial_FBD)
# choose axial force or not
div_cb_P = Div(text=f"Axial force P={P} kN (applied)")
checkbox_P = CheckboxButtonGroup(labels=['Apply or remove axial force P'], active=[0])
# show values of forces and moments
div_forces = Div(width=DIV_B_FORCES,
text=sb.div_text_forces(P, P, Ry_l, Ry_r, "No cross section analysed.", 0, 0, 0))
# figures for the diagrams
options_diag = dict(
toolbar_location=None,
x_axis_label="Position [m]",
plot_width=FIG_B_B,
x_range=fig_beam.x_range
)
fig_N = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Axial force", "@y kN")],
y_axis_label="Axial force N [kN]",
plot_height=int(FIG_H_B*0.8),
title="N V M Diagrams")
fig_V = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Shear force", "@y kN")],
y_axis_label="Shear force V [kN]",
plot_height=int(FIG_H_B*0.8))
fig_M = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Bending moment", "@y kNm")],
y_axis_label="Bending moment M [kNm]",
plot_height=FIG_H_B)
fig_N.xaxis.visible = False
fig_V.xaxis.visible = False
# plot N V M
N_diag = models.NVM_diagram(fig_N, x_discr, N_discr, L, source_beam)
+ fig_N.add_tools(HoverTool(renderers=[N_diag],
+ tooltips= [("Position", "@x m"), ("Axial force", "@y kN")]))
+
V_diag = models.NVM_diagram(fig_V, x_discr, V_discr, L, source_beam)
+ fig_V.add_tools(HoverTool(renderers=[V_diag],
+ tooltips= [("Position", "@x m"), ("Shear force", "@y kN")]))
+
M_diag = models.NVM_diagram(fig_M, x_discr, M_discr, L, source_beam)
+ fig_M.add_tools(HoverTool(renderers=[M_diag],
+ tooltips= [("Position", "@x m"), ("Bending moment", "@y kNm")]))
# point that shows the position that it's analyzed
N_position = fig_N.circle('x', 'N', **pos_opt)
V_position = fig_V.circle('x', 'V', **pos_opt)
M_position = fig_M.circle('x', 'M', **pos_opt)
########################################################
# Define the new figures, widgets and renderers
########################################################
# figures for the stresses and strains
FIG_B_ss = 200
FIG_H_ss = 200
options_stress_strain = dict(
toolbar_location=None,
y_axis_label="Height h [mm]",
plot_width=FIG_B_ss,
plot_height=FIG_H_ss
)
fig_stress_N = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Axial stress",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2099 [MPa]")
fig_stress_N.yaxis.visible = False
fig_axial_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Axial strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2099 [%]",
y_range=fig_stress_N.y_range)
fig_axial_strain.yaxis.visible = False
fig_stress_M = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Bending stress and centroid",
y_range=fig_stress_N.y_range,
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2098 [MPa]")
fig_stress_M.yaxis.visible = False
fig_bending_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Bending strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2098 [%]",
y_range=fig_stress_N.y_range)
fig_bending_strain.yaxis.visible = False
fig_stress_V = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Shear stress",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU}\u1d65 [MPa]")
fig_stress_V.yaxis.visible = False
fig_stress_sigma = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER SIGMA} and neutral axis",
y_range=fig_stress_N.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA} [MPa]")
fig_stress_tau = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER TAU}",
y_range=fig_stress_V.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU} [MPa]")
# plot stress N V M
- discr_stress_strain = 10
+ discr_stress_strain = 201
scale_x = 25
y_discr = np.linspace(0, h, discr_stress_strain)
sigma_N = stst.compute_sigma_axial(y_discr, 0, A)
N_stress_diag = models.stress_diagram(fig_stress_N, sigma_N, h,
source_section_scheme, scale_x=scale_x/10)
+ fig_stress_N.add_tools(HoverTool(renderers=[N_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
sigma_M = stst.compute_sigma_bending(y_discr, 0, Iy, yG)
(M_stress_diag, centroid) = models.stress_diagram(fig_stress_M, sigma_M, h,
source_section_scheme, True, yG, scale_x=scale_x)
+ fig_stress_M.add_tools(HoverTool(renderers=[M_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
S_rect = beam_section.compute_first_moment_of_area(y_discr, b, h, yG)
tau_V = stst.compute_tau_shear(y_discr, 0, S_rect, Iy, b)
V_stress_diag = models.stress_diagram(fig_stress_V, tau_V, h, source_section_scheme, scale_x=1)
+ fig_stress_V.add_tools(HoverTool(renderers=[V_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot stress sigma and tau
sigma_total = sigma_M + sigma_N
(sigma_stress_diag, neutral_axis) = models.stress_diagram(fig_stress_sigma, sigma_total, h,
source_section_scheme,True, yG, scale_x=scale_x)
+ fig_stress_sigma.add_tools(HoverTool(renderers=[sigma_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
tau_total = tau_V
tau_stress_diag = models.stress_diagram(fig_stress_tau, tau_total, h,
source_section_scheme, scale_x=1)
+ fig_stress_tau.add_tools(HoverTool(renderers=[tau_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot strain N M
strain_axial = stst.compute_epsilon_axial(y_discr, sigma_N, E)
axial_strain_diag = models.strain_diagram(fig_axial_strain, strain_axial, h, source_section_scheme)
+ fig_axial_strain.add_tools(HoverTool(renderers=[axial_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
+
strain_bending = stst.compute_epsilon_bending(y_discr, sigma_M, E)
bending_strain_diag = models.strain_diagram(fig_bending_strain, strain_bending, h, source_section_scheme)
+ fig_bending_strain.add_tools(HoverTool(renderers=[bending_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
# figures for NVM
fig_NM_section = figure(**options_stress_strain,
title="N and M at position x",
match_aspect=True)
fig_NM_section.axis.visible = False
fig_NM_section.grid.grid_line_alpha = 0
fig_V_section = figure(**options_stress_strain,
title="V at position x",
match_aspect=True)
fig_V_section.axis.visible = False
fig_V_section.grid.grid_line_alpha = 0
# section with NVM
models.section_diagram(fig_NM_section)
models.section_diagram(fig_V_section)
# NVM in section
section_N = models.force_vector(fig_NM_section, 0, 0, 0, 0, 0, 'red')
section_V = models.force_vector(fig_V_section, 0, 0, 0, 0, 0, 'red')
(section_M_line, section_M_head, source_section_M) = models.define_curvedArrow(fig_NM_section, 0, 0, 0, size_head=0)
# NVM label in section
OFFSET_N = 1
label_N_section = fig_NM_section.text(x=[P*1.1], y=[OFFSET_N], text=[""], text_color="red", text_baseline='bottom')
label_M_section = fig_NM_section.text(x=[OFFSET_N*6], y=[-OFFSET_N*5], text=[""], text_color="red", text_baseline='top')
label_V_section = fig_V_section.text(x=[OFFSET_N*5], y=[0], text=[""], text_color="red", text_baseline='middle')
########################################################
# Configurethe logics
########################################################
args_slider_pos = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
s_M=source_M,
arr_head=scheme_M_head,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_slider_pos = f"""
// retrieve data
const db = source.data
const data_sb = s_sb.data
const data_q = s_q.data
const FBD = db['FBD'][0]
const pos = cb_obj.value
const q = db['q'][0]
const L = db['L'][0]
// update data
db['N'][0] = compute_N(db['P'][0])
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['x'][0] = pos
// check state
check_state(db)
// update:
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// apply the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
// declare functions
{sb.implement_compute_NJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_NVM_diagramJS()}
{models.implement_check_stateJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_sigma_axialJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_tau_shearJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_update_NVM_sectionJS()}
"""
updade_slider_pos = CustomJS(args=args_slider_pos, code=code_slider_pos)
args_slider_b = dict(source=source,
s_b=source_beam,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag)
code_change_b = f"""
// retrieve data used
const db = source.data
const b = cb_obj.value // value of the slider
const h = db['h'][0]
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const yG = db['yG'][0]
const N = db['N'][0]
const M = db['M'][0]
// apply the changes
db['b'][0] = b
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
"""
update_b = CustomJS(args=args_slider_b, code=code_change_b)
args_slider_h = dict(source=source,
s_b=source_beam,
s_ss=source_section_scheme,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag)
code_change_h = f"""
// retrieve data used
const db = source.data
const data_ss = s_ss.data
const b = db['b'][0]
const h = cb_obj.value // value of the slider
const A = compute_area(b, h)
const Iy = compute_inertia_y(b, h)
const N = db['N'][0]
const M = db['M'][0]
const yG = compute_centroid_y(h)
// apply the changes
db['h'][0] = h
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h)
db['yG'][0] = yG
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
data_ss['y'][1] = h // change the height of the section in the diagrams
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
// emit the changes
source.change.emit()
s_ss.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
"""
update_h = CustomJS(args=args_slider_h, code=code_change_h)
args_checkbox_P = dict(source=source,
s_M=source_M,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
N_diag=N_diag,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_checkbox_P = f"""
// retrieve var from the object that uses callback
var f = cb_obj.active // checkbox P
if (f.length==0) f = [1]
const db = source.data
// apply the changes
db['P'][0] = {P}*(1-f)
db['N'][0] = compute_N(db['P'][0])
db['Rx'][0] = compute_Rx(db['P'][0])
// update
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_N_diagram(db, N_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// emit the changes
source.change.emit()
// declare functions
{sb.implement_update_external_forcesJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_compute_RxJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_compute_NJS()}
{sb.implement_update_N_diagramJS(discr_NVM)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_checkbox_P = CustomJS(args=args_checkbox_P, code=code_checkbox_P)
args_radiogroup_FBD = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
s_M=source_M,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_radiogroup_FBD = f"""
// retrieve data
const db = source.data
const FBD = cb_obj.active
const data_sb = s_sb.data
const data_q = s_q.data
const pos = db['x'][0]
// apply the changes
db['FBD'][0] = FBD
// update
check_state(db)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// emit the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
{models.implement_check_stateJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_arrowJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_radiogroup_FBD = CustomJS(args=args_radiogroup_FBD, code=code_radiogroup_FBD)
args_slider_q = dict(source=source,
s_q=source_scheme_q,
s_M=source_M,
div_f=div_forces,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
V_diag=V_diag,
M_diag=M_diag,
centroid=centroid,
neutral_axis=neutral_axis,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_slider_q = f"""
// retrieve data
const db = source.data
const q = cb_obj.value
const pos = db['x'][0]
const L = db['L'][0]
// update q
db['q'][0] = q
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['Ry_l'][0] = compute_Ry_l(q, L)
db['Ry_r'][0] = compute_Ry_r(q, L)
// update
update_u_load(db, s_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_V_diagram(db, V_diag)
update_M_diagram(db, M_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// apply changes
source.change.emit()
// declare functions
{js.implement_update_arrowJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_compute_Ry_lJS()}
{sb.implement_compute_Ry_rJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_update_V_diagramJS(discr_NVM)}
{sb.implement_update_M_diagramJS(discr_NVM)}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_u_loadJS(OFFSET_Q)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain)}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_slider_q = CustomJS(args=args_slider_q, code=code_slider_q)
# apply the logics
slider_b.js_on_change('value', update_b)
slider_h.js_on_change('value', update_h)
slider_position.js_on_change('value', updade_slider_pos)
checkbox_P.js_on_click(update_checkbox_P)
radiogroup_FBD.js_on_click(update_radiogroup_FBD)
slider_q.js_on_change('value', update_slider_q)
########################################################
# Build the layout
########################################################
padding_layout = 10
layout1 = layout([
[column(row(column(fig_scheme,
row(fig_section, Spacer(width=padding_layout), column(Spacer(height=padding_layout),
slider_b,
slider_h,
row(div_geo, div_forces),
Spacer(height=padding_layout),
slider_position,
slider_q,
div_rg_FBD,
radiogroup_FBD,
div_cb_P,
checkbox_P))),
column(fig_beam,
Spacer(height=padding_layout),
fig_N,
fig_V,
fig_M)),
row(column(
row(fig_NM_section, fig_axial_strain, fig_stress_N, fig_bending_strain, fig_stress_M, fig_stress_sigma),
row(fig_V_section, Spacer(width=FIG_B_ss), fig_stress_V, Spacer(width=FIG_B_ss), Spacer(width=FIG_B_ss), fig_stress_tau),
))
)],
])
show(layout1)
\ No newline at end of file
diff --git a/HiddenCode/hidden_code_nb_torsion.py b/HiddenCode/hidden_code_nb_torsion.py
index b266e65..d2d8c4b 100644
--- a/HiddenCode/hidden_code_nb_torsion.py
+++ b/HiddenCode/hidden_code_nb_torsion.py
@@ -1,1194 +1,1199 @@
import math
import numpy as np
from bokeh.layouts import layout, column, row
from bokeh.models.annotations import Label, Arrow
from bokeh.models.arrow_heads import VeeHead
-from bokeh.models import Div, CustomJS, Slider, Spacer, Text
+from bokeh.models import Div, CustomJS, Slider, Spacer, Text, HoverTool
from bokeh.models.widgets import RadioButtonGroup, CheckboxButtonGroup
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_notebook
from cienpy import simplebeam as sb
from cienpy import hollow_rectangular_section as beam_section
from cienpy import stress_strain_elastic as stst
from cienpy import models
from cienpy import javascriptcodes as js
output_notebook()
def main_code(L, h, b, t, A, Iy, Iz, yG, y_n_axis, q, P, Mt, E, N, V, M, T, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr, T_discr):
########################################################
# Initialisation
########################################################
# constants for the visualisation
SCALE = 10
SCALE_T = 10
OFFSET_Q = q
MAX_B = 3*b
MAX_H = 3*h
MAX_T = 2*t
MAX_Q = q/4*5
# store the values in a specific format
data_beam = dict(
x=[0, L],
y=[0, 0]
)
data_scheme_beam = dict(
x=[0, L*SCALE],
y=[0, 0]
)
data_scheme_q = dict(
x=[0, 0, L*SCALE, L*SCALE],
y=[OFFSET_Q, OFFSET_Q+q, OFFSET_Q+q, OFFSET_Q],
x_fade=[0, 0, L*SCALE, L*SCALE]
)
data_section_scheme = dict(
x=[0, 0],
y=[0, h]
)
initial_position = L
initial_state = 'IDLE' # possible cases: IDLE, R_SEC, L_SEC
initial_FBD = 0 # right=0 left=1
data = dict( # stores every useful single variable
state=[initial_state],
FBD=[initial_FBD],
SCALE=[SCALE],
L=[L],
b=[b],
h=[h],
t=[t],
E=[E],
A=[A],
Iy=[Iy],
Iz=[Iz],
yG=[yG],
y_n_axis=[y_n_axis],
P=[P],
x=[initial_position],
y=[0],
q=[q],
Mt=[Mt],
Rx=[Rx],
Ry_l=[Ry_l],
Ry_r=[Ry_r],
N=[N],
V=[V],
M=[M],
T=[T],
xF=[L*SCALE]
)
source_beam = ColumnDataSource(data_beam)
source_scheme_beam = ColumnDataSource(data_scheme_beam)
source_scheme_q = ColumnDataSource(data_scheme_q)
source_section_scheme = ColumnDataSource(data_section_scheme)
source = ColumnDataSource(data)
# Constants
FIG_H_B = 200 # height figure beam
FIG_B_B = 700 # width figure beam
FIG_H_S = FIG_H_B # height figure scheme
FIG_B_S = FIG_B_B # width figure scheme
FIG_H_SEC = 600 # height figure section
DIV_B_GEO = 170
DIV_B_FORCES = 170
########################################################
# Define figures, widgets and renderers as from the previous notebook
########################################################
options = dict(
toolbar_location=None
)
# figure for the beam
paddingx = 0.2*L
int_x_b = (0-paddingx, L+paddingx)
int_y_b = (-OFFSET_Q/SCALE, (MAX_Q+OFFSET_Q)/SCALE)
fig_beam = sb.define_fig_beam(int_x_b, int_y_b, options,
f_h=FIG_H_B, f_b=FIG_B_B)
# figure for the cross-section
fig_section = sb.define_fig_section(MAX_B*0.8, MAX_H*0.8, options, FIG_H_SEC)
# beam
(beam, support_l, support_r) = sb.draw_beam(fig_beam, source_beam, L,
ratio = (int_y_b[1]-int_y_b[0])/FIG_H_B*100)
# section
section = beam_section.draw_section(fig_section, b, h, t)
# show mechanical parameters
div_geo = Div(width= DIV_B_GEO,
text=beam_section.div_text_geo(round(h), round(b), round(t), round(L),
"{:.2e}".format(A),
"{:.2e}".format(Iy),
"{:.2e}".format(Iz)))
# change geometry
slider_b = Slider(
title="Change the width b [mm]",
start=MAX_T*2+10,
end=MAX_B,
step=10,
value=b
)
slider_h = Slider(
title="Change the height h [mm]",
start=MAX_T*2+10,
end=MAX_H,
step=10,
value=h
)
# reference system
axis_arrow_length = 0.8
axis_arrow_scale = 100
models.force_vector(fig_section, axis_arrow_length*10, 0, 0, 0, axis_arrow_length*axis_arrow_scale*1.6, 'gray') # y axis
fig_section.text(x=[0], y=[axis_arrow_length*axis_arrow_scale*1.7], text=["y"], text_color='gray', text_baseline='middle', angle=math.pi/2)
models.force_vector(fig_section, axis_arrow_length*10, 0, -axis_arrow_length*axis_arrow_scale, 0, 0, 'gray') # z axis
fig_section.text(x=[-axis_arrow_length*axis_arrow_scale*1.1], y=[0], text=["z"], text_color='gray', text_align='right', text_baseline='middle')
# figure for the forces and moments
fig_scheme = sb.define_figure_scheme(L, SCALE, MAX_Q, OFFSET_Q, options, FIG_H_S, FIG_B_S)
# uniform load (beam)
u_load = fig_beam.rect([L/2], [(q/2+OFFSET_Q)/SCALE], width=L, height=q/SCALE,
fill_color='blue', color='navy', fill_alpha=0.6, alpha=0.6)
label_u_load = fig_beam.text(x=[-0.2], y=[OFFSET_Q/SCALE], text=["q"], text_color="blue")
# axial force (beam)
axial_force = models.force_vector(fig_beam, P, L+P/SCALE, L, 0, 0, 'green')
label_P_force = fig_beam.text(x=[L+P/2/SCALE], y=[OFFSET_Q/SCALE/4], text=["P"], text_color="green")
# position point
pos_opt = dict(
source=source,
size=10,
fill_alpha=0.5,
fill_color="magenta",
color="magenta",
alpha=0.5
)
beam_position = fig_beam.circle('x', 'y', **pos_opt)
forces_position = fig_scheme.circle('xF', 'y', **pos_opt)
# beam (scheme)
scheme_beam = fig_scheme.line('x', 'y', source=source_scheme_beam, line_width=2, color='black')
scheme_fade_beam = fig_scheme.line(x=[0, L*SCALE], y=[0, 0], line_width=2, color='black', alpha=0.2)
# uniform load (scheme)
scheme_u_load = fig_scheme.patch('x', 'y', source=source_scheme_q, fill_color='blue', color='navy',
fill_alpha=0.3, alpha=0.3)
scheme_fade_u_load = fig_scheme.patch('x_fade', 'y', source=source_scheme_q, fill_color='blue',
color='navy', fill_alpha=0.3, alpha=0.3)
# axial force (scheme)
scheme_axial_force = models.force_vector(fig_scheme, P, L*SCALE+P, L*SCALE, 0, 0, 'green')
# Reactions (scheme)
scheme_Ry_r = models.force_vector(fig_scheme, Ry_r, L*SCALE, L*SCALE, -Ry_r, 0, 'orange')
scheme_Ry_l = models.force_vector(fig_scheme, Ry_l, 0, 0, -Ry_l, 0, 'orange')
scheme_Rx_l = models.force_vector(fig_scheme, Rx, -Rx, 0, 0, 0, 'orange')
# force N
scheme_N = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# force V
scheme_V = models.force_vector(fig_scheme, 0, 0, 0, 0, 0, 'red')
# moment M
(scheme_M_line, scheme_M_head, source_M) = models.define_curvedArrow(fig_scheme, 0, 0, 0, size_head=0)
# change the uniform load q
slider_q = Slider(
title="Change the uniform load q [kN/m]",
start=0.1,
end=MAX_Q,
step=0.1,
value=q
)
# choose position of interest
slider_position = Slider(
title="Change the position x along the beam [m]",
start=0,
end=L,
step=0.02,
value=L
)
# choose left or right FBD
div_rg_FBD = Div(text="Free-body diagram (FBD):")
radiogroup_FBD = RadioButtonGroup(labels=['Right-hand', 'Left-hand'], active=initial_FBD)
# choose axial force or not
div_cb_P = Div(text=f"Axial force P={P} kN (applied)")
checkbox_P = CheckboxButtonGroup(labels=['Apply or remove axial force P'], active=[0])
# show values of forces and moments
div_forces = Div(width=DIV_B_FORCES,
text=sb.div_text_forces(P, P, Ry_l, Ry_r, "No cross section analysed.", 0, 0, 0))
# figures for the diagrams
options_diag = dict(
toolbar_location=None,
x_axis_label="Position [m]",
plot_width=FIG_B_B,
x_range=fig_beam.x_range
)
fig_N = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Axial force", "@y kN")],
y_axis_label="Axial force N [kN]",
plot_height=int(FIG_H_B*0.8),
title="N V M Diagrams")
fig_V = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Shear force", "@y kN")],
y_axis_label="Shear force V [kN]",
plot_height=int(FIG_H_B*0.8))
fig_M = figure(**options_diag,
- tooltips= [("Position", "@x m"),
- ("Bending moment", "@y kNm")],
y_axis_label="Bending moment M [kNm]",
plot_height=FIG_H_B)
fig_N.xaxis.visible = False
fig_V.xaxis.visible = False
# plot N V M
N_diag = models.NVM_diagram(fig_N, x_discr, N_discr, L, source_beam)
+ fig_N.add_tools(HoverTool(renderers=[N_diag],
+ tooltips= [("Position", "@x m"), ("Axial force", "@y kN")]))
+
V_diag = models.NVM_diagram(fig_V, x_discr, V_discr, L, source_beam)
+ fig_V.add_tools(HoverTool(renderers=[V_diag],
+ tooltips= [("Position", "@x m"), ("Shear force", "@y kN")]))
+
M_diag = models.NVM_diagram(fig_M, x_discr, M_discr, L, source_beam)
+ fig_M.add_tools(HoverTool(renderers=[M_diag],
+ tooltips= [("Position", "@x m"), ("Bending moment", "@y kNm")]))
# point that shows the position that it's analyzed
N_position = fig_N.circle('x', 'N', **pos_opt)
V_position = fig_V.circle('x', 'V', **pos_opt)
M_position = fig_M.circle('x', 'M', **pos_opt)
# figures for the stresses and strains
FIG_B_ss = 200
FIG_H_ss = 200
options_stress_strain = dict(
toolbar_location=None,
y_axis_label="Height h [mm]",
plot_width=FIG_B_ss,
plot_height=FIG_H_ss,
)
fig_stress_N = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Axial stress",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2099 [MPa]")
fig_stress_N.yaxis.visible = False
fig_axial_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Axial strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2099 [%]",
y_range=fig_stress_N.y_range)
fig_axial_strain.yaxis.visible = False
fig_stress_M = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Bending stress and centroid",
y_range=fig_stress_N.y_range,
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA}\u2098 [MPa]")
fig_stress_M.yaxis.visible = False
fig_bending_strain = figure(**options_stress_strain,
- tooltips= [("Strain", "@x %"),
- ("Height", "@y mm")],
title="Bending strain",
x_axis_label="Strain \N{GREEK SMALL LETTER EPSILON}\u2098 [%]",
y_range=fig_stress_N.y_range)
fig_bending_strain.yaxis.visible = False
fig_stress_V = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Shear stress",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU}\u1d65 [MPa]")
fig_stress_V.yaxis.visible = False
fig_stress_sigma = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER SIGMA} and neutral axis",
y_range=fig_stress_N.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER SIGMA} [MPa]")
fig_stress_tau = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Total stress \N{GREEK SMALL LETTER TAU}",
y_range=fig_stress_V.y_range,
y_axis_location="right",
x_axis_label="Stress \N{GREEK SMALL LETTER TAU} [MPa]")
# plot stress N V M
- discr_stress_strain = 50
+ discr_stress_strain = 201
scale_x = 25
y_discr = np.linspace(0, h, discr_stress_strain)
sigma_N = stst.compute_sigma_axial(y_discr, N, A)
N_stress_diag = models.stress_diagram(fig_stress_N, sigma_N, h,
source_section_scheme, scale_x=scale_x/10)
+ fig_stress_N.add_tools(HoverTool(renderers=[N_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
sigma_M = stst.compute_sigma_bending(y_discr, 0, Iy, yG)
(M_stress_diag, centroid) = models.stress_diagram(fig_stress_M, sigma_M, h,
source_section_scheme, True, yG, scale_x=scale_x)
+ fig_stress_M.add_tools(HoverTool(renderers=[M_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
S_rect = beam_section.compute_first_moment_of_area(y_discr, b, h, t, yG)
tau_V = stst.compute_tau_shear(y_discr, 0, S_rect, Iy, b)
V_stress_diag = models.stress_diagram(fig_stress_V, tau_V, h, source_section_scheme, scale_x=1)
-
+ fig_stress_V.add_tools(HoverTool(renderers=[V_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot stress sigma and tau
sigma_total = sigma_M + sigma_N
(sigma_stress_diag, neutral_axis) = models.stress_diagram(fig_stress_sigma, sigma_total, h,
source_section_scheme,True, yG, scale_x=scale_x)
+ fig_stress_sigma.add_tools(HoverTool(renderers=[sigma_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
tau_total = tau_V
tau_stress_diag = models.stress_diagram(fig_stress_tau, tau_total, h,
source_section_scheme, scale_x=1)
+ fig_stress_tau.add_tools(HoverTool(renderers=[tau_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
# plot strain N M
strain_axial = stst.compute_epsilon_axial(y_discr, sigma_N, E)
axial_strain_diag = models.strain_diagram(fig_axial_strain, strain_axial, h, source_section_scheme)
+ fig_axial_strain.add_tools(HoverTool(renderers=[axial_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
+
strain_bending = stst.compute_epsilon_bending(y_discr, sigma_M, E)
bending_strain_diag = models.strain_diagram(fig_bending_strain, strain_bending, h, source_section_scheme)
+ fig_bending_strain.add_tools(HoverTool(renderers=[bending_strain_diag],
+ tooltips= [("Strain", "@x %"), ("Height", "@y mm")]))
# figures for NVM
fig_NM_section = figure(**options_stress_strain,
title="N and M at position x",
match_aspect=True)
fig_NM_section.axis.visible = False
fig_NM_section.grid.grid_line_alpha = 0
fig_V_section = figure(**options_stress_strain,
title="V at position x",
match_aspect=True)
fig_V_section.axis.visible = False
fig_V_section.grid.grid_line_alpha = 0
# section with NVM
models.section_diagram(fig_NM_section)
models.section_diagram(fig_V_section)
# NVM in section
section_N = models.force_vector(fig_NM_section, 0, 0, 0, 0, 0, 'red')
section_V = models.force_vector(fig_V_section, 0, 0, 0, 0, 0, 'red')
(section_M_line, section_M_head, source_section_M) = models.define_curvedArrow(fig_NM_section, 0, 0, 0, size_head=0)
# NVM label in section
OFFSET_N = 1
label_N_section = fig_NM_section.text(x=[P*1.1], y=[OFFSET_N], text=[""], text_color="red", text_baseline='bottom')
label_M_section = fig_NM_section.text(x=[OFFSET_N*6], y=[-OFFSET_N*5], text=[""], text_color="red", text_baseline='top')
label_V_section = fig_V_section.text(x=[OFFSET_N*5], y=[OFFSET_N*4], text=[""], text_color="red", text_baseline='middle')
########################################################
# Define the new figures, widgets and renderers
########################################################
# applied torsion Mt
str_Mt = "M\N{LATIN SUBSCRIPT SMALL LETTER T}"
div_cb_T = Div(text=f"Torsion {str_Mt}={Mt} kNm (applied)")
checkbox_T = CheckboxButtonGroup(labels=[f'Apply or remove torsion {str_Mt}'], active=[0])
# torsion diagram
fig_M.plot_height = int(FIG_H_B*0.8)
fig_M.xaxis.visible = False
fig_T = figure(**options_diag,
- tooltips= [("Position:", "@x m"),
- ("Torsion:", "@y kNm")],
y_axis_label="Torsion T [kNm]",
plot_height=FIG_H_B)
# change geometry (thickness)
slider_t = Slider(
title="Change the thicknes t [mm]",
start=2,
end=MAX_T,
step=1,
value=t
)
# plot T
T_diag = models.NVM_diagram(fig_T, x_discr, T_discr, L, source_beam)
+ fig_T.add_tools(HoverTool(renderers=[T_diag],
+ tooltips= [("Position", "@x m"), ("Torsion", "@y kNm")]))
# point that shows the position that it's analyzed
T_position = fig_T.circle('x', 'T', **pos_opt)
# figure for the stress tau_T
fig_stress_T = figure(**options_stress_strain,
- tooltips= [("Stress", "@x MPa"),
- ("Height", "@y mm")],
title="Torsional stress",
y_range=fig_stress_V.y_range,
x_axis_label="Stress \N{GREEK SMALL LETTER TAU}\N{LATIN SUBSCRIPT SMALL LETTER T} [MPa]")
fig_stress_T.yaxis.visible = False
# torsion in the section
(section_torsion_line, section_torsion_head, section_torsion_source) = models.define_curvedArrow(fig_section, 0, T*4/SCALE_T, abs(T*3/SCALE_T), size_head=20)
# moment Mt in beam
PIXEL2UNIT_BEAM = 100
(beam_torsion_line, beam_torsion_head, source_beam_torsion) = models.define_doubleArrow(fig_beam, L/2, L/2+Mt/SCALE/10, 0, 0,
arrow_color="green", pixel2unit=PIXEL2UNIT_BEAM)
# label
label_Mt_force = fig_beam.text(x=[L/2+Mt/2/SCALE/SCALE_T], y=[OFFSET_Q/4/SCALE/SCALE_T], text=[str_Mt], text_color="green")
# add torsion in section stress
T_DOUBLE_HEAD_SIZE = 10
(section_T_line, section_T_head, section_T_source) = models.define_doubleArrow(fig_V_section, OFFSET_N*4-T/SCALE_T, OFFSET_N*4, 0, 0, size_head=T_DOUBLE_HEAD_SIZE)
# label
label_T_section = fig_V_section.text(x=[Mt*1.1/SCALE_T], y=[OFFSET_N], text=["T"], text_color="red", text_baseline='bottom')
# tau stress torsion
tau_T = beam_section.compute_tau_torsion(y_discr, T, b, h, t)
T_stress_diag = models.stress_diagram(fig_stress_T, tau_T, h, source_section_scheme, scale_x=1)
-
+ fig_stress_T.add_tools(HoverTool(renderers=[T_stress_diag],
+ tooltips= [("Stress", "@x MPa"), ("Height", "@y mm")]))
+
# Easter egg
EasterEgg1 = fig_N.text(x=[2], y=[-4], text=[""], text_color="purple", text_font_size="10px", angle=math.pi/10)
########################################################
# Configurethe logics
########################################################
args_slider_pos = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
s_M=source_M,
arr_head=scheme_M_head,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section,
section_T_line=section_T_line,
section_T_head=section_T_head,
section_T_source=section_T_source,
section_torsion_head=section_torsion_head,
section_torsion_source=section_torsion_source,
label_T_section=label_T_section,
div_T=div_cb_T,
T_stress_diag=T_stress_diag)
code_slider_pos = f"""
// retrieve data
const db = source.data
const data_sb = s_sb.data
const data_q = s_q.data
const FBD = db['FBD'][0]
const pos = cb_obj.value
const q = db['q'][0]
const L = db['L'][0]
const Mt = db['Mt'][0]
// update data
db['N'][0] = compute_N(db['P'][0])
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['T'][0] = compute_T(pos, Mt, L)
db['x'][0] = pos
// check state
check_state(db)
// update:
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
update_T_section(db, section_torsion_head, section_torsion_source, section_T_line, section_T_head, section_T_source, div_T, label_T_section)
update_torsional_stress(db, T_stress_diag)
// apply the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
// declare functions
{sb.implement_compute_NJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_growthJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_NVM_diagramJS()}
{js.implement_update_stress_diagramJS()}
{models.implement_check_stateJS()}
{js.implement_update_strain_diagramJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_sigma_axialJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_tau_shearJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain, hollow_rectangular_section=True)}
{js.implement_update_total_stressJS(discr_stress_strain, T_opt=True, hollow_rectangular_section=True)}
{js.implement_update_NVM_sectionJS()}
{sb.implement_update_T_sectionJS(scale_T=SCALE_T)}
{js.implement_update_doubleArrowJS()}
{sb.implement_compute_TJS()}
{beam_section.implement_compute_tau_torsionJS()}
{beam_section.implement_update_torsional_stressJS(discr_stress_strain)}
"""
updade_slider_pos = CustomJS(args=args_slider_pos, code=code_slider_pos)
args_slider_b = dict(source=source,
s_b=source_beam,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
T_stress_diag=T_stress_diag,
div_P=div_cb_P)
code_change_b = f"""
// retrieve data used
const db = source.data
const b = cb_obj.value // value of the slider
const h = db['h'][0]
const t = db['t'][0]
const A = compute_area(b, h, t)
const Iy = compute_inertia_y(b, h, t)
const yG = db['yG'][0]
const N = db['N'][0]
const M = db['M'][0]
// Easter egg
const str_Doge = " such width"
const str_tmp = div_P.text
if (b == {MAX_B}) {{
div_P.text = str_tmp+str_Doge
}} else {{
div_P.text = str_tmp.replace(str_Doge, '')
}}
// apply the changes
db['b'][0] = b
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h, t)
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_torsional_stress(db, T_stress_diag)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain, hollow_rectangular_section=True)}
{js.implement_update_total_stressJS(discr_stress_strain, T_opt=True, hollow_rectangular_section=True)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
{beam_section.implement_compute_tau_torsionJS()}
{beam_section.implement_update_torsional_stressJS(discr_stress_strain)}
"""
update_b = CustomJS(args=args_slider_b, code=code_change_b)
args_slider_h = dict(source=source,
s_b=source_beam,
s_ss=source_section_scheme,
div=div_geo,
section=section,
support_r=support_r,
centroid=centroid,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
T_stress_diag=T_stress_diag,
div_T=div_cb_T,
EE1=EasterEgg1)
code_change_h = f"""
// retrieve data used
const db = source.data
const data_ss = s_ss.data
const b = db['b'][0]
const t = db['t'][0]
const h = cb_obj.value // value of the slider
const A = compute_area(b, h, t)
const Iy = compute_inertia_y(b, h, t)
const N = db['N'][0]
const M = db['M'][0]
const yG = compute_centroid_y(h)
// Easter egg
/*const str_Doge = " much wow"
const str_tmp = div_T.text
if (h == {MAX_H}) {{
div_T.text = str_tmp+str_Doge
}} else {{
div_T.text = str_tmp.replace(str_Doge, '')
}}*/
if (h == {MAX_H}) {{
EE1.glyph.text = "much wow"
}} else {{
EE1.glyph.text = ""
}}
// apply the changes
db['h'][0] = h
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h, t)
db['yG'][0] = yG
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
data_ss['y'][1] = h // change the height of the section in the diagrams
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_torsional_stress(db, T_stress_diag)
// emit the changes
source.change.emit()
s_ss.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain, hollow_rectangular_section=True)}
{js.implement_update_total_stressJS(discr_stress_strain, T_opt=True, hollow_rectangular_section=True)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{beam_section.implement_compute_tau_torsionJS()}
{beam_section.implement_update_torsional_stressJS(discr_stress_strain)}
"""
update_h = CustomJS(args=args_slider_h, code=code_change_h)
args_checkbox_P = dict(source=source,
s_M=source_M,
div_P=div_cb_P,
div_f=div_forces,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
N_diag=N_diag,
neutral_axis=neutral_axis,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_checkbox_P = f"""
// retrieve var from the object that uses callback
var f = cb_obj.active // checkbox P
if (f.length==0) f = [1]
const db = source.data
// apply the changes
db['P'][0] = {P}*(1-f)
db['N'][0] = compute_N(db['P'][0])
db['Rx'][0] = compute_Rx(db['P'][0])
// update
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_N_diagram(db, N_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// emit the changes
source.change.emit()
// declare functions
{sb.implement_update_external_forcesJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_compute_RxJS()}
{js.implement_update_arrowJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_compute_NJS()}
{sb.implement_update_N_diagramJS(discr_NVM)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_total_stressJS(discr_stress_strain, T_opt=True, hollow_rectangular_section=True)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
{beam_section.implement_compute_tau_torsionJS()}
"""
update_checkbox_P = CustomJS(args=args_checkbox_P, code=code_checkbox_P)
args_radiogroup_FBD = dict(source=source,
s_sb=source_scheme_beam,
s_q=source_scheme_q,
s_M=source_M,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
tau_stress_diag=tau_stress_diag)
code_radiogroup_FBD = f"""
// retrieve data
const db = source.data
const FBD = cb_obj.active
const data_sb = s_sb.data
const data_q = s_q.data
const pos = db['x'][0]
// apply the changes
db['FBD'][0] = FBD
// update
check_state(db)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_scheme_position(db, data_sb, data_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
// emit the changes
source.change.emit()
s_sb.change.emit()
s_q.change.emit()
{models.implement_check_stateJS()}
{sb.implement_update_internal_forcesJS()}
{sb.implement_update_scheme_positionJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_arrowJS()}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
"""
update_radiogroup_FBD = CustomJS(args=args_radiogroup_FBD, code=code_radiogroup_FBD)
args_slider_q = dict(source=source,
s_q=source_scheme_q,
s_M=source_M,
div_f=div_forces,
div_P=div_cb_P,
fP=scheme_axial_force,
fRx=scheme_Rx_l,
fRyl=scheme_Ry_l,
fRyr=scheme_Ry_r,
fN=scheme_N,
fV=scheme_V,
arr_head=scheme_M_head,
V_diag=V_diag,
M_diag=M_diag,
centroid=centroid,
neutral_axis=neutral_axis,
V_stress_diag=V_stress_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
section_N=section_N,
section_V=section_V,
section_M_head=section_M_head,
s_section_M=source_section_M,
label_N_section=label_N_section,
label_V_section=label_V_section,
label_M_section=label_M_section)
code_slider_q = f"""
// retrieve data
const db = source.data
const q = cb_obj.value
const pos = db['x'][0]
const L = db['L'][0]
// update q
db['q'][0] = q
db['V'][0] = compute_V(pos, q, L)
db['M'][0] = compute_M(pos, q, L)
db['Ry_l'][0] = compute_Ry_l(q, L)
db['Ry_r'][0] = compute_Ry_r(q, L)
// update
update_u_load(db, s_q)
update_reactions(db, fRx, fRyl, fRyr)
update_external_forces(db, fP, div_P)
update_V_diagram(db, V_diag)
update_M_diagram(db, M_diag)
update_internal_forces(db, fN, fV, arr_head, s_M)
update_div_forces(db, div_f)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)
// apply changes
source.change.emit()
// declare functions
{js.implement_update_arrowJS()}
{js.implement_linspaceJS()}
{js.implement_parabolaJS()}
{js.implement_arrow_alphaJS()}
{js.implement_update_arrowJS()}
{sb.implement_compute_VJS()}
{sb.implement_compute_MJS()}
{sb.implement_compute_Ry_lJS()}
{sb.implement_compute_Ry_rJS()}
{js.implement_update_NVM_diagramJS()}
{sb.implement_update_V_diagramJS(discr_NVM)}
{sb.implement_update_M_diagramJS(discr_NVM)}
{sb.implement_update_reactionsJS()}
{sb.implement_update_external_forcesJS()}
{sb.implement_update_u_loadJS(OFFSET_Q)}
{sb.implement_update_internal_forcesJS()}
{js.implement_update_curvedArrowJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain, hollow_rectangular_section=True)}
{js.implement_update_total_stressJS(discr_stress_strain, T_opt=True, hollow_rectangular_section=True)}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_neutral_axisJS()}
{beam_section.implement_compute_centroid_yJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{sb.implement_update_div_forcesJS()}
{js.implement_update_NVM_sectionJS()}
{js.implement_arrow_growthJS()}
{beam_section.implement_compute_tau_torsionJS()}
"""
update_slider_q = CustomJS(args=args_slider_q, code=code_slider_q)
args_checkbox_T = dict(source=source,
T_diag=T_diag,
div_T=div_cb_T,
label_T_section=label_T_section,
section_T_line=section_T_line,
section_T_head=section_T_head,
section_T_source=section_T_source,
section_torsion_head=section_torsion_head,
section_torsion_source=section_torsion_source,
neutral_axis=neutral_axis,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
T_stress_diag=T_stress_diag)
code_checkbox_T = f"""
// retrieve var from the object that uses callback
var f = cb_obj.active // checkbox Mt
if (f.length==0) f = [1]
const db = source.data
const L = db['L'][0]
const x = db['x'][0]
// apply the changes
db['Mt'][0] = {Mt}*(1-f)
db['T'][0] = compute_T(x, db['Mt'][0], L)
// update
update_torsional_stress(db, T_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
update_T_diagram(db, T_diag)
update_T_section(db, section_torsion_head, section_torsion_source, section_T_line, section_T_head, section_T_source, div_T, label_T_section)
// emit the changes
source.change.emit()
// declare functions
{js.implement_update_curvedArrowJS()}
{js.implement_update_doubleArrowJS()}
{js.implement_arrow_growthJS()}
{sb.implement_update_T_sectionJS(scale_T=SCALE_T)}
{sb.implement_compute_TJS()}
{sb.implement_update_T_diagramJS(discr_NVM)}
{js.implement_linspaceJS()}
{js.implement_update_NVM_diagramJS()}
{beam_section.implement_compute_tau_torsionJS()}
{js.implement_update_total_stressJS(discr_stress_strain, T_opt=True, hollow_rectangular_section=True)}
{stst.implement_compute_neutral_axisJS()}
{stst.implement_compute_sigma_axialJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{js.implement_update_stress_diagramJS()}
{beam_section.implement_update_torsional_stressJS(discr_stress_strain)}
"""
update_checkbox_T = CustomJS(args=args_checkbox_T, code=code_checkbox_T)
args_slider_t = dict(source=source,
div=div_geo,
section=section,
N_stress_diag=N_stress_diag,
axial_strain_diag=axial_strain_diag,
M_stress_diag=M_stress_diag,
bending_strain_diag=bending_strain_diag,
centroid=centroid,
V_stress_diag=V_stress_diag,
sigma_stress_diag=sigma_stress_diag,
tau_stress_diag=tau_stress_diag,
neutral_axis=neutral_axis,
T_stress_diag=T_stress_diag)
code_change_t = f"""
// retrieve data used
const db = source.data
const t = cb_obj.value // value of the slider
const b = db['b'][0]
const h = db['h'][0]
const A = compute_area(b, h, t)
const Iy = compute_inertia_y(b, h, t)
const yG = db['yG'][0]
const N = db['N'][0]
const M = db['M'][0]
// apply the changes
db['t'][0] = t
db['A'][0] = A
db['Iy'][0] = Iy
db['Iz'][0] = compute_inertia_z(b, h, t)
db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)
// update
update_div_geo(db, div)
update_section(db, section)
update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)
update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)
update_shear_stress(db, V_stress_diag)
update_torsional_stress(db, T_stress_diag)
update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)
// emit the changes
source.change.emit()
{beam_section.implement_update_div_geoJS()}
{beam_section.implement_update_sectionJS()}
{beam_section.implement_compute_areaJS()}
{beam_section.implement_compute_inertia_yJS()}
{beam_section.implement_compute_inertia_zJS()}
{stst.implement_compute_neutral_axisJS()}
{js.implement_update_axial_stress_strainJS(discr_stress_strain)}
{js.implement_update_bending_stress_strainJS(discr_stress_strain)}
{js.implement_update_shear_stressJS(discr_stress_strain, hollow_rectangular_section=True)}
{js.implement_update_total_stressJS(discr_stress_strain, T_opt=True, hollow_rectangular_section=True)}
{js.implement_linspaceJS()}
{stst.implement_compute_epsilon_axialJS()}
{stst.implement_compute_epsilon_bendingJS()}
{stst.implement_compute_sigma_axialJS()}
{js.implement_update_stress_diagramJS()}
{js.implement_update_strain_diagramJS()}
{stst.implement_compute_sigma_bendingJS()}
{stst.implement_compute_total_sigmaJS()}
{stst.implement_compute_total_tauJS()}
{beam_section.implement_compute_first_moment_of_areaJS()}
{beam_section.implement_compute_first_moment_of_area_implicitJS()}
{stst.implement_compute_tau_shearJS()}
{beam_section.implement_compute_tau_torsionJS()}
{beam_section.implement_update_torsional_stressJS(discr_stress_strain)}
"""
update_t = CustomJS(args=args_slider_t, code=code_change_t)
# apply the logics
slider_b.js_on_change('value', update_b)
slider_h.js_on_change('value', update_h)
slider_position.js_on_change('value', updade_slider_pos)
checkbox_P.js_on_click(update_checkbox_P)
radiogroup_FBD.js_on_click(update_radiogroup_FBD)
slider_q.js_on_change('value', update_slider_q)
slider_t.js_on_change('value', update_t)
checkbox_T.js_on_click(update_checkbox_T)
########################################################
# Build the layout
########################################################
padding_layout = 10
layout1 = layout([
[column(row(column(fig_scheme,
row(fig_section, Spacer(width=padding_layout), column(Spacer(height=padding_layout*3),
slider_b,
slider_h,
slider_t,
# row(div_geo, div_forces),
slider_position,
slider_q,
Spacer(height=padding_layout*3),
div_rg_FBD,
radiogroup_FBD,
div_cb_P,
checkbox_P,
Spacer(height=padding_layout*3),
div_cb_T,
checkbox_T))),
column(fig_beam,
Spacer(height=padding_layout),
fig_N,
fig_V,
fig_M,
fig_T)),
row(column(
row(fig_NM_section, fig_axial_strain, fig_stress_N, fig_bending_strain, fig_stress_M, fig_stress_sigma),
row(fig_V_section, Spacer(width=FIG_B_ss), fig_stress_V, Spacer(width=FIG_B_ss), fig_stress_T, fig_stress_tau),
))
),
],
])
show(layout1)
\ No newline at end of file
diff --git a/Simple Beam DEMOs/sb_geo.ipynb b/Simple Beam DEMOs/01-sb_geo.ipynb
similarity index 97%
rename from Simple Beam DEMOs/sb_geo.ipynb
rename to Simple Beam DEMOs/01-sb_geo.ipynb
index 0af35d2..e14468c 100644
--- a/Simple Beam DEMOs/sb_geo.ipynb
+++ b/Simple Beam DEMOs/01-sb_geo.ipynb
@@ -1,541 +1,548 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# **Simple beam - Geometry**\n",
"\n",
"## **Description**\n",
"In this first notebook, the geometry and some mechanical parameters of a simple beam with constant rectangular section are explored. The main idea of this DEMO and the following ones is to actively learn the Structural Mechanics by thinking and playing with an interactive visualisation tool. Considering the complexity of the code to generate this tool (that uses Python for the initialisation and Javascript for the dynamic interactiy), the code is hidden but can be easily accessed in the folder \"HiddenCode\" for the most curious ones."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Goals**\n",
"\n",
- "* Introduce the structure and the main concepts of this set of DEMOs, that will be incrementally enriched step-by-step with more information, theories, diagrams, etc with each notebook\n",
- "* Gain familiarity with the subject of our following analysis (form, section, static scheme)"
+ "* Identify the structure and the main concepts of this set of DEMOs, that will be incrementally enriched step-by-step with more information, theories, diagrams, etc with each notebook\n",
+ "* Gain familiarity with the subject (form, section, static scheme) of our analysis in the next DEMOs"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"## **Tasks and exercises**\n",
"\n",
"Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
"\n",
"1. Which static system is studied?\n",
"\n",
" <details>\n",
" <summary style=\"color: red\">Solution:</summary>\n",
" The beam is supported by a roller (right) and pinned (left), thus the static system is simply supported.\n",
" </details>\n",
"\n",
"<br>\n",
"\n",
"2. If our objective is to increase the area to 30'000 mm², which geometric parameters (height, width, length) can we change to achieve the desired configuration? The configuration found is the only one? \n",
"\n",
" <details>\n",
" <summary style=\"color: red\">Solution:</summary>\n",
" By using the slider for the length (L), it is possible to note that the length has no impact in any mechanical parameter, because the cross-section is constant along the beam, thus the getmetric paraemter has no impact in the area. On the other hand, by changing the value of b and h with the correlated slider, we note the direct correlation with the area, thus by manipulating just the width, the configuration b=150 mm and h=200 mm has an area of 30'000 mm².\n",
" \n",
" No, it is not the only configuration possible because there the width and the height of the section have the same influence in the area and without any other condition, there is an infinite number of combination to achieve the desired configuration. For example by swapping the value of b and h, we can have the same area.\n",
" </details>\n",
" \n",
"<br>\n",
"\n",
"3. If our objective is to have the inertia with respect to the strong axis (y) equals to 9.0x10⁸ mm⁴ by keeping the area equals to 30'000 mm², which combination of parameters achieves the desired configuration? The configuration found is the only one? \n",
"\n",
" <details>\n",
" <summary style=\"color: red\">Solution:</summary>\n",
" By playing with the sliders of height and width, the combinationation found b=50 mm and h=600 mm.\n",
" \n",
" Yes, because only this combination satisfy both the area and inertia conditions. In this case, swapping the value of b and h has a major impact on the inertia y, thus this combination is not possible.\n",
" </details>\n",
"\n",
"<br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Build the interactive visualisation tool**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div class=\"bk-root\">\n",
" <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
" <span id=\"1002\">Loading BokehJS ...</span>\n",
" </div>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
"(function(root) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
"\n",
" const force = true;\n",
"\n",
" if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
" root._bokeh_onload_callbacks = [];\n",
" root._bokeh_is_loading = undefined;\n",
" }\n",
"\n",
" const JS_MIME_TYPE = 'application/javascript';\n",
" const HTML_MIME_TYPE = 'text/html';\n",
" const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
" const CLASS_NAME = 'output_bokeh rendered_html';\n",
"\n",
" /**\n",
" * Render data to the DOM node\n",
" */\n",
" function render(props, node) {\n",
" const script = document.createElement(\"script\");\n",
" node.appendChild(script);\n",
" }\n",
"\n",
" /**\n",
" * Handle when an output is cleared or removed\n",
" */\n",
" function handleClearOutput(event, handle) {\n",
" const cell = handle.cell;\n",
"\n",
" const id = cell.output_area._bokeh_element_id;\n",
" const server_id = cell.output_area._bokeh_server_id;\n",
" // Clean up Bokeh references\n",
" if (id != null && id in Bokeh.index) {\n",
" Bokeh.index[id].model.document.clear();\n",
" delete Bokeh.index[id];\n",
" }\n",
"\n",
" if (server_id !== undefined) {\n",
" // Clean up Bokeh references\n",
" const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
" cell.notebook.kernel.execute(cmd_clean, {\n",
" iopub: {\n",
" output: function(msg) {\n",
" const id = msg.content.text.trim();\n",
" if (id in Bokeh.index) {\n",
" Bokeh.index[id].model.document.clear();\n",
" delete Bokeh.index[id];\n",
" }\n",
" }\n",
" }\n",
" });\n",
" // Destroy server and session\n",
" const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
" cell.notebook.kernel.execute(cmd_destroy);\n",
" }\n",
" }\n",
"\n",
" /**\n",
" * Handle when a new output is added\n",
" */\n",
" function handleAddOutput(event, handle) {\n",
" const output_area = handle.output_area;\n",
" const output = handle.output;\n",
"\n",
" // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
" if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
" return\n",
" }\n",
"\n",
" const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
"\n",
" if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
" toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
" // store reference to embed id on output_area\n",
" output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
" }\n",
" if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
" const bk_div = document.createElement(\"div\");\n",
" bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
" const script_attrs = bk_div.children[0].attributes;\n",
" for (let i = 0; i < script_attrs.length; i++) {\n",
" toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
" toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
" }\n",
" // store reference to server id on output_area\n",
" output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
" }\n",
" }\n",
"\n",
" function register_renderer(events, OutputArea) {\n",
"\n",
" function append_mime(data, metadata, element) {\n",
" // create a DOM node to render to\n",
" const toinsert = this.create_output_subarea(\n",
" metadata,\n",
" CLASS_NAME,\n",
" EXEC_MIME_TYPE\n",
" );\n",
" this.keyboard_manager.register_events(toinsert);\n",
" // Render to node\n",
" const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
" render(props, toinsert[toinsert.length - 1]);\n",
" element.append(toinsert);\n",
" return toinsert\n",
" }\n",
"\n",
" /* Handle when an output is cleared or removed */\n",
" events.on('clear_output.CodeCell', handleClearOutput);\n",
" events.on('delete.Cell', handleClearOutput);\n",
"\n",
" /* Handle when a new output is added */\n",
" events.on('output_added.OutputArea', handleAddOutput);\n",
"\n",
" /**\n",
" * Register the mime type and append_mime function with output_area\n",
" */\n",
" OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
" /* Is output safe? */\n",
" safe: true,\n",
" /* Index of renderer in `output_area.display_order` */\n",
" index: 0\n",
" });\n",
" }\n",
"\n",
" // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
" if (root.Jupyter !== undefined) {\n",
" const events = require('base/js/events');\n",
" const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
"\n",
" if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
" register_renderer(events, OutputArea);\n",
" }\n",
" }\n",
"\n",
" \n",
" if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
" root._bokeh_timeout = Date.now() + 5000;\n",
" root._bokeh_failed_load = false;\n",
" }\n",
"\n",
" const NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
"\n",
" function display_loaded() {\n",
" const el = document.getElementById(\"1002\");\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS is loading...\";\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
" }\n",
" } else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }\n",
"\n",
"\n",
" function run_callbacks() {\n",
" try {\n",
" root._bokeh_onload_callbacks.forEach(function(callback) {\n",
" if (callback != null)\n",
" callback();\n",
" });\n",
" } finally {\n",
" delete root._bokeh_onload_callbacks\n",
" }\n",
" console.debug(\"Bokeh: all callbacks have finished\");\n",
" }\n",
"\n",
" function load_libs(css_urls, js_urls, callback) {\n",
" if (css_urls == null) css_urls = [];\n",
" if (js_urls == null) js_urls = [];\n",
"\n",
" root._bokeh_onload_callbacks.push(callback);\n",
" if (root._bokeh_is_loading > 0) {\n",
" console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
"\n",
" function on_load() {\n",
" root._bokeh_is_loading--;\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
" run_callbacks()\n",
" }\n",
" }\n",
"\n",
" function on_error(url) {\n",
" console.error(\"failed to load \" + url);\n",
" }\n",
"\n",
" for (let i = 0; i < css_urls.length; i++) {\n",
" const url = css_urls[i];\n",
" const element = document.createElement(\"link\");\n",
" element.onload = on_load;\n",
" element.onerror = on_error.bind(null, url);\n",
" element.rel = \"stylesheet\";\n",
" element.type = \"text/css\";\n",
" element.href = url;\n",
" console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" for (let i = 0; i < js_urls.length; i++) {\n",
" const url = js_urls[i];\n",
" const element = document.createElement('script');\n",
" element.onload = on_load;\n",
" element.onerror = on_error.bind(null, url);\n",
" element.async = false;\n",
" element.src = url;\n",
" console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.head.appendChild(element);\n",
" }\n",
" };\n",
"\n",
" function inject_raw_css(css) {\n",
" const element = document.createElement(\"style\");\n",
" element.appendChild(document.createTextNode(css));\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" \n",
" const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
" const css_urls = [];\n",
" \n",
"\n",
" const inline_js = [\n",
" function(Bokeh) {\n",
" Bokeh.set_log_level(\"info\");\n",
" },\n",
" function(Bokeh) {\n",
" \n",
" \n",
" }\n",
" ];\n",
"\n",
" function run_inline_js() {\n",
" \n",
" if (root.Bokeh !== undefined || force === true) {\n",
" \n",
" for (let i = 0; i < inline_js.length; i++) {\n",
" inline_js[i].call(root, root.Bokeh);\n",
" }\n",
" if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!root._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" root._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
"\n",
" }\n",
"\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(css_urls, js_urls, function() {\n",
" console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
"}(window));"
],
"application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Import the packages needed\n",
"import sys\n",
"sys.path.append('../HiddenCode')\n",
"import hidden_code_nb_geo\n",
"import math\n",
"import numpy as np \n",
"from cienpy import simplebeam as sb\n",
"from cienpy import rectangular_section as beam_section"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define the geometry and compute the initial configuration:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Choose the dimensions\n",
"L = 6 # [m]\n",
"h = 200 # [mm]\n",
"b = 100 # [mm]\n",
"\n",
"# compute the parameters\n",
"A = beam_section.compute_area(b, h) # [mm2]\n",
"Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
"Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Run the complex code to generate the **interactive visualisation tool**:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" <div class=\"bk-root\" id=\"f61d0e24-9628-47a2-9b21-fb274f4324bf\" data-root-id=\"1144\"></div>\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" const docs_json = {\"92c2f2f8-9928-41ef-8c17-faf92aab2e85\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1142\"},{\"id\":\"1143\"}]},\"id\":\"1144\",\"type\":\"Column\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1082\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1170\"},\"selection_policy\":{\"id\":\"1169\"}},\"id\":\"1153\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"1038\"},{\"id\":\"1138\"},{\"id\":\"1141\"}]},\"id\":\"1143\",\"type\":\"Row\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1151\"},\"group\":null,\"major_label_policy\":{\"id\":\"1152\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"DataRange1d\"},{\"attributes\":{\"start\":-1},\"id\":\"1010\",\"type\":\"Range1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1081\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1083\"},\"nonselection_glyph\":{\"id\":\"1082\"},\"view\":{\"id\":\"1085\"}},\"id\":\"1084\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1012\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1016\"}],\"center\":[{\"id\":\"1019\"},{\"id\":\"1023\"},{\"id\":\"1109\"}],\"height\":200,\"left\":[{\"id\":\"1020\"}],\"renderers\":[{\"id\":\"1084\"},{\"id\":\"1090\"},{\"id\":\"1096\"},{\"id\":\"1115\"}],\"title\":{\"id\":\"1006\"},\"toolbar\":{\"id\":\"1031\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1012\"},\"y_range\":{\"id\":\"1010\"},\"y_scale\":{\"id\":\"1014\"}},\"id\":\"1005\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"1020\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1023\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1161\"},\"selection_policy\":{\"id\":\"1160\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1156\"},\"group\":null,\"major_label_policy\":{\"id\":\"1157\"},\"ticker\":{\"id\":\"1077\"}},\"id\":\"1049\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"A\":[20000],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"b\":[100],\"h\":[200],\"x\":[6],\"y\":[0]},\"selected\":{\"id\":\"1185\"},\"selection_policy\":{\"id\":\"1184\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1049\"}],\"center\":[{\"id\":\"1052\"},{\"id\":\"1056\"},{\"id\":\"1118\"},{\"id\":\"1127\"}],\"height\":540,\"left\":[{\"id\":\"1053\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1075\"},{\"id\":\"1102\"},{\"id\":\"1124\"},{\"id\":\"1133\"}],\"title\":{\"id\":\"1039\"},\"toolbar\":{\"id\":\"1064\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1041\"},\"x_scale\":{\"id\":\"1045\"},\"y_range\":{\"id\":\"1043\"},\"y_scale\":{\"id\":\"1047\"}},\"id\":\"1038\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1169\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1170\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1081\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1171\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1172\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1029\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1154\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1006\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1008\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1155\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1148\"},\"group\":null,\"major_label_policy\":{\"id\":\"1149\"},\"ticker\":{\"id\":\"1021\"},\"visible\":false},\"id\":\"1020\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1156\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1041\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1157\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1030\"}},\"id\":\"1026\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1030\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1058\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1173\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1181\"},\"selection_policy\":{\"id\":\"1180\"}},\"id\":\"1158\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1174\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1183\"},\"selection_policy\":{\"id\":\"1182\"}},\"id\":\"1159\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1172\"},\"selection_policy\":{\"id\":\"1171\"}},\"id\":\"1071\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1057\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1149\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":600},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1072\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"1053\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1056\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1175\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1024\"},{\"id\":\"1025\"},{\"id\":\"1026\"},{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"}]},\"id\":\"1031\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1176\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1160\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1092\"}},\"id\":\"1097\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1161\",\"type\":\"Selection\"},{\"attributes\":{\"interval\":50},\"id\":\"1077\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1063\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1177\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1071\"},\"glyph\":{\"id\":\"1072\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1074\"},\"nonselection_glyph\":{\"id\":\"1073\"},\"view\":{\"id\":\"1076\"}},\"id\":\"1075\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":600},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1074\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":600},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1073\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1178\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1071\"}},\"id\":\"1076\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1083\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1088\",\"type\":\"Patch\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1112\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1162\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1039\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"1111\"}},\"id\":\"1116\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1085\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1099\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1163\",\"type\":\"Selection\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1086\"},\"glyph\":{\"id\":\"1087\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1089\"},\"nonselection_glyph\":{\"id\":\"1088\"},\"view\":{\"id\":\"1091\"}},\"id\":\"1090\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1087\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.25980762113533157,-0.25980762113533157]},\"selected\":{\"id\":\"1163\"},\"selection_policy\":{\"id\":\"1162\"}},\"id\":\"1086\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.15]},\"selected\":{\"id\":\"1165\"},\"selection_policy\":{\"id\":\"1164\"}},\"id\":\"1092\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1093\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1089\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1174\"},\"selection_policy\":{\"id\":\"1173\"}},\"id\":\"1098\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1086\"}},\"id\":\"1091\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1094\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1095\",\"type\":\"Circle\"},{\"attributes\":{\"tools\":[{\"id\":\"1057\"},{\"id\":\"1058\"},{\"id\":\"1059\"},{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"}]},\"id\":\"1064\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1092\"},\"glyph\":{\"id\":\"1093\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1095\"},\"nonselection_glyph\":{\"id\":\"1094\"},\"view\":{\"id\":\"1097\"}},\"id\":\"1096\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1100\",\"type\":\"Rect\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1136\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1105\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1098\"},\"glyph\":{\"id\":\"1099\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1101\"},\"nonselection_glyph\":{\"id\":\"1100\"},\"view\":{\"id\":\"1103\"}},\"id\":\"1102\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1108\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1164\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"height\":300,\"text\":\"<p style='font-size:16px'><b>Geometrical and mechanical parameters</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":300},\"id\":\"1104\",\"type\":\"Div\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1101\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1098\"}},\"id\":\"1103\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1165\",\"type\":\"Selection\"},{\"attributes\":{\"end\":7,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1135\"}]},\"start\":1,\"step\":0.1,\"title\":\"Change the length L [m]\",\"value\":6},\"id\":\"1107\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1108\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1153\"},\"start\":null,\"x_end\":{\"value\":6.8},\"x_start\":{\"value\":6},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1109\",\"type\":\"Arrow\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1137\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1106\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1180\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"text\":[\"y axis\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"1176\"},\"selection_policy\":{\"id\":\"1175\"}},\"id\":\"1120\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1129\"}},\"id\":\"1134\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1120\"},\"glyph\":{\"id\":\"1121\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1123\"},\"nonselection_glyph\":{\"id\":\"1122\"},\"view\":{\"id\":\"1125\"}},\"id\":\"1124\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1181\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1111\"},\"glyph\":{\"id\":\"1112\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1114\"},\"nonselection_glyph\":{\"id\":\"1113\"},\"view\":{\"id\":\"1116\"}},\"id\":\"1115\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1120\"}},\"id\":\"1125\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"x axis\"],\"x\":[6.4],\"y\":[0.1]},\"selected\":{\"id\":\"1167\"},\"selection_policy\":{\"id\":\"1166\"}},\"id\":\"1111\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1122\",\"type\":\"Text\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1121\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1182\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1117\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1158\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1118\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1126\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1126\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1159\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1127\",\"type\":\"Arrow\"},{\"attributes\":{\"overlay\":{\"id\":\"1063\"}},\"id\":\"1059\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1183\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1130\",\"type\":\"Text\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1132\",\"type\":\"Text\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1131\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1166\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1005\"}]},\"id\":\"1142\",\"type\":\"Row\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1154\"},\"group\":null,\"major_label_policy\":{\"id\":\"1155\"},\"ticker\":{\"id\":\"1077\"}},\"id\":\"1053\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1113\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"z axis\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"1178\"},\"selection_policy\":{\"id\":\"1177\"}},\"id\":\"1129\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1062\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1184\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1129\"},\"glyph\":{\"id\":\"1130\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1132\"},\"nonselection_glyph\":{\"id\":\"1131\"},\"view\":{\"id\":\"1134\"}},\"id\":\"1133\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1167\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1104\"},\"s_b\":{\"id\":\"1003\"},\"s_s\":{\"id\":\"1004\"},\"section\":{\"id\":\"1102\"},\"support_r\":{\"id\":\"1096\"},\"x_axis_arrow\":{\"id\":\"1109\"},\"x_axis_label\":{\"id\":\"1115\"}},\"code\":\"\\n // retrieve data used\\n const data_b = s_b.data\\n const data_s = s_s.data\\n // retrieve the var from the object that uses callback\\n const f = cb_obj.value // value of the slider\\n // compute the parameters and dimensions\\n const L = Math.round(f*10)/10\\n const b = Math.round(data_s['b'])\\n const h = Math.round(data_s['h'])\\n const A = b*h\\n const Iy = Math.round(Math.pow(h, 3)*b/12)\\n const Iz = Math.round(Math.pow(b, 3)*h/12)\\n div.text = \\\"<p style='font-size:16px'><b>Geometrical and mechanical parameters:</b></p> h = \\\"+h+\\n \\\" mm<br> b = \\\"+b+\\n \\\" mm<br> L = \\\"+L+\\n \\\" m<br> A = \\\"+A.toExponential()+\\n \\\" mm<sup>2</sup><br> Iy = \\\"+Iy.toExponential()+\\n \\\" mm<sup>4</sup><br> Iz = \\\"+Iz.toExponential()+\\n \\\" mm<sup>4</sup>\\\"\\n // change the plot of the section\\n section.glyph.width = b\\n section.glyph.height = h\\n // change the plot of the beam\\n data_b['x'][1] = L\\n support_r.glyph.x = L\\n \\n // change the position of the x axis arrow and text\\n x_axis_arrow.x_start = L\\n x_axis_arrow.x_end = L+0.8\\n x_axis_label.glyph.x = L+0.8/2\\n \\n // apply the changes\\n data_s['L'] = f\\n data_s['A'] = A\\n data_s['Iy'] = Iy\\n data_s['Iz'] = Iz\\n s_s.change.emit()\\n s_b.change.emit()\\n \"},\"id\":\"1135\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1185\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1104\"},\"s_b\":{\"id\":\"1003\"},\"s_s\":{\"id\":\"1004\"},\"section\":{\"id\":\"1102\"},\"support_r\":{\"id\":\"1096\"}},\"code\":\"\\n // retrieve data used\\n const data_b = s_b.data\\n const data_s = s_s.data\\n // retrieve the var from the object that uses callback\\n const f = cb_obj.value // value of the slider\\n // compute the parameters and dimensions\\n const L = Math.round(data_s['L']*10)/10\\n const b = Math.round(f)\\n const h = Math.round(data_s['h'])\\n const A = b*h\\n const Iy = Math.round(Math.pow(h, 3)*b/12)\\n const Iz = Math.round(Math.pow(b, 3)*h/12)\\n div.text = \\\"<p style='font-size:16px'><b>Geometrical and mechanical parameters:</b></p> h = \\\"+h+\\n \\\" mm<br> b = \\\"+b+\\n \\\" mm<br> L = \\\"+L+\\n \\\" m<br> A = \\\"+A.toExponential()+\\n \\\" mm<sup>2</sup><br> Iy = \\\"+Iy.toExponential()+\\n \\\" mm<sup>4</sup><br> Iz = \\\"+Iz.toExponential()+\\n \\\" mm<sup>4</sup>\\\"\\n // change the plot of the section\\n section.glyph.width = b\\n section.glyph.height = h\\n // change the plot of the beam\\n data_b['x'][1] = L\\n support_r.glyph.x = L\\n \\n // apply the changes\\n data_s['b'] = f\\n data_s['A'] = A\\n data_s['Iy'] = Iy\\n data_s['Iz'] = Iz\\n s_s.change.emit()\\n s_b.change.emit()\\n \"},\"id\":\"1136\",\"type\":\"CustomJS\"},{\"attributes\":{\"axis\":{\"id\":\"1049\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1052\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1117\",\"type\":\"VeeHead\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1104\"},\"s_b\":{\"id\":\"1003\"},\"s_s\":{\"id\":\"1004\"},\"section\":{\"id\":\"1102\"},\"support_r\":{\"id\":\"1096\"}},\"code\":\"\\n // retrieve data used\\n const data_b = s_b.data\\n const data_s = s_s.data\\n // retrieve the var from the object that uses callback\\n const f = cb_obj.value // value of the slider\\n // compute the parameters and dimensions\\n const L = Math.round(data_s['L']*10)/10\\n const b = Math.round(data_s['b'])\\n const h = Math.round(f)\\n const A = b*h\\n const Iy = Math.round(Math.pow(h, 3)*b/12)\\n const Iz = Math.round(Math.pow(b, 3)*h/12)\\n div.text = \\\"<p style='font-size:16px'><b>Geometrical and mechanical parameters:</b></p> h = \\\"+h+\\n \\\" mm<br> b = \\\"+b+\\n \\\" mm<br> L = \\\"+L+\\n \\\" m<br> A = \\\"+A.toExponential()+\\n \\\" mm<sup>2</sup><br> Iy = \\\"+Iy.toExponential()+\\n \\\" mm<sup>4</sup><br> Iz = \\\"+Iz.toExponential()+\\n \\\" mm<sup>4</sup>\\\"\\n // change the plot of the section\\n section.glyph.width = b\\n section.glyph.height = h\\n // change the plot of the beam\\n data_b['x'][1] = L\\n support_r.glyph.x = L\\n \\n // apply the changes\\n data_s['h'] = f\\n data_s['A'] = A\\n data_s['Iy'] = Iy\\n data_s['Iz'] = Iz\\n s_s.change.emit()\\n s_b.change.emit()\\n \"},\"id\":\"1137\",\"type\":\"CustomJS\"},{\"attributes\":{\"width\":20},\"id\":\"1138\",\"type\":\"Spacer\"},{\"attributes\":{\"height\":50},\"id\":\"1139\",\"type\":\"Spacer\"},{\"attributes\":{\"height\":50},\"id\":\"1140\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"1139\"},{\"id\":\"1107\"},{\"id\":\"1105\"},{\"id\":\"1106\"},{\"id\":\"1140\"},{\"id\":\"1104\"}]},\"id\":\"1141\",\"type\":\"Column\"}],\"root_ids\":[\"1144\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
" const render_items = [{\"docid\":\"92c2f2f8-9928-41ef-8c17-faf92aab2e85\",\"root_ids\":[\"1144\"],\"roots\":{\"1144\":\"f61d0e24-9628-47a2-9b21-fb274f4324bf\"}}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" let attempts = 0;\n",
" const timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" clearInterval(timer);\n",
" embed_document(root);\n",
" } else {\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" clearInterval(timer);\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
" }\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "1144"
}
},
"output_type": "display_data"
}
],
"source": [
"hidden_code_nb_geo.main_code(L, h, b, A, Iy, Iz)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Legend**\n",
"\n",
"Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder. \n",
"\n",
"* **Slider of the length L:** move the slider to change the length L of the beam.\n",
"* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
"* **Slider of the height h:** move the slider to change the height h of the cross-section of the beam.\n",
"* **Textbox \"Geometrical and mechanical parameters:** small summary with the value of h, b, L, A (area), Iy (inertia with respect to the strong axis) and Iz (inertia with respect to the weak axis).\n",
"* **Figure \"Simple supported beam\":** in this figure, the static scheme, the length and x axis are presented. This figure serves to have a dynamic representation of the studied case.\n",
"* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
"\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
"### Recommendations\n",
"\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
"Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
]
}
],
"metadata": {
"interpreter": {
"hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
},
"kernelspec": {
"display_name": "cienpy venv",
"language": "python",
"name": "cienpy_venv"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
diff --git a/Simple Beam DEMOs/sb_actions.ipynb b/Simple Beam DEMOs/02-sb_actions.ipynb
similarity index 98%
rename from Simple Beam DEMOs/sb_actions.ipynb
rename to Simple Beam DEMOs/02-sb_actions.ipynb
index 7096771..d45e343 100644
--- a/Simple Beam DEMOs/sb_actions.ipynb
+++ b/Simple Beam DEMOs/02-sb_actions.ipynb
@@ -1,562 +1,569 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# **Simple beam - Actions**\n",
- "In this second notebook, different actions are applied on the simple supported beam presented in the previous DEMO called \"sb_geo\". The internal forces and moments can be visuallized along the beam. "
+ "In this second notebook, different actions are applied on the simple supported beam presented in the previous DEMO called \"01-sb_geo\". The internal forces and moments can be visuallized along the beam. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Goals**\n",
"\n",
- "* Learn the effect of different actions inside an element\n",
- "* Note how some parameters impact the internal forces\n",
- "* Improve the understanding of how the free-body diagram is used and the (frequently) unclear sign convention"
+ "* Describe the effect of different actions inside an element\n",
+ "* Identify which parameters impact the internal forces\n",
+ "* Explain how the free-body diagram is used and the (frequently) unclear sign convention"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"## **Tasks and exercises**\n",
"\n",
"Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
"\n",
"1. Which consequences does the applied force P have on the internal and external forces?\n",
"\n",
" <details>\n",
" <summary style=\"color: red\">Solution:</summary>\n",
" The external force P has direct influence on the horizontal reaction force R and the axial force N. There is no correlation with the shear force V and the bending moment M. Note that this affirmation does not hold for more complex cases.\n",
" </details>\n",
"\n",
"<br>\n",
"\n",
"2. Is there a position along the beam where the norm of the internal forces changes between right-hand and left-hand free-body diagram? What can you note about the sign?\n",
"\n",
" <details>\n",
" <summary style=\"color: red\">Solution:</summary>\n",
" No, because the equilibrium must be met in every position and the magnitude of the internal forces in each point should be the same independently of the side chosen for the equilibrium.\n",
" \n",
" The sign for the axial and shear forces flip between the two equilibrium. Instead, the sign of the moment remains the same.\n",
" </details>\n",
" \n",
"<br>\n",
"\n",
"3. Does the cross-section influence the internal forces? By changing the length of the beam to 8 m, do you ascertain any changes?\n",
"\n",
" <details>\n",
" <summary style=\"color: red\">Solution:</summary>\n",
" No, the cross-section has no impact on the internal forces in this case. This is true because the system is isostatic; if the system was hyperstatic, the cross-section could have an impact on the internal forces.\n",
" \n",
" By increasing the length of the beam, the shear force and bending moment increase; on the other hand the axial force remains the same.\n",
" </details>\n",
"\n",
"<br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Build the interactive visualisation tool**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div class=\"bk-root\">\n",
" <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
" <span id=\"1002\">Loading BokehJS ...</span>\n",
" </div>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
"(function(root) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
"\n",
" const force = true;\n",
"\n",
" if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
" root._bokeh_onload_callbacks = [];\n",
" root._bokeh_is_loading = undefined;\n",
" }\n",
"\n",
" const JS_MIME_TYPE = 'application/javascript';\n",
" const HTML_MIME_TYPE = 'text/html';\n",
" const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
" const CLASS_NAME = 'output_bokeh rendered_html';\n",
"\n",
" /**\n",
" * Render data to the DOM node\n",
" */\n",
" function render(props, node) {\n",
" const script = document.createElement(\"script\");\n",
" node.appendChild(script);\n",
" }\n",
"\n",
" /**\n",
" * Handle when an output is cleared or removed\n",
" */\n",
" function handleClearOutput(event, handle) {\n",
" const cell = handle.cell;\n",
"\n",
" const id = cell.output_area._bokeh_element_id;\n",
" const server_id = cell.output_area._bokeh_server_id;\n",
" // Clean up Bokeh references\n",
" if (id != null && id in Bokeh.index) {\n",
" Bokeh.index[id].model.document.clear();\n",
" delete Bokeh.index[id];\n",
" }\n",
"\n",
" if (server_id !== undefined) {\n",
" // Clean up Bokeh references\n",
" const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
" cell.notebook.kernel.execute(cmd_clean, {\n",
" iopub: {\n",
" output: function(msg) {\n",
" const id = msg.content.text.trim();\n",
" if (id in Bokeh.index) {\n",
" Bokeh.index[id].model.document.clear();\n",
" delete Bokeh.index[id];\n",
" }\n",
" }\n",
" }\n",
" });\n",
" // Destroy server and session\n",
" const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
" cell.notebook.kernel.execute(cmd_destroy);\n",
" }\n",
" }\n",
"\n",
" /**\n",
" * Handle when a new output is added\n",
" */\n",
" function handleAddOutput(event, handle) {\n",
" const output_area = handle.output_area;\n",
" const output = handle.output;\n",
"\n",
" // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
" if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
" return\n",
" }\n",
"\n",
" const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
"\n",
" if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
" toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
" // store reference to embed id on output_area\n",
" output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
" }\n",
" if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
" const bk_div = document.createElement(\"div\");\n",
" bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
" const script_attrs = bk_div.children[0].attributes;\n",
" for (let i = 0; i < script_attrs.length; i++) {\n",
" toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
" toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
" }\n",
" // store reference to server id on output_area\n",
" output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
" }\n",
" }\n",
"\n",
" function register_renderer(events, OutputArea) {\n",
"\n",
" function append_mime(data, metadata, element) {\n",
" // create a DOM node to render to\n",
" const toinsert = this.create_output_subarea(\n",
" metadata,\n",
" CLASS_NAME,\n",
" EXEC_MIME_TYPE\n",
" );\n",
" this.keyboard_manager.register_events(toinsert);\n",
" // Render to node\n",
" const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
" render(props, toinsert[toinsert.length - 1]);\n",
" element.append(toinsert);\n",
" return toinsert\n",
" }\n",
"\n",
" /* Handle when an output is cleared or removed */\n",
" events.on('clear_output.CodeCell', handleClearOutput);\n",
" events.on('delete.Cell', handleClearOutput);\n",
"\n",
" /* Handle when a new output is added */\n",
" events.on('output_added.OutputArea', handleAddOutput);\n",
"\n",
" /**\n",
" * Register the mime type and append_mime function with output_area\n",
" */\n",
" OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
" /* Is output safe? */\n",
" safe: true,\n",
" /* Index of renderer in `output_area.display_order` */\n",
" index: 0\n",
" });\n",
" }\n",
"\n",
" // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
" if (root.Jupyter !== undefined) {\n",
" const events = require('base/js/events');\n",
" const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
"\n",
" if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
" register_renderer(events, OutputArea);\n",
" }\n",
" }\n",
"\n",
" \n",
" if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
" root._bokeh_timeout = Date.now() + 5000;\n",
" root._bokeh_failed_load = false;\n",
" }\n",
"\n",
" const NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
"\n",
" function display_loaded() {\n",
" const el = document.getElementById(\"1002\");\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS is loading...\";\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
" }\n",
" } else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }\n",
"\n",
"\n",
" function run_callbacks() {\n",
" try {\n",
" root._bokeh_onload_callbacks.forEach(function(callback) {\n",
" if (callback != null)\n",
" callback();\n",
" });\n",
" } finally {\n",
" delete root._bokeh_onload_callbacks\n",
" }\n",
" console.debug(\"Bokeh: all callbacks have finished\");\n",
" }\n",
"\n",
" function load_libs(css_urls, js_urls, callback) {\n",
" if (css_urls == null) css_urls = [];\n",
" if (js_urls == null) js_urls = [];\n",
"\n",
" root._bokeh_onload_callbacks.push(callback);\n",
" if (root._bokeh_is_loading > 0) {\n",
" console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
"\n",
" function on_load() {\n",
" root._bokeh_is_loading--;\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
" run_callbacks()\n",
" }\n",
" }\n",
"\n",
" function on_error(url) {\n",
" console.error(\"failed to load \" + url);\n",
" }\n",
"\n",
" for (let i = 0; i < css_urls.length; i++) {\n",
" const url = css_urls[i];\n",
" const element = document.createElement(\"link\");\n",
" element.onload = on_load;\n",
" element.onerror = on_error.bind(null, url);\n",
" element.rel = \"stylesheet\";\n",
" element.type = \"text/css\";\n",
" element.href = url;\n",
" console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" for (let i = 0; i < js_urls.length; i++) {\n",
" const url = js_urls[i];\n",
" const element = document.createElement('script');\n",
" element.onload = on_load;\n",
" element.onerror = on_error.bind(null, url);\n",
" element.async = false;\n",
" element.src = url;\n",
" console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.head.appendChild(element);\n",
" }\n",
" };\n",
"\n",
" function inject_raw_css(css) {\n",
" const element = document.createElement(\"style\");\n",
" element.appendChild(document.createTextNode(css));\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" \n",
" const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
" const css_urls = [];\n",
" \n",
"\n",
" const inline_js = [\n",
" function(Bokeh) {\n",
" Bokeh.set_log_level(\"info\");\n",
" },\n",
" function(Bokeh) {\n",
" \n",
" \n",
" }\n",
" ];\n",
"\n",
" function run_inline_js() {\n",
" \n",
" if (root.Bokeh !== undefined || force === true) {\n",
" \n",
" for (let i = 0; i < inline_js.length; i++) {\n",
" inline_js[i].call(root, root.Bokeh);\n",
" }\n",
" if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!root._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" root._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
"\n",
" }\n",
"\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(css_urls, js_urls, function() {\n",
" console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
"}(window));"
],
"application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Import the packages needed\n",
"import sys\n",
"sys.path.append('../HiddenCode')\n",
"import hidden_code_nb_actions\n",
"import math\n",
"import numpy as np\n",
"from cienpy import simplebeam as sb\n",
"from cienpy import rectangular_section as beam_section"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define the geometry, the external actions and compute the initial configuration."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Choose the dimensions\n",
"L = 6 # [m]\n",
"h = 200 # [mm]\n",
"b = 100 # [mm]\n",
"q = 4; # [kN/m]\n",
"P = 10; # [kN]\n",
"\n",
"# compute the internal forces (at x=L)\n",
"discr_NVM = 100\n",
"x_discr = np.linspace(0, L, discr_NVM)\n",
"N_discr = sb.compute_N(x_discr, P)\n",
"V_discr = sb.compute_V(x_discr, q, L)\n",
"M_discr = sb.compute_M(x_discr, q, L)\n",
"N = N_discr[-1]\n",
"V = V_discr[-1]\n",
"M = M_discr[-1]\n",
"\n",
"# compute the parameters\n",
"A = beam_section.compute_area(b, h) # [mm2]\n",
"Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
"Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
"\n",
"# compute the reactions\n",
"Rx = sb.compute_Rx(P)\n",
"Ry_l = sb.compute_Ry_l(q, L)\n",
"Ry_r = sb.compute_Ry_r(q, L)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Run the complex code to generate the **interactive visualisation tool**:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" <div class=\"bk-root\" id=\"6c600490-fe9d-47f0-9390-e76787d544b5\" data-root-id=\"2052\"></div>\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" const docs_json = {\"c3490bd5-5d4b-47ec-80cf-f488a75f6246\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"2051\"}]},\"id\":\"2052\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"2042\"},{\"id\":\"1881\"},{\"id\":\"1882\"},{\"id\":\"1880\"},{\"id\":\"2043\"},{\"id\":\"2029\"},{\"id\":\"2028\"},{\"id\":\"2030\"},{\"id\":\"2031\"},{\"id\":\"2032\"},{\"id\":\"2033\"}]},\"id\":\"2044\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2176\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2177\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1895\"}},\"id\":\"1900\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"1814\"},{\"id\":\"2041\"},{\"id\":\"2044\"}]},\"id\":\"2045\",\"type\":\"Row\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2211\"},\"selection_policy\":{\"id\":\"2210\"}},\"id\":\"1886\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2178\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2208\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2183\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1781\"},{\"id\":\"2045\"}]},\"id\":\"2046\",\"type\":\"Column\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1883\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2209\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2184\",\"type\":\"Selection\"},{\"attributes\":{\"height\":10},\"id\":\"2047\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"2046\"},{\"id\":\"2048\"}]},\"id\":\"2049\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1901\"},{\"id\":\"2047\"},{\"id\":\"2034\"}]},\"id\":\"2048\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2191\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"2049\"}]},\"id\":\"2050\",\"type\":\"Column\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2216\"},\"selection_policy\":{\"id\":\"2215\"}},\"id\":\"2179\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2192\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1817\",\"type\":\"DataRange1d\"},{\"attributes\":{\"children\":[{\"id\":\"2050\"}]},\"id\":\"2051\",\"type\":\"Row\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1784\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2218\"},\"selection_policy\":{\"id\":\"2217\"}},\"id\":\"2180\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"2188\"},\"selection_policy\":{\"id\":\"2187\"}},\"id\":\"1779\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2185\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2184\"},\"selection_policy\":{\"id\":\"2183\"}},\"id\":\"1778\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2186\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2210\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2159\"},\"selection_policy\":{\"id\":\"2158\"}},\"id\":\"1777\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1777\"},\"glyph\":{\"id\":\"1857\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1859\"},\"nonselection_glyph\":{\"id\":\"1858\"},\"view\":{\"id\":\"1861\"}},\"id\":\"1860\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1777\"}},\"id\":\"1861\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2211\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"A\":[20000],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0]},\"selected\":{\"id\":\"2171\"},\"selection_policy\":{\"id\":\"2170\"}},\"id\":\"1780\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1896\",\"type\":\"Text\"},{\"attributes\":{\"axis\":{\"id\":\"1796\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1799\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1868\"}},\"id\":\"1873\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2142\"},\"group\":null,\"major_label_policy\":{\"id\":\"2143\"},\"ticker\":{\"id\":\"1793\"}},\"id\":\"1792\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2162\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1788\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1874\"}},\"id\":\"1879\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1793\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1792\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1795\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1792\"}],\"center\":[{\"id\":\"1795\"},{\"id\":\"1799\"},{\"id\":\"1953\"}],\"height\":200,\"left\":[{\"id\":\"1796\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1860\"},{\"id\":\"1866\"},{\"id\":\"1872\"},{\"id\":\"1944\"},{\"id\":\"1950\"},{\"id\":\"1959\"},{\"id\":\"1965\"}],\"title\":{\"id\":\"1782\"},\"toolbar\":{\"id\":\"1807\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1784\"},\"x_scale\":{\"id\":\"1788\"},\"y_range\":{\"id\":\"1786\"},\"y_scale\":{\"id\":\"1790\"}},\"id\":\"1781\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1782\",\"type\":\"Title\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1892\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2187\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1786\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"2212\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2217\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2188\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1800\"},{\"id\":\"1801\"},{\"id\":\"1802\"},{\"id\":\"1803\"},{\"id\":\"1804\"},{\"id\":\"1805\"}]},\"id\":\"1807\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"1825\"}],\"center\":[{\"id\":\"1828\"},{\"id\":\"1832\"},{\"id\":\"1884\"},{\"id\":\"1893\"}],\"left\":[{\"id\":\"1829\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1851\"},{\"id\":\"1878\"},{\"id\":\"1890\"},{\"id\":\"1899\"}],\"title\":{\"id\":\"1815\"},\"toolbar\":{\"id\":\"1840\"},\"toolbar_location\":null,\"width\":375,\"x_range\":{\"id\":\"1817\"},\"x_scale\":{\"id\":\"1821\"},\"y_range\":{\"id\":\"1819\"},\"y_scale\":{\"id\":\"1823\"}},\"id\":\"1814\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1790\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2213\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1797\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2139\"},\"group\":null,\"major_label_policy\":{\"id\":\"2140\"},\"ticker\":{\"id\":\"1797\"},\"visible\":false},\"id\":\"1796\",\"type\":\"LinearAxis\"},{\"attributes\":{\"overlay\":{\"id\":\"1806\"}},\"id\":\"1802\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1836\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1805\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2181\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2194\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1801\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1837\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2182\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1806\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2195\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1804\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2218\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1803\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1848\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2196\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2197\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1823\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2198\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1825\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1828\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2199\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2207\"},\"selection_policy\":{\"id\":\"2206\"}},\"id\":\"1847\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2177\"},\"group\":null,\"major_label_policy\":{\"id\":\"2178\"},\"ticker\":{\"id\":\"1853\"}},\"id\":\"1825\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2189\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2200\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1821\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2215\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2190\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2201\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2216\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1963\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1935\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1863\",\"type\":\"Patch\"},{\"attributes\":{\"axis\":{\"id\":\"1829\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1832\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2192\"},\"selection_policy\":{\"id\":\"2191\"}},\"id\":\"2022\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1780\"}},\"id\":\"1966\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2175\"},\"group\":null,\"major_label_policy\":{\"id\":\"2176\"},\"ticker\":{\"id\":\"1853\"}},\"id\":\"1829\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"2182\"},\"selection_policy\":{\"id\":\"2181\"}},\"id\":\"1934\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"2161\"},\"selection_policy\":{\"id\":\"2160\"}},\"id\":\"1862\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1895\"},\"glyph\":{\"id\":\"1896\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1898\"},\"nonselection_glyph\":{\"id\":\"1897\"},\"view\":{\"id\":\"1900\"}},\"id\":\"1899\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1969\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1964\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2170\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1849\",\"type\":\"Rect\"},{\"attributes\":{\"below\":[{\"id\":\"1912\"}],\"center\":[{\"id\":\"1915\"},{\"id\":\"1919\"},{\"id\":\"1998\"},{\"id\":\"2001\"},{\"id\":\"2004\"},{\"id\":\"2007\"},{\"id\":\"2010\"},{\"id\":\"2013\"}],\"height\":200,\"left\":[{\"id\":\"1916\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1938\"},{\"id\":\"1971\"},{\"id\":\"1977\"},{\"id\":\"1983\"},{\"id\":\"1989\"},{\"id\":\"1995\"},{\"id\":\"2020\"},{\"id\":\"2026\"}],\"title\":{\"id\":\"1902\"},\"toolbar\":{\"id\":\"1927\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1904\"},\"x_scale\":{\"id\":\"1908\"},\"y_range\":{\"id\":\"1906\"},\"y_scale\":{\"id\":\"1910\"}},\"id\":\"1901\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1780\"},\"glyph\":{\"id\":\"1962\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1964\"},\"nonselection_glyph\":{\"id\":\"1963\"},\"view\":{\"id\":\"1966\"}},\"id\":\"1965\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1875\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1780\"},\"glyph\":{\"id\":\"1968\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1970\"},\"nonselection_glyph\":{\"id\":\"1969\"},\"view\":{\"id\":\"1972\"}},\"id\":\"1971\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1936\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2171\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2147\"},\"group\":null,\"major_label_policy\":{\"id\":\"2148\"},\"ticker\":{\"id\":\"1917\"},\"visible\":false},\"id\":\"1916\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1857\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2190\"},\"selection_policy\":{\"id\":\"2189\"}},\"id\":\"2015\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1968\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1925\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2213\"},\"selection_policy\":{\"id\":\"2212\"}},\"id\":\"1895\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1912\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1915\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2017\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1908\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1778\"},\"glyph\":{\"id\":\"1974\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1976\"},\"nonselection_glyph\":{\"id\":\"1975\"},\"view\":{\"id\":\"1978\"}},\"id\":\"1977\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1916\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1919\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1780\"}},\"id\":\"1972\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2204\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1970\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1917\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2147\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1979\"},\"glyph\":{\"id\":\"1980\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1982\"},\"nonselection_glyph\":{\"id\":\"1981\"},\"view\":{\"id\":\"1984\"}},\"id\":\"1983\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1941\",\"type\":\"Rect\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1974\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1887\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1838\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2148\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2205\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1975\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1839\"}},\"id\":\"1835\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1819\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1992\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1921\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1976\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1920\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2150\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1779\"}},\"id\":\"1990\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1926\"}},\"id\":\"1922\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1864\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1778\"}},\"id\":\"1978\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1923\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1924\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2151\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2163\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2142\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1979\"}},\"id\":\"1984\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1839\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2037\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1882\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1980\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1883\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2179\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1884\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1982\",\"type\":\"Line\"},{\"attributes\":{\"interval\":50},\"id\":\"1853\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{},\"id\":\"2143\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2186\"},\"selection_policy\":{\"id\":\"2185\"}},\"id\":\"1979\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1926\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1906\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1981\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1987\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1997\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2152\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1998\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2003\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2154\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"2004\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2209\"},\"selection_policy\":{\"id\":\"2208\"}},\"id\":\"1874\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1986\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1910\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1779\"},\"glyph\":{\"id\":\"1986\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1988\"},\"nonselection_glyph\":{\"id\":\"1987\"},\"view\":{\"id\":\"1990\"}},\"id\":\"1989\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1779\"},\"glyph\":{\"id\":\"1992\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1994\"},\"nonselection_glyph\":{\"id\":\"1993\"},\"view\":{\"id\":\"1996\"}},\"id\":\"1995\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2150\"},\"group\":null,\"major_label_policy\":{\"id\":\"2151\"},\"ticker\":{\"id\":\"1913\"},\"visible\":false},\"id\":\"1912\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2006\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2155\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"2007\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1993\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2195\"},\"selection_policy\":{\"id\":\"2194\"}},\"id\":\"2152\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1988\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"2000\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2000\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2153\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"2001\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2012\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2157\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"2013\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1858\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2174\"},\"selection_policy\":{\"id\":\"2173\"}},\"id\":\"2144\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1847\"},\"glyph\":{\"id\":\"1848\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1850\"},\"nonselection_glyph\":{\"id\":\"1849\"},\"view\":{\"id\":\"1852\"}},\"id\":\"1851\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2197\"},\"selection_policy\":{\"id\":\"2196\"}},\"id\":\"2153\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1902\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2009\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2156\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"2010\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"2012\",\"type\":\"VeeHead\"},{\"attributes\":{\"tools\":[{\"id\":\"1833\"},{\"id\":\"1834\"},{\"id\":\"1835\"},{\"id\":\"1836\"},{\"id\":\"1837\"},{\"id\":\"1838\"}]},\"id\":\"1840\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"1779\"}},\"id\":\"1996\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"2003\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2199\"},\"selection_policy\":{\"id\":\"2198\"}},\"id\":\"2154\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"2009\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2164\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"2006\",\"type\":\"VeeHead\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\"},\"id\":\"1880\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"2165\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1898\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2015\"},\"glyph\":{\"id\":\"2017\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2019\"},\"nonselection_glyph\":{\"id\":\"2018\"},\"view\":{\"id\":\"2021\"}},\"id\":\"2020\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"height\":10},\"id\":\"2042\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2206\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2036\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1881\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2018\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2201\"},\"selection_policy\":{\"id\":\"2200\"}},\"id\":\"2155\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2019\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2173\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2024\",\"type\":\"Scatter\"},{\"attributes\":{\"height\":10},\"id\":\"2043\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1934\"}},\"id\":\"1939\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"2015\"}},\"id\":\"2021\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"2022\"}},\"id\":\"2027\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2203\"},\"selection_policy\":{\"id\":\"2202\"}},\"id\":\"2156\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2174\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1937\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2023\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1850\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1865\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2025\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1934\"},\"glyph\":{\"id\":\"1935\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1937\"},\"nonselection_glyph\":{\"id\":\"1936\"},\"view\":{\"id\":\"1939\"}},\"id\":\"1938\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2166\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2022\"},\"glyph\":{\"id\":\"2023\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2025\"},\"nonselection_glyph\":{\"id\":\"2024\"},\"view\":{\"id\":\"2027\"}},\"id\":\"2026\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2205\"},\"selection_policy\":{\"id\":\"2204\"}},\"id\":\"2157\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2040\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"2028\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"2167\",\"type\":\"Selection\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"2030\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"2202\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1904\",\"type\":\"DataRange1d\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2035\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"2029\",\"type\":\"Slider\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2039\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"2031\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"tools\":[{\"id\":\"1920\"},{\"id\":\"1921\"},{\"id\":\"1922\"},{\"id\":\"1923\"},{\"id\":\"1924\"},{\"id\":\"1925\"}]},\"id\":\"1927\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2158\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"2032\",\"type\":\"Div\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1994\",\"type\":\"Patch\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \"},\"id\":\"2034\",\"type\":\"Div\"},{\"attributes\":{\"source\":{\"id\":\"1847\"}},\"id\":\"1852\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"2165\"},\"selection_policy\":{\"id\":\"2164\"}},\"id\":\"1940\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1874\"},\"glyph\":{\"id\":\"1875\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1877\"},\"nonselection_glyph\":{\"id\":\"1876\"},\"view\":{\"id\":\"1879\"}},\"id\":\"1878\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1940\"},\"glyph\":{\"id\":\"1941\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1943\"},\"nonselection_glyph\":{\"id\":\"1942\"},\"view\":{\"id\":\"1945\"}},\"id\":\"1944\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1880\"},\"s_b\":{\"id\":\"1777\"},\"section\":{\"id\":\"1878\"},\"source\":{\"id\":\"1780\"},\"support_r\":{\"id\":\"1872\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \"},\"id\":\"2036\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1862\"},\"glyph\":{\"id\":\"1863\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1865\"},\"nonselection_glyph\":{\"id\":\"1864\"},\"view\":{\"id\":\"1867\"}},\"id\":\"1866\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"2163\"},\"selection_policy\":{\"id\":\"2162\"}},\"id\":\"1868\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1942\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1952\",\"type\":\"VeeHead\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2038\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"2033\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"2026\"},\"div_P\":{\"id\":\"2032\"},\"div_f\":{\"id\":\"2034\"},\"fN\":{\"id\":\"2010\"},\"fP\":{\"id\":\"1998\"},\"fRx\":{\"id\":\"2007\"},\"fRyl\":{\"id\":\"2004\"},\"fRyr\":{\"id\":\"2001\"},\"fV\":{\"id\":\"2013\"},\"s_M\":{\"id\":\"2015\"},\"s_q\":{\"id\":\"1779\"},\"s_sb\":{\"id\":\"1778\"},\"source\":{\"id\":\"1780\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \"},\"id\":\"2035\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1943\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1815\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2159\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1946\"},\"glyph\":{\"id\":\"1947\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1949\"},\"nonselection_glyph\":{\"id\":\"1948\"},\"view\":{\"id\":\"1951\"}},\"id\":\"1950\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1859\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"2167\"},\"selection_policy\":{\"id\":\"2166\"}},\"id\":\"1946\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1913\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2161\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1869\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1940\"}},\"id\":\"1945\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2168\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1862\"}},\"id\":\"1867\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1958\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2203\",\"type\":\"Selection\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1947\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1886\"},\"glyph\":{\"id\":\"1887\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1889\"},\"nonselection_glyph\":{\"id\":\"1888\"},\"view\":{\"id\":\"1891\"}},\"id\":\"1890\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1880\"},\"s_b\":{\"id\":\"1777\"},\"section\":{\"id\":\"1878\"},\"source\":{\"id\":\"1780\"},\"support_r\":{\"id\":\"1872\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \"},\"id\":\"2037\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2169\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2207\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1868\"},\"glyph\":{\"id\":\"1869\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1871\"},\"nonselection_glyph\":{\"id\":\"1870\"},\"view\":{\"id\":\"1873\"}},\"id\":\"1872\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1946\"}},\"id\":\"1951\",\"type\":\"CDSView\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"2026\"},\"div_P\":{\"id\":\"2032\"},\"div_f\":{\"id\":\"2034\"},\"fN\":{\"id\":\"2010\"},\"fP\":{\"id\":\"1998\"},\"fRx\":{\"id\":\"2007\"},\"fRyl\":{\"id\":\"2004\"},\"fRyr\":{\"id\":\"2001\"},\"fV\":{\"id\":\"2013\"},\"s_M\":{\"id\":\"2015\"},\"source\":{\"id\":\"1780\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"2038\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1952\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2144\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1953\",\"type\":\"Arrow\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1897\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1948\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Rect\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"2026\"},\"div_P\":{\"id\":\"2032\"},\"fN\":{\"id\":\"2010\"},\"fP\":{\"id\":\"1998\"},\"fRx\":{\"id\":\"2007\"},\"fRyl\":{\"id\":\"2004\"},\"fRyr\":{\"id\":\"2001\"},\"fV\":{\"id\":\"2013\"},\"s_M\":{\"id\":\"2015\"},\"s_q\":{\"id\":\"1779\"},\"s_sb\":{\"id\":\"1778\"},\"source\":{\"id\":\"1780\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"2039\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1962\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1892\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2180\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1893\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1834\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1949\",\"type\":\"Text\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"2026\"},\"div_P\":{\"id\":\"2032\"},\"div_f\":{\"id\":\"2034\"},\"fN\":{\"id\":\"2010\"},\"fP\":{\"id\":\"1998\"},\"fRx\":{\"id\":\"2007\"},\"fRyl\":{\"id\":\"2004\"},\"fRyr\":{\"id\":\"2001\"},\"fV\":{\"id\":\"2013\"},\"s_M\":{\"id\":\"2015\"},\"s_q\":{\"id\":\"1779\"},\"source\":{\"id\":\"1780\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"2040\",\"type\":\"CustomJS\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1957\",\"type\":\"Text\"},{\"attributes\":{\"width\":10},\"id\":\"2041\",\"type\":\"Spacer\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1997\",\"type\":\"VeeHead\"},{\"attributes\":{\"source\":{\"id\":\"1886\"}},\"id\":\"1891\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1955\"},\"glyph\":{\"id\":\"1956\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1958\"},\"nonselection_glyph\":{\"id\":\"1957\"},\"view\":{\"id\":\"1960\"}},\"id\":\"1959\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2160\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1956\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2175\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1955\"}},\"id\":\"1960\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"2169\"},\"selection_policy\":{\"id\":\"2168\"}},\"id\":\"1955\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"2052\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
" const render_items = [{\"docid\":\"c3490bd5-5d4b-47ec-80cf-f488a75f6246\",\"root_ids\":[\"2052\"],\"roots\":{\"2052\":\"6c600490-fe9d-47f0-9390-e76787d544b5\"}}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" let attempts = 0;\n",
" const timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" clearInterval(timer);\n",
" embed_document(root);\n",
" } else {\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" clearInterval(timer);\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
" }\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "2052"
}
},
"output_type": "display_data"
}
],
"source": [
"hidden_code_nb_actions.main_code(L, h, b, A, Iy, Iz, q, P, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Legend**\n",
"\n",
"Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder. \n",
"\n",
"* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
"* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
"* **Slider of the position x:** move the slider to change the position x along the beam.\n",
"* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
"* **Textbox \"Geometrical and mechanical parameters:** small summary with the value of h, b, L, A (area), Iy (inertia with respect to the strong axis) and Iz (inertia with respect to the weak axis).\n",
"* **Textbox \"Forces and Moments:** small summary with the value of the magnitude of the reaction forces and the internal forces at the position x.\n",
"* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
"* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
"* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
"* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
"* **Button of the force P:** apply or remove the external force P.\n",
"\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
"### Recommendations\n",
"\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
"Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
]
}
],
"metadata": {
"interpreter": {
"hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
diff --git a/Simple Beam DEMOs/03-sb_diagrams.ipynb b/Simple Beam DEMOs/03-sb_diagrams.ipynb
new file mode 100644
index 0000000..724946b
--- /dev/null
+++ b/Simple Beam DEMOs/03-sb_diagrams.ipynb
@@ -0,0 +1,572 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# **Simple beam - N V M Diagrams**\n",
+ "In this third notebook, the internal axial force N, shear force V and bending moment M diagrams are studied on the same system, external force P and the uniform load q introduced in the DEMO \"02-sb_actions\"."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Goals**\n",
+ "\n",
+ "* Analyze the N V M diagrams\n",
+ "* Describe the relations between the three diagrams\n",
+ "* Identify the direct correlation of the diagrams with the internal forces"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Tasks and exercises**\n",
+ "\n",
+ "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
+ "\n",
+ "1. In which position the bending moment M is the highest? Does the shear force V have correlation with the behaviour of the bending moment M?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " The bending moment is the highest in the middle of the beam, at x = 3 m.\n",
+ " \n",
+ " Yes, in fact we can note that the shear force V is 0 when the moment is maximum and that the slope of the moment is directily correlated with the shear force V. The relation between V and M is the following $\\frac{dM}{dx} = V$.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "2. In this case, does changing the uniform load q have any impact on the internal force N? What else do you note?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " No, q has no influece with the axial force N, but it has direct impact with the shear force V, the bending moment M and the left and right vertical reaction.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "3. Which impact has the chosen free-body diagram on the N V M diagrams?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " None, beacuse the N V M diagrams are independent on the free-body diagram used to compute the equilibium. The signs of the diagrams are computed by following a sign conention, presented below:\n",
+ " <br>\n",
+ " <img src=\"img/Sign_convention.png\" alt=\"drawing\" width=\"600\"/>\n",
+ " </details>\n",
+ "\n",
+ "<br>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Build the interactive visualisation tool**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " <div class=\"bk-root\">\n",
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
+ " </div>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ " const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " \n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
+ " \"<p>\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"</p>\\n\"+\n",
+ " \"<ul>\\n\"+\n",
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
+ " \"</ul>\\n\"+\n",
+ " \"<code>\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"</code>\\n\"+\n",
+ " \"</div>\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"1002\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " \n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ " \n",
+ "\n",
+ " const inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " \n",
+ " \n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " \n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " \n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ " if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ "\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Import the packages needed\n",
+ "import sys\n",
+ "sys.path.append('../HiddenCode')\n",
+ "import hidden_code_nb_diagrams\n",
+ "import math\n",
+ "import numpy as np \n",
+ "from cienpy import simplebeam as sb\n",
+ "from cienpy import rectangular_section as beam_section"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Define the geometry, the external actions and compute the initial configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Choose the dimensions\n",
+ "L = 6 # [m]\n",
+ "h = 200 # [mm]\n",
+ "b = 100 # [mm]\n",
+ "q = 4; # [kN/m]\n",
+ "P = 10; # [kN]\n",
+ "\n",
+ "# compute the internal forces (at x=L)\n",
+ "discr_NVM = 101\n",
+ "x_discr = np.linspace(0, L, discr_NVM)\n",
+ "N_discr = sb.compute_N(x_discr, P)\n",
+ "V_discr = sb.compute_V(x_discr, q, L)\n",
+ "M_discr = sb.compute_M(x_discr, q, L)\n",
+ "N = N_discr[-1]\n",
+ "V = V_discr[-1]\n",
+ "M = M_discr[-1]\n",
+ "\n",
+ "# compute the parameters\n",
+ "A = beam_section.compute_area(b, h) # [mm2]\n",
+ "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
+ "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
+ "\n",
+ "# compute the reactions\n",
+ "Rx = sb.compute_Rx(P)\n",
+ "Ry_l = sb.compute_Ry_l(q, L)\n",
+ "Ry_r = sb.compute_Ry_r(q, L)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the complex code to generate the **interactive visualisation tool**:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " <div class=\"bk-root\" id=\"d6b57e37-d080-48b1-abe8-d03e60a7816c\" data-root-id=\"1430\"></div>\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function embed_document(root) {\n",
+ " \n",
+ " const docs_json = {\"fc24d7bf-4243-4c13-a069-6fd9b7de0638\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1429\"}]},\"id\":\"1430\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1022\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1025\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1452\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1453\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1026\"},{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"}]},\"id\":\"1033\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1452\"},\"group\":null,\"major_label_policy\":{\"id\":\"1453\"},\"ticker\":{\"id\":\"1023\"},\"visible\":false},\"id\":\"1022\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1032\"}},\"id\":\"1028\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1456\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1029\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1503\"},\"group\":null,\"major_label_policy\":{\"id\":\"1504\"},\"ticker\":{\"id\":\"1079\"}},\"id\":\"1055\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1486\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1487\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1032\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1523\"},\"selection_policy\":{\"id\":\"1522\"}},\"id\":\"1457\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1083\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1085\"},\"nonselection_glyph\":{\"id\":\"1084\"},\"view\":{\"id\":\"1087\"}},\"id\":\"1086\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1073\"}},\"id\":\"1078\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1041\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1488\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1489\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1505\"},\"group\":null,\"major_label_policy\":{\"id\":\"1506\"},\"ticker\":{\"id\":\"1079\"}},\"id\":\"1051\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1059\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1073\"},\"glyph\":{\"id\":\"1074\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1076\"},\"nonselection_glyph\":{\"id\":\"1075\"},\"view\":{\"id\":\"1078\"}},\"id\":\"1077\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1459\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1065\"}},\"id\":\"1061\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1460\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1051\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1054\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"LinearScale\"},{\"attributes\":{\"interval\":50},\"id\":\"1079\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1055\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1058\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1463\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1059\"},{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"}]},\"id\":\"1066\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1534\"},\"selection_policy\":{\"id\":\"1533\"}},\"id\":\"1073\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1065\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1062\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1442\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1443\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1329\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1301\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1304\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1468\"},\"group\":null,\"major_label_policy\":{\"id\":\"1469\"},\"ticker\":{\"id\":\"1302\"},\"visible\":false},\"id\":\"1301\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1492\"},\"selection_policy\":{\"id\":\"1491\"}},\"id\":\"1444\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1295\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1494\"},\"selection_policy\":{\"id\":\"1493\"}},\"id\":\"1445\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1297\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1496\"},\"selection_policy\":{\"id\":\"1495\"}},\"id\":\"1446\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1325\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1498\"},\"selection_policy\":{\"id\":\"1497\"}},\"id\":\"1447\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1353\"},\"glyph\":{\"id\":\"1354\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1356\"},\"nonselection_glyph\":{\"id\":\"1355\"},\"view\":{\"id\":\"1358\"}},\"id\":\"1357\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1465\"},\"group\":null,\"major_label_policy\":{\"id\":\"1466\"},\"ticker\":{\"id\":\"1306\"}},\"id\":\"1305\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1500\"},\"selection_policy\":{\"id\":\"1499\"}},\"id\":\"1448\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1305\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1308\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1306\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1502\"},\"selection_policy\":{\"id\":\"1501\"}},\"id\":\"1449\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1342\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1314\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1315\"}},\"id\":\"1311\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1312\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1527\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1315\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1339\"},{\"id\":\"1340\"},{\"id\":\"1341\"},{\"id\":\"1342\"},{\"id\":\"1343\"},{\"id\":\"1344\"},{\"id\":\"1393\"}]},\"id\":\"1346\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1340\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1528\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1309\"},{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1379\"}]},\"id\":\"1316\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1327\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1474\"},\"group\":null,\"major_label_policy\":{\"id\":\"1475\"},\"ticker\":{\"id\":\"1332\"}},\"id\":\"1331\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1336\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1332\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1471\"},\"group\":null,\"major_label_policy\":{\"id\":\"1472\"},\"ticker\":{\"id\":\"1336\"}},\"id\":\"1335\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1331\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1334\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1335\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1338\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1345\"}},\"id\":\"1341\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1101\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1503\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"1512\"},\"selection_policy\":{\"id\":\"1511\"}},\"id\":\"1088\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1504\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1505\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1506\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1478\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1095\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1479\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1087\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1083\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1543\"},\"selection_policy\":{\"id\":\"1542\"}},\"id\":\"1507\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1088\"},\"glyph\":{\"id\":\"1089\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1091\"},\"nonselection_glyph\":{\"id\":\"1090\"},\"view\":{\"id\":\"1093\"}},\"id\":\"1092\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1089\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1100\"},\"glyph\":{\"id\":\"1101\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1103\"},\"nonselection_glyph\":{\"id\":\"1102\"},\"view\":{\"id\":\"1105\"}},\"id\":\"1104\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1545\"},\"selection_policy\":{\"id\":\"1544\"}},\"id\":\"1508\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"1514\"},\"selection_policy\":{\"id\":\"1513\"}},\"id\":\"1094\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1094\"}},\"id\":\"1099\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1536\"},\"selection_policy\":{\"id\":\"1535\"}},\"id\":\"1100\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1088\"}},\"id\":\"1093\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1480\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1094\"},\"glyph\":{\"id\":\"1095\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1097\"},\"nonselection_glyph\":{\"id\":\"1096\"},\"view\":{\"id\":\"1099\"}},\"id\":\"1098\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1481\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Rect\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\"},\"id\":\"1106\",\"type\":\"Div\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1109\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1109\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1507\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1110\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1103\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1128\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1136\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1100\"}},\"id\":\"1105\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1414\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1107\",\"type\":\"Slider\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1415\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1482\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1112\"}},\"id\":\"1117\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1112\"},\"glyph\":{\"id\":\"1113\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1115\"},\"nonselection_glyph\":{\"id\":\"1114\"},\"view\":{\"id\":\"1117\"}},\"id\":\"1116\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"1138\"}],\"center\":[{\"id\":\"1141\"},{\"id\":\"1145\"},{\"id\":\"1224\"},{\"id\":\"1227\"},{\"id\":\"1230\"},{\"id\":\"1233\"},{\"id\":\"1236\"},{\"id\":\"1239\"}],\"height\":200,\"left\":[{\"id\":\"1142\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1164\"},{\"id\":\"1197\"},{\"id\":\"1203\"},{\"id\":\"1209\"},{\"id\":\"1215\"},{\"id\":\"1221\"},{\"id\":\"1246\"},{\"id\":\"1252\"}],\"title\":{\"id\":\"1128\"},\"toolbar\":{\"id\":\"1153\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1130\"},\"x_scale\":{\"id\":\"1134\"},\"y_range\":{\"id\":\"1132\"},\"y_scale\":{\"id\":\"1136\"}},\"id\":\"1127\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1483\",\"type\":\"Selection\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1113\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"1538\"},\"selection_policy\":{\"id\":\"1537\"}},\"id\":\"1112\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1121\"}},\"id\":\"1126\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1118\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1118\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1508\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1119\",\"type\":\"Arrow\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1122\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1121\"},\"glyph\":{\"id\":\"1122\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1124\"},\"nonselection_glyph\":{\"id\":\"1123\"},\"view\":{\"id\":\"1126\"}},\"id\":\"1125\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1509\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"1540\"},\"selection_policy\":{\"id\":\"1539\"}},\"id\":\"1121\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1510\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1161\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"1477\"},\"selection_policy\":{\"id\":\"1476\"}},\"id\":\"1160\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1484\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1130\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1132\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1134\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1442\"},\"group\":null,\"major_label_policy\":{\"id\":\"1443\"},\"ticker\":{\"id\":\"1139\"},\"visible\":false},\"id\":\"1138\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1142\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1145\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1138\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1141\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1139\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1439\"},\"group\":null,\"major_label_policy\":{\"id\":\"1440\"},\"ticker\":{\"id\":\"1143\"},\"visible\":false},\"id\":\"1142\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1519\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1520\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1534\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1535\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1536\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1522\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1523\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1524\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1537\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1538\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1525\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1539\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1540\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1016\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1074\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1434\",\"type\":\"Title\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1012\",\"type\":\"Range1d\"},{\"attributes\":{\"axis\":{\"id\":\"1018\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1021\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1436\",\"type\":\"Title\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1010\",\"type\":\"Range1d\"},{\"attributes\":{\"below\":[{\"id\":\"1051\"}],\"center\":[{\"id\":\"1054\"},{\"id\":\"1058\"},{\"id\":\"1110\"},{\"id\":\"1119\"}],\"left\":[{\"id\":\"1055\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1077\"},{\"id\":\"1104\"},{\"id\":\"1116\"},{\"id\":\"1125\"}],\"title\":{\"id\":\"1041\"},\"toolbar\":{\"id\":\"1066\"},\"toolbar_location\":null,\"width\":375,\"x_range\":{\"id\":\"1043\"},\"x_scale\":{\"id\":\"1047\"},\"y_range\":{\"id\":\"1045\"},\"y_scale\":{\"id\":\"1049\"}},\"id\":\"1040\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1019\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1455\"},\"group\":null,\"major_label_policy\":{\"id\":\"1456\"},\"ticker\":{\"id\":\"1019\"}},\"id\":\"1018\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1008\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1439\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1440\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1146\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1345\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"A\":[20000],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0]},\"selected\":{\"id\":\"1479\"},\"selection_policy\":{\"id\":\"1478\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1152\"}},\"id\":\"1148\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1149\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1481\"},\"selection_policy\":{\"id\":\"1480\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"ResetTool\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1357\"},\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"div_f\":{\"id\":\"1260\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=101) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1416\",\"type\":\"CustomJS\"},{\"attributes\":{\"below\":[{\"id\":\"1018\"}],\"center\":[{\"id\":\"1021\"},{\"id\":\"1025\"},{\"id\":\"1179\"}],\"height\":200,\"left\":[{\"id\":\"1022\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1086\"},{\"id\":\"1092\"},{\"id\":\"1098\"},{\"id\":\"1170\"},{\"id\":\"1176\"},{\"id\":\"1185\"},{\"id\":\"1191\"}],\"title\":{\"id\":\"1008\"},\"toolbar\":{\"id\":\"1033\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1014\"},\"y_range\":{\"id\":\"1012\"},\"y_scale\":{\"id\":\"1016\"}},\"id\":\"1007\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1152\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1106\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1104\"},\"source\":{\"id\":\"1006\"},\"support_r\":{\"id\":\"1098\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \"},\"id\":\"1415\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1238\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1408\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1410\"},\"nonselection_glyph\":{\"id\":\"1409\"},\"view\":{\"id\":\"1412\"}},\"id\":\"1411\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1238\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1449\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1239\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1491\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"1485\"},\"selection_policy\":{\"id\":\"1484\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"1487\"},\"selection_policy\":{\"id\":\"1486\"}},\"id\":\"1241\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1410\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1232\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1447\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1233\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1493\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"1525\"},\"selection_policy\":{\"id\":\"1524\"}},\"id\":\"1353\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1167\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1409\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1496\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1353\"}},\"id\":\"1358\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1354\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1160\"}},\"id\":\"1165\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1497\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1146\"},{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"}]},\"id\":\"1153\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1360\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1178\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1457\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1179\",\"type\":\"Arrow\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1368\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1160\"},\"glyph\":{\"id\":\"1161\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1163\"},\"nonselection_glyph\":{\"id\":\"1162\"},\"view\":{\"id\":\"1165\"}},\"id\":\"1164\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1370\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"1516\"},\"selection_policy\":{\"id\":\"1515\"}},\"id\":\"1166\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1364\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1357\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1365\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1166\"},\"glyph\":{\"id\":\"1167\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1169\"},\"nonselection_glyph\":{\"id\":\"1168\"},\"view\":{\"id\":\"1171\"}},\"id\":\"1170\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1499\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1510\"},\"selection_policy\":{\"id\":\"1509\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1178\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1367\"},\"glyph\":{\"id\":\"1368\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1370\"},\"nonselection_glyph\":{\"id\":\"1369\"},\"view\":{\"id\":\"1372\"}},\"id\":\"1371\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1500\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1172\"},\"glyph\":{\"id\":\"1173\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1175\"},\"nonselection_glyph\":{\"id\":\"1174\"},\"view\":{\"id\":\"1177\"}},\"id\":\"1176\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1374\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1376\"},\"nonselection_glyph\":{\"id\":\"1375\"},\"view\":{\"id\":\"1378\"}},\"id\":\"1377\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"1518\"},\"selection_policy\":{\"id\":\"1517\"}},\"id\":\"1172\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1166\"}},\"id\":\"1171\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-12.0,-11.76,-11.52,-11.28,-11.04,-10.8,-10.56,-10.32,-10.08,-9.84,-9.6,-9.36,-9.120000000000001,-8.879999999999999,-8.64,-8.4,-8.16,-7.92,-7.68,-7.44,-7.2,-6.96,-6.720000000000001,-6.48,-6.24,-6.0,-5.76,-5.5200000000000005,-5.28,-5.04,-4.800000000000001,-4.5600000000000005,-4.32,-4.08,-3.84,-3.5999999999999996,-3.3599999999999994,-3.120000000000001,-2.880000000000001,-2.6400000000000006,-2.4000000000000004,-2.16,-1.92,-1.6799999999999997,-1.4400000000000013,-1.200000000000001,-0.9600000000000009,-0.7200000000000006,-0.4800000000000004,-0.2400000000000002,0.0,0.2400000000000002,0.4800000000000004,0.7199999999999989,0.9599999999999991,1.1999999999999993,1.4399999999999995,1.6799999999999997,1.92,2.16,2.3999999999999986,2.639999999999999,2.879999999999999,3.119999999999999,3.3599999999999994,3.5999999999999996,3.84,4.079999999999998,4.32,4.559999999999999,4.800000000000001,5.039999999999999,5.280000000000001,5.52,5.759999999999998,6.0,6.239999999999998,6.48,6.719999999999999,6.960000000000001,7.199999999999999,7.439999999999998,7.68,7.919999999999998,8.16,8.399999999999999,8.64,8.879999999999999,9.119999999999997,9.36,9.599999999999998,9.84,10.079999999999998,10.32,10.559999999999999,10.8,11.04,11.279999999999998,11.52,11.759999999999998,12.0,0]},\"selected\":{\"id\":\"1528\"},\"selection_policy\":{\"id\":\"1527\"}},\"id\":\"1367\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1232\",\"type\":\"VeeHead\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1412\",\"type\":\"CDSView\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1173\",\"type\":\"Text\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1385\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1393\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1501\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1172\"}},\"id\":\"1177\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1367\"}},\"id\":\"1372\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1390\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1502\",\"type\":\"Selection\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1392\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1188\",\"type\":\"Circle\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1106\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1104\"},\"source\":{\"id\":\"1006\"},\"support_r\":{\"id\":\"1098\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \"},\"id\":\"1414\",\"type\":\"CustomJS\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1376\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1194\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1196\"},\"nonselection_glyph\":{\"id\":\"1195\"},\"view\":{\"id\":\"1198\"}},\"id\":\"1197\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1374\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1181\"},\"glyph\":{\"id\":\"1182\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1184\"},\"nonselection_glyph\":{\"id\":\"1183\"},\"view\":{\"id\":\"1186\"}},\"id\":\"1185\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1198\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1382\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1200\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1202\"},\"nonselection_glyph\":{\"id\":\"1201\"},\"view\":{\"id\":\"1204\"}},\"id\":\"1203\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1408\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"1520\"},\"selection_policy\":{\"id\":\"1519\"}},\"id\":\"1181\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1182\",\"type\":\"Text\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"div_f\":{\"id\":\"1260\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \"},\"id\":\"1413\",\"type\":\"CustomJS\"},{\"attributes\":{\"source\":{\"id\":\"1181\"}},\"id\":\"1186\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1378\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1194\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1381\"},\"glyph\":{\"id\":\"1382\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1384\"},\"nonselection_glyph\":{\"id\":\"1383\"},\"view\":{\"id\":\"1386\"}},\"id\":\"1385\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1229\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1446\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1230\",\"type\":\"Arrow\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1371\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1379\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1388\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1390\"},\"nonselection_glyph\":{\"id\":\"1389\"},\"view\":{\"id\":\"1392\"}},\"id\":\"1391\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1229\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1188\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1190\"},\"nonselection_glyph\":{\"id\":\"1189\"},\"view\":{\"id\":\"1192\"}},\"id\":\"1191\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1235\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-0.0,-0.7128,-1.4112,-2.0952,-2.7647999999999997,-3.42,-4.0607999999999995,-4.6872,-5.299199999999999,-5.896800000000001,-6.48,-7.048799999999999,-7.6032,-8.1432,-8.6688,-9.179999999999998,-9.6768,-10.1592,-10.6272,-11.0808,-11.52,-11.9448,-12.355199999999998,-12.751199999999999,-13.132800000000001,-13.5,-13.852799999999998,-14.191199999999998,-14.5152,-14.8248,-15.12,-15.4008,-15.6672,-15.919199999999998,-16.1568,-16.38,-16.5888,-16.7832,-16.9632,-17.1288,-17.28,-17.4168,-17.5392,-17.6472,-17.7408,-17.82,-17.8848,-17.9352,-17.9712,-17.9928,-18.0,-17.9928,-17.9712,-17.935200000000002,-17.8848,-17.82,-17.7408,-17.6472,-17.5392,-17.4168,-17.28,-17.128800000000002,-16.9632,-16.7832,-16.5888,-16.38,-16.1568,-15.919200000000002,-15.6672,-15.400800000000002,-15.12,-14.824800000000002,-14.515199999999998,-14.1912,-13.852800000000002,-13.5,-13.132800000000003,-12.751199999999999,-12.355200000000002,-11.944799999999999,-11.520000000000001,-11.080800000000004,-10.6272,-10.159200000000004,-9.6768,-9.180000000000003,-8.6688,-8.143200000000002,-7.6032000000000055,-7.048800000000002,-6.480000000000005,-5.896800000000001,-5.299200000000004,-4.687199999999999,-4.060800000000003,-3.419999999999998,-2.7648000000000024,-2.095200000000007,-1.4112000000000011,-0.7128000000000059,0.0,0]},\"selected\":{\"id\":\"1531\"},\"selection_policy\":{\"id\":\"1530\"}},\"id\":\"1381\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1389\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1192\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1388\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1381\"}},\"id\":\"1386\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1241\"},\"glyph\":{\"id\":\"1243\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1245\"},\"nonselection_glyph\":{\"id\":\"1244\"},\"view\":{\"id\":\"1247\"}},\"id\":\"1246\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1235\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1448\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1236\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1383\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Circle\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1200\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1511\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1396\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1398\"},\"nonselection_glyph\":{\"id\":\"1397\"},\"view\":{\"id\":\"1400\"}},\"id\":\"1399\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"width\":10},\"id\":\"1419\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1204\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1205\"},\"glyph\":{\"id\":\"1206\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1208\"},\"nonselection_glyph\":{\"id\":\"1207\"},\"view\":{\"id\":\"1210\"}},\"id\":\"1209\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1512\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1206\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1396\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1205\"}},\"id\":\"1210\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1402\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1212\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1214\"},\"nonselection_glyph\":{\"id\":\"1213\"},\"view\":{\"id\":\"1216\"}},\"id\":\"1215\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1400\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1251\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1402\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1404\"},\"nonselection_glyph\":{\"id\":\"1403\"},\"view\":{\"id\":\"1406\"}},\"id\":\"1405\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1483\"},\"selection_policy\":{\"id\":\"1482\"}},\"id\":\"1205\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1216\",\"type\":\"CDSView\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1385\"},\"V_diag\":{\"id\":\"1371\"},\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"div_f\":{\"id\":\"1260\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"s_q\":{\"id\":\"1005\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1418\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1212\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"1489\"},\"selection_policy\":{\"id\":\"1488\"}},\"id\":\"1248\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1465\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1218\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1249\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1219\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1406\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1466\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1241\"}},\"id\":\"1247\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1468\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1513\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1218\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1220\"},\"nonselection_glyph\":{\"id\":\"1219\"},\"view\":{\"id\":\"1222\"}},\"id\":\"1221\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1222\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1226\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1469\",\"type\":\"AllLabels\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1417\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1223\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1444\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1224\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1514\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1220\",\"type\":\"Patch\"},{\"attributes\":{\"children\":[{\"id\":\"1420\"},{\"id\":\"1107\"},{\"id\":\"1108\"},{\"id\":\"1106\"},{\"id\":\"1421\"},{\"id\":\"1255\"},{\"id\":\"1254\"},{\"id\":\"1256\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"}]},\"id\":\"1422\",\"type\":\"Column\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1223\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Line\"},{\"attributes\":{\"height\":10},\"id\":\"1420\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"height\":10},\"id\":\"1421\",\"type\":\"Spacer\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1413\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1255\",\"type\":\"Slider\"},{\"attributes\":{\"children\":[{\"id\":\"1040\"},{\"id\":\"1419\"},{\"id\":\"1422\"}]},\"id\":\"1423\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1226\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1445\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1227\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1531\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1243\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1250\",\"type\":\"Scatter\"},{\"attributes\":{\"children\":[{\"id\":\"1427\"}]},\"id\":\"1428\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1248\"},\"glyph\":{\"id\":\"1249\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1251\"},\"nonselection_glyph\":{\"id\":\"1250\"},\"view\":{\"id\":\"1253\"}},\"id\":\"1252\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"1127\"},{\"id\":\"1423\"}]},\"id\":\"1424\",\"type\":\"Column\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1256\",\"type\":\"Div\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1418\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1254\",\"type\":\"Slider\"},{\"attributes\":{\"height\":10},\"id\":\"1425\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1248\"}},\"id\":\"1253\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"1007\"},{\"id\":\"1425\"},{\"id\":\"1261\"},{\"id\":\"1293\"},{\"id\":\"1323\"},{\"id\":\"1260\"}]},\"id\":\"1426\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"1424\"},{\"id\":\"1426\"}]},\"id\":\"1427\",\"type\":\"Row\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1417\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1257\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{},\"id\":\"1267\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1515\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1258\",\"type\":\"Div\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \"},\"id\":\"1260\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1516\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1360\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1362\"},\"nonselection_glyph\":{\"id\":\"1361\"},\"view\":{\"id\":\"1364\"}},\"id\":\"1363\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1416\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1259\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1271\"}],\"center\":[{\"id\":\"1274\"},{\"id\":\"1278\"}],\"height\":160,\"left\":[{\"id\":\"1275\"}],\"renderers\":[{\"id\":\"1357\"},{\"id\":\"1363\"},{\"id\":\"1399\"}],\"title\":{\"id\":\"1262\"},\"toolbar\":{\"id\":\"1286\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1267\"},\"y_range\":{\"id\":\"1265\"},\"y_scale\":{\"id\":\"1269\"}},\"id\":\"1261\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"children\":[{\"id\":\"1428\"}]},\"id\":\"1429\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1265\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1301\"}],\"center\":[{\"id\":\"1304\"},{\"id\":\"1308\"}],\"height\":160,\"left\":[{\"id\":\"1305\"}],\"renderers\":[{\"id\":\"1371\"},{\"id\":\"1377\"},{\"id\":\"1405\"}],\"title\":{\"id\":\"1434\"},\"toolbar\":{\"id\":\"1316\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1297\"},\"y_range\":{\"id\":\"1295\"},\"y_scale\":{\"id\":\"1299\"}},\"id\":\"1293\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"below\":[{\"id\":\"1331\"}],\"center\":[{\"id\":\"1334\"},{\"id\":\"1338\"}],\"height\":200,\"left\":[{\"id\":\"1335\"}],\"renderers\":[{\"id\":\"1385\"},{\"id\":\"1391\"},{\"id\":\"1411\"}],\"title\":{\"id\":\"1436\"},\"toolbar\":{\"id\":\"1346\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1327\"},\"y_range\":{\"id\":\"1325\"},\"y_scale\":{\"id\":\"1329\"}},\"id\":\"1323\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"1271\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1274\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1262\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1269\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1462\"},\"group\":null,\"major_label_policy\":{\"id\":\"1463\"},\"ticker\":{\"id\":\"1272\"},\"visible\":false},\"id\":\"1271\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1272\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1471\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1459\"},\"group\":null,\"major_label_policy\":{\"id\":\"1460\"},\"ticker\":{\"id\":\"1276\"}},\"id\":\"1275\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1275\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1278\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1472\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1276\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1517\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1474\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1518\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1285\"}},\"id\":\"1281\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1475\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1282\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1285\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1279\"},{\"id\":\"1280\"},{\"id\":\"1281\"},{\"id\":\"1282\"},{\"id\":\"1283\"},{\"id\":\"1284\"},{\"id\":\"1365\"}]},\"id\":\"1286\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1476\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1477\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1542\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1543\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1544\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1545\",\"type\":\"Selection\"}],\"root_ids\":[\"1430\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
+ " const render_items = [{\"docid\":\"fc24d7bf-4243-4c13-a069-6fd9b7de0638\",\"root_ids\":[\"1430\"],\"roots\":{\"1430\":\"d6b57e37-d080-48b1-abe8-d03e60a7816c\"}}];\n",
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
+ "\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " let attempts = 0;\n",
+ " const timer = setInterval(function(root) {\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " clearInterval(timer);\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " attempts++;\n",
+ " if (attempts > 100) {\n",
+ " clearInterval(timer);\n",
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
+ " }\n",
+ " }\n",
+ " }, 10, root)\n",
+ " }\n",
+ "})(window);"
+ ],
+ "application/vnd.bokehjs_exec.v0+json": ""
+ },
+ "metadata": {
+ "application/vnd.bokehjs_exec.v0+json": {
+ "id": "1430"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hidden_code_nb_diagrams.main_code(L, h, b, A, Iy, Iz, q, P, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Legend**\n",
+ "\n",
+ "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
+ "\n",
+ "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
+ "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
+ "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
+ "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
+ "* **Textbox \"Geometrical and mechanical parameters:** small summary with the value of h, b, L, A (area), Iy (inertia with respect to the strong axis) and Iz (inertia with respect to the weak axis).\n",
+ "* **Textbox \"Forces and Moments:** small summary with the value of the magnitude of the reaction forces and the internal forces at the position x.\n",
+ "* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
+ "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
+ "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
+ "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
+ "* **Button of the force P:** apply or remove the external force P.\n",
+ "* **Figures \"N V M Diagrams\":** plots that show the axial force N, shear force V and bending moment M diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
+ "\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
+ "### Recommendations\n",
+ "\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
+ "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Simple Beam DEMOs/04-sb_stress.ipynb b/Simple Beam DEMOs/04-sb_stress.ipynb
new file mode 100644
index 0000000..03d61f0
--- /dev/null
+++ b/Simple Beam DEMOs/04-sb_stress.ipynb
@@ -0,0 +1,608 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# **Simple beam - Stress and Strain**\n",
+ "In this fourth notebook, the stresses and strains inside the element are studied. For any civil engineer, the deep understanding of the behaviour of stress and strain inside an element is essential. For this reason, after completing this DEMO, you'll be equipped with the preliminary and fundamental knowledge to be able to tackle the next important concepts and theories. \n",
+ "The system, geometry and actions are the same presented in the previous DEMO \"03-sb_diagrams\"."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Goals**\n",
+ "\n",
+ "* Describe the differences between the various strains and stresses\n",
+ "* Explain the relations between them\n",
+ "* Identify which parameters influence their behaviour"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Tasks and exercises**\n",
+ "\n",
+ "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
+ "\n",
+ "1. What are the differences between the centroid and the neutral axis? Is there a way to superimpose them in this studied case?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " The centroid is dependent only on the geometry of the section; on the other hand, the neutral axis is function of the centroid and the internal forces.\n",
+ " \n",
+ " Yes, if the external horizontal force P is removed and the axial force N becomes zero, the neutral axis is in the same position of the centroid.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "2. Does the cross-section influence the maximal stresses and strains? By changing the length of the beam to 8 m, do you ascertain any changes?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " Yes; the internal forces do not change, but the resistance of the section (area and inertia) is directly influenced by h and b. Note that increasing h has a bigger impact only on the bending strain and bending stress (power of 2); on the other hand b and h have the same influence, because the axial stress and strain is dependent only on the area: $\\sigma_N = N/A$ and $\\epsilon_N = \\sigma_N/E$ and the shear stress is also only dependent on the area: $\\tau_{max} = \\frac{V S}{I_y b} = \\frac{V\\frac{bh^2}{8}}{\\frac{bh^3}{12}b} = \\frac{3V}{2bh} = \\frac{3V}{2A}$.\n",
+ " \n",
+ " Yes; the parameters responsible for the resistance of the section (area and inertia) do not change, but the amplitude of the shear and the bending moment increase, thus the stress and strain inside the section increase, except for the axial strain and stress, that are independent of the length of the beam and they remain the same.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "3. Consider the starting configuration; assume that the beam is composed of a material with a yield strength of 27.2 MPa.\n",
+ " 1. Will the beam remain elastic everywhere?\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " No, at the position where the bending moment is maximum, the stress in the top compressed fiber is equal to 27.5 MPa, that is bigger than 27.2 MPa.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 2. Where will it yield?\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " At the center of the beam, where the bending moment is the highest.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 3. If you can change only one parameter to assure that the beam remains always elastic, what will you do?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " The possible solution are:\n",
+ " <ul>\n",
+ " <li>Increase h</li>\n",
+ " <li>Increase b</li>\n",
+ " <li>Decrease L</li>\n",
+ " <li>Remove (or decrease) the external horizontal force P</li>\n",
+ " <li>Decrease the uniform load q</li>\n",
+ " </ul>\n",
+ " </details>\n",
+ "\n",
+ " <br>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Build the interactive visualisation tool**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " <div class=\"bk-root\">\n",
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
+ " </div>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ " const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " \n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
+ " \"<p>\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"</p>\\n\"+\n",
+ " \"<ul>\\n\"+\n",
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
+ " \"</ul>\\n\"+\n",
+ " \"<code>\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"</code>\\n\"+\n",
+ " \"</div>\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"1002\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " \n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ " \n",
+ "\n",
+ " const inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " \n",
+ " \n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " \n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " \n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ " if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ "\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Import the packages needed\n",
+ "import sys\n",
+ "sys.path.append('../HiddenCode')\n",
+ "import hidden_code_nb_stress\n",
+ "import math\n",
+ "import numpy as np\n",
+ "from cienpy import simplebeam as sb\n",
+ "from cienpy import rectangular_section as beam_section\n",
+ "from cienpy import stress_strain_elastic as stst"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Define the geometry, the external actions, the mechanical property and compute the initial configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Choose the dimensions\n",
+ "L = 6 # [m]\n",
+ "h = 200 # [mm]\n",
+ "b = 100 # [mm]\n",
+ "q = 4; # [kN/m]\n",
+ "P = 10; # [kN]\n",
+ "\n",
+ "# Choose the material parameters\n",
+ "E = 200e3 # [MPa]\n",
+ "\n",
+ "# compute the internal forces (at x=L)\n",
+ "discr_NVM = 101\n",
+ "x_discr = np.linspace(0, L, discr_NVM)\n",
+ "N_discr = sb.compute_N(x_discr, P)\n",
+ "V_discr = sb.compute_V(x_discr, q, L)\n",
+ "M_discr = sb.compute_M(x_discr, q, L)\n",
+ "N = N_discr[-1]\n",
+ "V = V_discr[-1]\n",
+ "M = M_discr[-1]\n",
+ "\n",
+ "# compute the parameters\n",
+ "A = beam_section.compute_area(b, h) # [mm2]\n",
+ "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
+ "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
+ "yG = beam_section.compute_centroid_y(h)\n",
+ "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
+ "\n",
+ "# compute the reactions\n",
+ "Rx = sb.compute_Rx(P)\n",
+ "Ry_l = sb.compute_Ry_l(q, L)\n",
+ "Ry_r = sb.compute_Ry_r(q, L)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the complex code to generate the **interactive visualisation tool**:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " <div class=\"bk-root\" id=\"84fa22ec-cc0c-4de4-9dfa-2f183159d7e8\" data-root-id=\"1924\"></div>\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function embed_document(root) {\n",
+ " \n",
+ " const docs_json = {\"8cb004cd-7d18-4bc4-989a-350d46a80772\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1923\"}]},\"id\":\"1924\",\"type\":\"Column\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2005\"},\"selection_policy\":{\"id\":\"2004\"}},\"id\":\"1943\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1614\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2124\"},\"selection_policy\":{\"id\":\"2123\"}},\"id\":\"1640\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1619\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1618\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1621\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1609\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1640\"},\"glyph\":{\"id\":\"1641\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1643\"},\"nonselection_glyph\":{\"id\":\"1642\"},\"view\":{\"id\":\"1645\"}},\"id\":\"1644\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1627\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1616\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2088\"},\"group\":null,\"major_label_policy\":{\"id\":\"2089\"},\"ticker\":{\"id\":\"1619\"}},\"id\":\"1618\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2085\"},\"group\":null,\"major_label_policy\":{\"id\":\"2086\"},\"ticker\":{\"id\":\"1623\"}},\"id\":\"1622\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1622\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1625\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1631\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1626\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1632\"}},\"id\":\"1628\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1629\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1630\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1632\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2072\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1644\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1658\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2073\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1680\"},\"glyph\":{\"id\":\"1681\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1683\"},\"nonselection_glyph\":{\"id\":\"1682\"},\"view\":{\"id\":\"1685\"}},\"id\":\"1684\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2075\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2076\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1682\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1979\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1980\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1647\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2149\"},\"selection_policy\":{\"id\":\"2148\"}},\"id\":\"2077\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1640\"}},\"id\":\"1645\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1641\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1946\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1947\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1643\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1981\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1949\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"tools\":[{\"id\":\"1626\"},{\"id\":\"1627\"},{\"id\":\"1628\"},{\"id\":\"1629\"},{\"id\":\"1630\"},{\"id\":\"1631\"},{\"id\":\"1738\"}]},\"id\":\"1633\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1982\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1642\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1950\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1648\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2151\"},\"selection_policy\":{\"id\":\"2150\"}},\"id\":\"1680\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1654\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1687\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1689\"},\"nonselection_glyph\":{\"id\":\"1688\"},\"view\":{\"id\":\"1691\"}},\"id\":\"1690\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1649\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1653\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1651\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1652\"}},\"id\":\"1657\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2026\"},\"selection_policy\":{\"id\":\"2025\"}},\"id\":\"1951\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1660\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2126\"},\"selection_policy\":{\"id\":\"2125\"}},\"id\":\"1652\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1652\"},\"glyph\":{\"id\":\"1653\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1655\"},\"nonselection_glyph\":{\"id\":\"1654\"},\"view\":{\"id\":\"1657\"}},\"id\":\"1656\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1489\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1492\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2143\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1597\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2063\"},\"group\":null,\"major_label_policy\":{\"id\":\"2064\"},\"ticker\":{\"id\":\"1490\"}},\"id\":\"1489\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2144\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1490\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2060\"},\"group\":null,\"major_label_policy\":{\"id\":\"2061\"},\"ticker\":{\"id\":\"1494\"},\"visible\":false},\"id\":\"1493\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2018\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1065\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2019\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1600\"}},\"id\":\"1596\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1594\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1591\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2145\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1519\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2146\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1517\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2020\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1766\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1782\",\"type\":\"HoverTool\"},{\"attributes\":{\"below\":[{\"id\":\"1554\"}],\"center\":[{\"id\":\"1557\"},{\"id\":\"1561\"}],\"height\":200,\"left\":[{\"id\":\"1558\"}],\"renderers\":[{\"id\":\"1684\"},{\"id\":\"1690\"},{\"id\":\"1696\"}],\"title\":{\"id\":\"1544\"},\"toolbar\":{\"id\":\"1569\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1546\"},\"x_scale\":{\"id\":\"1550\"},\"y_range\":{\"id\":\"1548\"},\"y_scale\":{\"id\":\"1552\"}},\"id\":\"1543\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2021\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1514\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1512\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1521\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1524\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2057\"},\"group\":null,\"major_label_policy\":{\"id\":\"2058\"},\"ticker\":{\"id\":\"1780\"}},\"id\":\"1521\",\"type\":\"LinearAxis\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2055\"},\"group\":null,\"major_label_policy\":{\"id\":\"2056\"},\"ticker\":{\"id\":\"1526\"},\"visible\":false},\"id\":\"1525\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1525\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1528\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1052\"}],\"center\":[{\"id\":\"1055\"},{\"id\":\"1059\"},{\"id\":\"1111\"},{\"id\":\"1120\"}],\"left\":[{\"id\":\"1056\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1078\"},{\"id\":\"1105\"},{\"id\":\"1117\"},{\"id\":\"1126\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1067\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1048\"},\"y_range\":{\"id\":\"1046\"},\"y_scale\":{\"id\":\"1050\"}},\"id\":\"1041\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2023\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2022\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1534\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1529\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1535\"}},\"id\":\"1531\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1532\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2148\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1535\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2149\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1708\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2150\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"1988\"},\"selection_policy\":{\"id\":\"1987\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1611\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2151\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1529\"},{\"id\":\"1530\"},{\"id\":\"1531\"},{\"id\":\"1532\"},{\"id\":\"1533\"},{\"id\":\"1534\"},{\"id\":\"1782\"}]},\"id\":\"1536\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2066\"},\"group\":null,\"major_label_policy\":{\"id\":\"2067\"},\"ticker\":{\"id\":\"1591\"}},\"id\":\"1590\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"1982\"},\"selection_policy\":{\"id\":\"1981\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1590\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1593\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1087\"},{\"id\":\"1093\"},{\"id\":\"1099\"},{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1186\"},{\"id\":\"1192\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1595\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2013\"},\"selection_policy\":{\"id\":\"2012\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1984\"},\"selection_policy\":{\"id\":\"1983\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2119\"},\"selection_policy\":{\"id\":\"2118\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1497\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2126\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2134\"},\"selection_policy\":{\"id\":\"2133\"}},\"id\":\"1660\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1500\",\"type\":\"SaveTool\"},{\"attributes\":{\"children\":[{\"id\":\"1922\"}]},\"id\":\"1923\",\"type\":\"Row\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1664\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1678\",\"type\":\"HoverTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1501\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1660\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1503\"}},\"id\":\"1499\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1991\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1386\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1394\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1502\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1992\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1691\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1695\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1701\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2028\"},\"selection_policy\":{\"id\":\"2027\"}},\"id\":\"1354\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2136\"},\"selection_policy\":{\"id\":\"2135\"}},\"id\":\"1672\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1672\"},\"glyph\":{\"id\":\"1673\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1675\"},\"nonselection_glyph\":{\"id\":\"1674\"},\"view\":{\"id\":\"1677\"}},\"id\":\"1676\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1744\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1760\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"1672\"}},\"id\":\"1677\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1674\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1328\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1521\"}],\"center\":[{\"id\":\"1524\"},{\"id\":\"1528\"}],\"height\":200,\"left\":[{\"id\":\"1525\"}],\"renderers\":[{\"id\":\"1766\"},{\"id\":\"1772\"},{\"id\":\"1778\"}],\"title\":{\"id\":\"1512\"},\"toolbar\":{\"id\":\"1536\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1514\"},\"x_scale\":{\"id\":\"1517\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1519\"}},\"id\":\"1511\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1968\"},\"group\":null,\"major_label_policy\":{\"id\":\"1969\"},\"ticker\":{\"id\":\"1333\"}},\"id\":\"1332\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1453\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1684\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1698\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1689\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1330\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1457\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1460\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1688\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1333\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1466\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2153\"},\"selection_policy\":{\"id\":\"2152\"}},\"id\":\"1692\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1448\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1332\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1335\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1692\"},\"glyph\":{\"id\":\"1693\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1695\"},\"nonselection_glyph\":{\"id\":\"1694\"},\"view\":{\"id\":\"1697\"}},\"id\":\"1696\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1700\"},\"glyph\":{\"id\":\"1701\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1703\"},\"nonselection_glyph\":{\"id\":\"1702\"},\"view\":{\"id\":\"1705\"}},\"id\":\"1704\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2046\"},\"group\":null,\"major_label_policy\":{\"id\":\"2047\"},\"ticker\":{\"id\":\"1758\"}},\"id\":\"1457\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1694\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1965\"},\"group\":null,\"major_label_policy\":{\"id\":\"1966\"},\"ticker\":{\"id\":\"1337\"}},\"id\":\"1336\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1707\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1709\"},\"nonselection_glyph\":{\"id\":\"1708\"},\"view\":{\"id\":\"1711\"}},\"id\":\"1710\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1336\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1339\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2044\"},\"group\":null,\"major_label_policy\":{\"id\":\"2045\"},\"ticker\":{\"id\":\"1462\"},\"visible\":false},\"id\":\"1461\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1692\"}},\"id\":\"1697\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1461\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1464\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2157\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1933\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1345\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2139\"},\"selection_policy\":{\"id\":\"2138\"}},\"id\":\"1700\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2129\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1465\"},{\"id\":\"1466\"},{\"id\":\"1467\"},{\"id\":\"1468\"},{\"id\":\"1469\"},{\"id\":\"1470\"},{\"id\":\"1760\"}]},\"id\":\"1472\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1704\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1718\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1934\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1340\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1470\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1346\"}},\"id\":\"1342\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1465\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1700\"}},\"id\":\"1705\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"SaveTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1471\"}},\"id\":\"1467\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1702\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1936\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1468\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1469\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1707\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1439\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1937\",\"type\":\"AllLabels\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1346\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1780\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"1340\"},{\"id\":\"1341\"},{\"id\":\"1342\"},{\"id\":\"1343\"},{\"id\":\"1344\"},{\"id\":\"1345\"},{\"id\":\"1394\"}]},\"id\":\"1347\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1471\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1357\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1482\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1711\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1713\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2141\"},\"selection_policy\":{\"id\":\"2140\"}},\"id\":\"1712\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"tools\":[{\"id\":\"1433\"},{\"id\":\"1434\"},{\"id\":\"1435\"},{\"id\":\"1436\"},{\"id\":\"1437\"},{\"id\":\"1438\"},{\"id\":\"1658\"}]},\"id\":\"1440\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1928\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"1586\"}],\"center\":[{\"id\":\"1589\"},{\"id\":\"1593\"}],\"height\":200,\"renderers\":[{\"id\":\"1704\"},{\"id\":\"1710\"},{\"id\":\"1716\"}],\"right\":[{\"id\":\"1590\"}],\"title\":{\"id\":\"1577\"},\"toolbar\":{\"id\":\"1601\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1579\"},\"x_scale\":{\"id\":\"1582\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1584\"}},\"id\":\"1576\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1712\"},\"glyph\":{\"id\":\"1713\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1715\"},\"nonselection_glyph\":{\"id\":\"1714\"},\"view\":{\"id\":\"1717\"}},\"id\":\"1716\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1712\"}},\"id\":\"1717\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1995\"},\"selection_policy\":{\"id\":\"1994\"}},\"id\":\"1938\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1714\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1354\"}},\"id\":\"1359\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1994\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2156\"},\"selection_policy\":{\"id\":\"2155\"}},\"id\":\"1720\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1997\"},\"selection_policy\":{\"id\":\"1996\"}},\"id\":\"1939\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1995\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1720\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2090\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1930\",\"type\":\"Title\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1999\"},\"selection_policy\":{\"id\":\"1998\"}},\"id\":\"1940\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1724\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1738\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2091\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1493\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1496\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1996\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1720\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2130\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2001\"},\"selection_policy\":{\"id\":\"2000\"}},\"id\":\"1941\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1774\"},\"glyph\":{\"id\":\"1775\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1777\"},\"nonselection_glyph\":{\"id\":\"1776\"},\"view\":{\"id\":\"1779\"}},\"id\":\"1778\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1480\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1997\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2131\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1773\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2003\"},\"selection_policy\":{\"id\":\"2002\"}},\"id\":\"1942\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1998\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1734\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1487\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1733\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1354\"},\"glyph\":{\"id\":\"1355\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1357\"},\"nonselection_glyph\":{\"id\":\"1356\"},\"view\":{\"id\":\"1359\"}},\"id\":\"1358\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1732\"},\"glyph\":{\"id\":\"1733\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1735\"},\"nonselection_glyph\":{\"id\":\"1734\"},\"view\":{\"id\":\"1737\"}},\"id\":\"1736\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1999\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2158\"},\"selection_policy\":{\"id\":\"2157\"}},\"id\":\"1732\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1548\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1552\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1618\"}],\"center\":[{\"id\":\"1621\"},{\"id\":\"1625\"}],\"height\":200,\"renderers\":[{\"id\":\"1724\"},{\"id\":\"1730\"},{\"id\":\"1736\"}],\"right\":[{\"id\":\"1622\"}],\"title\":{\"id\":\"1609\"},\"toolbar\":{\"id\":\"1633\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1611\"},\"x_scale\":{\"id\":\"1614\"},\"y_range\":{\"id\":\"1548\"},\"y_scale\":{\"id\":\"1616\"}},\"id\":\"1608\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1546\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1555\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1544\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1554\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1557\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1550\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2082\"},\"group\":null,\"major_label_policy\":{\"id\":\"2083\"},\"ticker\":{\"id\":\"1555\"}},\"id\":\"1554\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1587\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1563\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2138\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2079\"},\"group\":null,\"major_label_policy\":{\"id\":\"2080\"},\"ticker\":{\"id\":\"1559\"},\"visible\":false},\"id\":\"1558\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1558\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1561\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1559\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1562\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1568\"}},\"id\":\"1564\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1565\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1566\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2103\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2104\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1568\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1965\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1647\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1649\"},\"nonselection_glyph\":{\"id\":\"1648\"},\"view\":{\"id\":\"1651\"}},\"id\":\"1650\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2060\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1966\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2061\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1968\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2063\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1969\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1594\"},{\"id\":\"1595\"},{\"id\":\"1596\"},{\"id\":\"1597\"},{\"id\":\"1598\"},{\"id\":\"1599\"},{\"id\":\"1718\"}]},\"id\":\"1601\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2064\",\"type\":\"AllLabels\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1600\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2105\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1599\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2106\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2141\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1586\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1589\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1582\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1579\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2107\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1562\"},{\"id\":\"1563\"},{\"id\":\"1564\"},{\"id\":\"1565\"},{\"id\":\"1566\"},{\"id\":\"1567\"},{\"id\":\"1698\"}]},\"id\":\"1569\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1598\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1577\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2108\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1584\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2069\"},\"group\":null,\"major_label_policy\":{\"id\":\"2070\"},\"ticker\":{\"id\":\"1587\"}},\"id\":\"1586\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2100\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1770\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2066\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1769\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1771\"},\"nonselection_glyph\":{\"id\":\"1770\"},\"view\":{\"id\":\"1773\"}},\"id\":\"1772\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2067\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1683\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2069\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1680\"}},\"id\":\"1685\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2109\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2070\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1983\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2101\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1984\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2102\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2008\"},\"group\":null,\"major_label_policy\":{\"id\":\"2009\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1052\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2030\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2120\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2031\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2121\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1985\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1052\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1055\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1056\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1059\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1986\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2006\"},\"group\":null,\"major_label_policy\":{\"id\":\"2007\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1056\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2049\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1092\",\"type\":\"Patch\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2050\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1089\"}},\"id\":\"1094\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2052\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2012\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2038\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1066\"}},\"id\":\"1062\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2013\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2053\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1086\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1987\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1988\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1122\"}},\"id\":\"1127\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2040\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2014\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2015\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2123\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2124\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1122\"},\"glyph\":{\"id\":\"1123\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1125\"},\"nonselection_glyph\":{\"id\":\"1124\"},\"view\":{\"id\":\"1127\"}},\"id\":\"1126\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1084\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1086\"},\"nonselection_glyph\":{\"id\":\"1085\"},\"view\":{\"id\":\"1088\"}},\"id\":\"1087\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"interval\":50},\"id\":\"1080\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{},\"id\":\"2041\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2055\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2016\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1088\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2056\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1089\"},\"glyph\":{\"id\":\"1090\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1092\"},\"nonselection_glyph\":{\"id\":\"1091\"},\"view\":{\"id\":\"1094\"}},\"id\":\"1093\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2017\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1989\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2057\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1125\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1990\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2033\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2058\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2093\"},\"selection_policy\":{\"id\":\"2092\"}},\"id\":\"1101\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2034\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"2015\"},\"selection_policy\":{\"id\":\"2014\"}},\"id\":\"1089\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"2017\"},\"selection_policy\":{\"id\":\"2016\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2079\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1101\"}},\"id\":\"1106\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2080\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1103\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1749\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1110\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2082\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1104\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1755\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2083\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1101\"},\"glyph\":{\"id\":\"1102\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1104\"},\"nonselection_glyph\":{\"id\":\"1103\"},\"view\":{\"id\":\"1106\"}},\"id\":\"1105\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1900\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"1107\",\"type\":\"Div\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1901\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1109\",\"type\":\"Slider\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1751\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1110\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2010\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1111\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1753\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2095\"},\"selection_policy\":{\"id\":\"2094\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1953\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1119\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1119\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2011\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1120\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1954\",\"type\":\"AllLabels\"},{\"attributes\":{\"below\":[{\"id\":\"1139\"}],\"center\":[{\"id\":\"1142\"},{\"id\":\"1146\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"},{\"id\":\"1237\"},{\"id\":\"1240\"}],\"height\":200,\"left\":[{\"id\":\"1143\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1165\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1222\"},{\"id\":\"1247\"},{\"id\":\"1253\"}],\"title\":{\"id\":\"1129\"},\"toolbar\":{\"id\":\"1154\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1131\"},\"x_scale\":{\"id\":\"1135\"},\"y_range\":{\"id\":\"1133\"},\"y_scale\":{\"id\":\"1137\"}},\"id\":\"1128\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"1980\"},\"selection_policy\":{\"id\":\"1979\"}},\"id\":\"1161\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1956\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1936\"},\"group\":null,\"major_label_policy\":{\"id\":\"1937\"},\"ticker\":{\"id\":\"1140\"},\"visible\":false},\"id\":\"1139\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1957\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1933\"},\"group\":null,\"major_label_policy\":{\"id\":\"1934\"},\"ticker\":{\"id\":\"1144\"},\"visible\":false},\"id\":\"1143\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1139\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1142\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1129\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1143\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1146\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1161\"},\"glyph\":{\"id\":\"1162\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1164\"},\"nonselection_glyph\":{\"id\":\"1163\"},\"view\":{\"id\":\"1166\"}},\"id\":\"1165\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2085\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2086\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1153\"}},\"id\":\"1149\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2088\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1153\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2089\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1959\"},\"group\":null,\"major_label_policy\":{\"id\":\"1960\"},\"ticker\":{\"id\":\"1307\"}},\"id\":\"1306\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1959\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1960\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1962\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"tools\":[{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"},{\"id\":\"1152\"}]},\"id\":\"1154\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1963\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1161\"}},\"id\":\"1166\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1251\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1740\"},\"glyph\":{\"id\":\"1741\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1743\"},\"nonselection_glyph\":{\"id\":\"1742\"},\"view\":{\"id\":\"1745\"}},\"id\":\"1744\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1899\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1256\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1747\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1749\"},\"nonselection_glyph\":{\"id\":\"1748\"},\"view\":{\"id\":\"1751\"}},\"id\":\"1750\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2108\"},\"selection_policy\":{\"id\":\"2107\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1252\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1732\"}},\"id\":\"1737\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1249\"}},\"id\":\"1254\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1904\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1255\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1837\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1249\"},\"glyph\":{\"id\":\"1250\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1252\"},\"nonselection_glyph\":{\"id\":\"1251\"},\"view\":{\"id\":\"1254\"}},\"id\":\"1253\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1743\",\"type\":\"Line\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1257\",\"type\":\"Div\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1903\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1258\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"source\":{\"id\":\"1868\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2117\"},\"selection_policy\":{\"id\":\"2116\"}},\"id\":\"1740\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1302\"}],\"center\":[{\"id\":\"1305\"},{\"id\":\"1309\"}],\"height\":160,\"left\":[{\"id\":\"1306\"}],\"renderers\":[{\"id\":\"1372\"},{\"id\":\"1378\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"1928\"},\"toolbar\":{\"id\":\"1317\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1298\"},\"y_range\":{\"id\":\"1296\"},\"y_scale\":{\"id\":\"1300\"}},\"id\":\"1294\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Scatter\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1758\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1259\",\"type\":\"Div\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Scatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1748\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1261\",\"type\":\"Div\"},{\"attributes\":{\"source\":{\"id\":\"1740\"}},\"id\":\"1745\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2037\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1742\",\"type\":\"Line\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2153\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1268\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2110\"},\"selection_policy\":{\"id\":\"2109\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1902\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1260\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1272\"}],\"center\":[{\"id\":\"1275\"},{\"id\":\"1279\"}],\"height\":160,\"left\":[{\"id\":\"1276\"}],\"renderers\":[{\"id\":\"1358\"},{\"id\":\"1364\"},{\"id\":\"1400\"}],\"title\":{\"id\":\"1263\"},\"toolbar\":{\"id\":\"1287\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1268\"},\"y_range\":{\"id\":\"1266\"},\"y_scale\":{\"id\":\"1270\"}},\"id\":\"1262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1949\"},\"group\":null,\"major_label_policy\":{\"id\":\"1950\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1332\"}],\"center\":[{\"id\":\"1335\"},{\"id\":\"1339\"}],\"height\":200,\"left\":[{\"id\":\"1336\"}],\"renderers\":[{\"id\":\"1386\"},{\"id\":\"1392\"},{\"id\":\"1412\"}],\"title\":{\"id\":\"1930\"},\"toolbar\":{\"id\":\"1347\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1328\"},\"y_range\":{\"id\":\"1326\"},\"y_scale\":{\"id\":\"1330\"}},\"id\":\"1324\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1762\"},\"glyph\":{\"id\":\"1763\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1765\"},\"nonselection_glyph\":{\"id\":\"1764\"},\"view\":{\"id\":\"1767\"}},\"id\":\"1766\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1361\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1363\"},\"nonselection_glyph\":{\"id\":\"1362\"},\"view\":{\"id\":\"1365\"}},\"id\":\"1364\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2025\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1946\"},\"group\":null,\"major_label_policy\":{\"id\":\"1947\"},\"ticker\":{\"id\":\"1024\"},\"visible\":false},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1266\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1272\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1275\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1263\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1822\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2026\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1270\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1824\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2112\"},\"selection_policy\":{\"id\":\"2111\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1281\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2075\"},\"group\":null,\"major_label_policy\":{\"id\":\"2076\"},\"ticker\":{\"id\":\"1829\"},\"visible\":false},\"id\":\"1828\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2027\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1956\"},\"group\":null,\"major_label_policy\":{\"id\":\"1957\"},\"ticker\":{\"id\":\"1273\"},\"visible\":false},\"id\":\"1272\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2072\"},\"group\":null,\"major_label_policy\":{\"id\":\"2073\"},\"ticker\":{\"id\":\"1833\"},\"visible\":false},\"id\":\"1832\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1752\"},\"glyph\":{\"id\":\"1753\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1755\"},\"nonselection_glyph\":{\"id\":\"1754\"},\"view\":{\"id\":\"1757\"}},\"id\":\"1756\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2121\"},\"selection_policy\":{\"id\":\"2120\"}},\"id\":\"1752\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1273\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1893\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2028\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1828\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1831\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1754\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1953\"},\"group\":null,\"major_label_policy\":{\"id\":\"1954\"},\"ticker\":{\"id\":\"1277\"}},\"id\":\"1276\",\"type\":\"LinearAxis\"},{\"attributes\":{\"below\":[{\"id\":\"1795\"}],\"center\":[{\"id\":\"1798\"},{\"id\":\"1802\"},{\"id\":\"1863\"}],\"height\":200,\"left\":[{\"id\":\"1799\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1785\"},\"toolbar\":{\"id\":\"1810\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1787\"},\"x_scale\":{\"id\":\"1791\"},\"y_range\":{\"id\":\"1789\"},\"y_scale\":{\"id\":\"1793\"}},\"id\":\"1784\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1818\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1276\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1279\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1752\"}},\"id\":\"1757\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"2146\"},\"selection_policy\":{\"id\":\"2145\"}},\"id\":\"1893\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1832\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1835\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1893\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1763\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1895\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1829\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1826\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2115\"},\"selection_policy\":{\"id\":\"2114\"}},\"id\":\"2042\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1894\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1285\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2129\"},\"selection_policy\":{\"id\":\"2128\"}},\"id\":\"1762\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1286\"}},\"id\":\"1282\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"V_stress_diag\":{\"id\":\"1684\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \"},\"id\":\"1900\",\"type\":\"CustomJS\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1896\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1777\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1762\"}},\"id\":\"1767\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1841\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1764\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1836\",\"type\":\"PanTool\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"V_stress_diag\":{\"id\":\"1684\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \"},\"id\":\"1899\",\"type\":\"CustomJS\"},{\"attributes\":{\"overlay\":{\"id\":\"1842\"}},\"id\":\"1838\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1286\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1769\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1839\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1840\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1962\"},\"group\":null,\"major_label_policy\":{\"id\":\"1963\"},\"ticker\":{\"id\":\"1303\"},\"visible\":false},\"id\":\"1302\",\"type\":\"LinearAxis\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"V_stress_diag\":{\"id\":\"1684\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_b\":{\"id\":\"1003\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \"},\"id\":\"1901\",\"type\":\"CustomJS\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1774\"}},\"id\":\"1779\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1776\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1358\"},\"N_stress_diag\":{\"id\":\"1644\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_M\":{\"id\":\"1242\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=101) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1902\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1775\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1842\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"SaveTool\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1253\"},\"div_P\":{\"id\":\"1259\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1903\",\"type\":\"CustomJS\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2131\"},\"selection_policy\":{\"id\":\"2130\"}},\"id\":\"1774\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1386\"},\"M_stress_diag\":{\"id\":\"1664\"},\"V_diag\":{\"id\":\"1372\"},\"V_stress_diag\":{\"id\":\"1684\"},\"arr_head\":{\"id\":\"1253\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1904\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2040\"},\"group\":null,\"major_label_policy\":{\"id\":\"2041\"},\"ticker\":{\"id\":\"1796\"},\"visible\":false},\"id\":\"1795\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1862\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2042\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1863\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2155\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"width\":10},\"id\":\"1905\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1314\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1791\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1789\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1856\"}},\"id\":\"1861\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2156\",\"type\":\"Selection\"},{\"attributes\":{\"height\":10},\"id\":\"1908\",\"type\":\"Spacer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2037\"},\"group\":null,\"major_label_policy\":{\"id\":\"2038\"},\"ticker\":{\"id\":\"1800\"},\"visible\":false},\"id\":\"1799\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1316\"}},\"id\":\"1312\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1858\",\"type\":\"Line\"},{\"attributes\":{\"height\":10},\"id\":\"1906\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1804\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"children\":[{\"id\":\"1107\"},{\"id\":\"1261\"}]},\"id\":\"1907\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1795\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1798\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1302\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1305\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1785\",\"type\":\"Title\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1862\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2097\"},\"selection_policy\":{\"id\":\"2096\"}},\"id\":\"1122\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1796\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1859\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1799\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1802\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"1041\"},{\"id\":\"1905\"},{\"id\":\"1909\"}]},\"id\":\"1910\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1793\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1857\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1906\"},{\"id\":\"1108\"},{\"id\":\"1109\"},{\"id\":\"1907\"},{\"id\":\"1908\"},{\"id\":\"1256\"},{\"id\":\"1255\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"},{\"id\":\"1260\"}]},\"id\":\"1909\",\"type\":\"Column\"},{\"attributes\":{\"below\":[{\"id\":\"1828\"}],\"center\":[{\"id\":\"1831\"},{\"id\":\"1835\"},{\"id\":\"1866\"}],\"height\":200,\"left\":[{\"id\":\"1832\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1860\"},{\"id\":\"1897\"}],\"title\":{\"id\":\"1818\"},\"toolbar\":{\"id\":\"1843\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1820\"},\"x_scale\":{\"id\":\"1824\"},\"y_range\":{\"id\":\"1822\"},\"y_scale\":{\"id\":\"1826\"}},\"id\":\"1817\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1311\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"BasicTicker\"},{\"attributes\":{\"width\":200},\"id\":\"1916\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{\"children\":[{\"id\":\"1128\"},{\"id\":\"1910\"}]},\"id\":\"1911\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2044\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1296\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1808\",\"type\":\"HelpTool\"},{\"attributes\":{\"height\":10},\"id\":\"1912\",\"type\":\"Spacer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1856\"},\"glyph\":{\"id\":\"1857\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1859\"},\"nonselection_glyph\":{\"id\":\"1858\"},\"view\":{\"id\":\"1861\"}},\"id\":\"1860\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{\"children\":[{\"id\":\"1911\"},{\"id\":\"1913\"}]},\"id\":\"1914\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1803\",\"type\":\"PanTool\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"1912\"},{\"id\":\"1262\"},{\"id\":\"1294\"},{\"id\":\"1324\"}]},\"id\":\"1913\",\"type\":\"Column\"},{\"attributes\":{\"overlay\":{\"id\":\"1809\"}},\"id\":\"1805\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1806\",\"type\":\"SaveTool\"},{\"attributes\":{\"width\":200},\"id\":\"1917\",\"type\":\"Spacer\"},{\"attributes\":{\"tools\":[{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"},{\"id\":\"1065\"}]},\"id\":\"1067\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"LinearScale\"},{\"attributes\":{\"width\":200},\"id\":\"1918\",\"type\":\"Spacer\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1807\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2046\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"1817\"},{\"id\":\"1916\"},{\"id\":\"1543\"},{\"id\":\"1917\"},{\"id\":\"1918\"},{\"id\":\"1608\"}]},\"id\":\"1919\",\"type\":\"Row\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1809\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1280\"},{\"id\":\"1281\"},{\"id\":\"1282\"},{\"id\":\"1283\"},{\"id\":\"1284\"},{\"id\":\"1285\"},{\"id\":\"1366\"}]},\"id\":\"1287\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2047\",\"type\":\"AllLabels\"},{\"attributes\":{\"children\":[{\"id\":\"1784\"},{\"id\":\"1447\"},{\"id\":\"1414\"},{\"id\":\"1511\"},{\"id\":\"1479\"},{\"id\":\"1576\"}]},\"id\":\"1915\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1300\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"1803\"},{\"id\":\"1804\"},{\"id\":\"1805\"},{\"id\":\"1806\"},{\"id\":\"1807\"},{\"id\":\"1808\"}]},\"id\":\"1810\",\"type\":\"Toolbar\"},{\"attributes\":{\"children\":[{\"id\":\"1914\"},{\"id\":\"1921\"}]},\"id\":\"1922\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2104\"},\"selection_policy\":{\"id\":\"2103\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2091\"},\"selection_policy\":{\"id\":\"2090\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1066\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1315\"},{\"id\":\"1380\"}]},\"id\":\"1317\",\"type\":\"Toolbar\"},{\"attributes\":{\"tools\":[{\"id\":\"1836\"},{\"id\":\"1837\"},{\"id\":\"1838\"},{\"id\":\"1839\"},{\"id\":\"1840\"},{\"id\":\"1841\"}]},\"id\":\"1843\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1865\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2077\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1866\",\"type\":\"Arrow\"},{\"attributes\":{\"children\":[{\"id\":\"1915\"},{\"id\":\"1919\"}]},\"id\":\"1920\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1315\",\"type\":\"HelpTool\"},{\"attributes\":{\"children\":[{\"id\":\"1920\"}]},\"id\":\"1921\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1326\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1868\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1316\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2144\"},\"selection_policy\":{\"id\":\"2143\"}},\"id\":\"1856\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2106\"},\"selection_policy\":{\"id\":\"2105\"}},\"id\":\"1868\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1865\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2158\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2110\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2000\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2092\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1951\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1358\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1366\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1368\"},\"glyph\":{\"id\":\"1369\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1371\"},\"nonselection_glyph\":{\"id\":\"1370\"},\"view\":{\"id\":\"1373\"}},\"id\":\"1372\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2001\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"2019\"},\"selection_policy\":{\"id\":\"2018\"}},\"id\":\"1167\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2093\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1167\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1365\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2002\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Rect\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1371\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1375\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1377\"},\"nonselection_glyph\":{\"id\":\"1376\"},\"view\":{\"id\":\"1379\"}},\"id\":\"1378\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1167\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2003\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"2021\"},\"selection_policy\":{\"id\":\"2020\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-12.0,-11.76,-11.52,-11.28,-11.04,-10.8,-10.56,-10.32,-10.08,-9.84,-9.6,-9.36,-9.120000000000001,-8.879999999999999,-8.64,-8.4,-8.16,-7.92,-7.68,-7.44,-7.2,-6.96,-6.720000000000001,-6.48,-6.24,-6.0,-5.76,-5.5200000000000005,-5.28,-5.04,-4.800000000000001,-4.5600000000000005,-4.32,-4.08,-3.84,-3.5999999999999996,-3.3599999999999994,-3.120000000000001,-2.880000000000001,-2.6400000000000006,-2.4000000000000004,-2.16,-1.92,-1.6799999999999997,-1.4400000000000013,-1.200000000000001,-0.9600000000000009,-0.7200000000000006,-0.4800000000000004,-0.2400000000000002,0.0,0.2400000000000002,0.4800000000000004,0.7199999999999989,0.9599999999999991,1.1999999999999993,1.4399999999999995,1.6799999999999997,1.92,2.16,2.3999999999999986,2.639999999999999,2.879999999999999,3.119999999999999,3.3599999999999994,3.5999999999999996,3.84,4.079999999999998,4.32,4.559999999999999,4.800000000000001,5.039999999999999,5.280000000000001,5.52,5.759999999999998,6.0,6.239999999999998,6.48,6.719999999999999,6.960000000000001,7.199999999999999,7.439999999999998,7.68,7.919999999999998,8.16,8.399999999999999,8.64,8.879999999999999,9.119999999999997,9.36,9.599999999999998,9.84,10.079999999999998,10.32,10.559999999999999,10.8,11.04,11.279999999999998,11.52,11.759999999999998,12.0,0]},\"selected\":{\"id\":\"2031\"},\"selection_policy\":{\"id\":\"2030\"}},\"id\":\"1368\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1376\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2112\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1368\"}},\"id\":\"1373\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2111\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1370\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2004\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2152\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1410\",\"type\":\"Circle\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1377\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2005\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"2023\"},\"selection_policy\":{\"id\":\"2022\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1372\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1380\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2094\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1379\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2095\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2133\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1382\"},\"glyph\":{\"id\":\"1383\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1385\"},\"nonselection_glyph\":{\"id\":\"1384\"},\"view\":{\"id\":\"1387\"}},\"id\":\"1386\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1383\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2134\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1389\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1391\"},\"nonselection_glyph\":{\"id\":\"1390\"},\"view\":{\"id\":\"1393\"}},\"id\":\"1392\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-0.0,-0.7128,-1.4112,-2.0952,-2.7647999999999997,-3.42,-4.0607999999999995,-4.6872,-5.299199999999999,-5.896800000000001,-6.48,-7.048799999999999,-7.6032,-8.1432,-8.6688,-9.179999999999998,-9.6768,-10.1592,-10.6272,-11.0808,-11.52,-11.9448,-12.355199999999998,-12.751199999999999,-13.132800000000001,-13.5,-13.852799999999998,-14.191199999999998,-14.5152,-14.8248,-15.12,-15.4008,-15.6672,-15.919199999999998,-16.1568,-16.38,-16.5888,-16.7832,-16.9632,-17.1288,-17.28,-17.4168,-17.5392,-17.6472,-17.7408,-17.82,-17.8848,-17.9352,-17.9712,-17.9928,-18.0,-17.9928,-17.9712,-17.935200000000002,-17.8848,-17.82,-17.7408,-17.6472,-17.5392,-17.4168,-17.28,-17.128800000000002,-16.9632,-16.7832,-16.5888,-16.38,-16.1568,-15.919200000000002,-15.6672,-15.400800000000002,-15.12,-14.824800000000002,-14.515199999999998,-14.1912,-13.852800000000002,-13.5,-13.132800000000003,-12.751199999999999,-12.355200000000002,-11.944799999999999,-11.520000000000001,-11.080800000000004,-10.6272,-10.159200000000004,-9.6768,-9.180000000000003,-8.6688,-8.143200000000002,-7.6032000000000055,-7.048800000000002,-6.480000000000005,-5.896800000000001,-5.299200000000004,-4.687199999999999,-4.060800000000003,-3.419999999999998,-2.7648000000000024,-2.095200000000007,-1.4112000000000011,-0.7128000000000059,0.0,0]},\"selected\":{\"id\":\"2034\"},\"selection_policy\":{\"id\":\"2033\"}},\"id\":\"1382\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1390\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1306\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1309\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1382\"}},\"id\":\"1387\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1219\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1389\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1409\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2096\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1391\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2045\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1206\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2097\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1503\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1393\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1220\",\"type\":\"Patch\"},{\"attributes\":{\"below\":[{\"id\":\"1425\"}],\"center\":[{\"id\":\"1428\"},{\"id\":\"1432\"}],\"height\":200,\"left\":[{\"id\":\"1429\"}],\"renderers\":[{\"id\":\"1644\"},{\"id\":\"1650\"},{\"id\":\"1656\"}],\"title\":{\"id\":\"1415\"},\"toolbar\":{\"id\":\"1440\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1417\"},\"x_scale\":{\"id\":\"1421\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1423\"}},\"id\":\"1414\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1221\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1409\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1411\"},\"nonselection_glyph\":{\"id\":\"1410\"},\"view\":{\"id\":\"1413\"}},\"id\":\"1412\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"tools\":[{\"id\":\"1497\"},{\"id\":\"1498\"},{\"id\":\"1499\"},{\"id\":\"1500\"},{\"id\":\"1501\"},{\"id\":\"1502\"},{\"id\":\"1678\"}]},\"id\":\"1504\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"1457\"}],\"center\":[{\"id\":\"1460\"},{\"id\":\"1464\"}],\"height\":200,\"left\":[{\"id\":\"1461\"}],\"renderers\":[{\"id\":\"1744\"},{\"id\":\"1750\"},{\"id\":\"1756\"}],\"title\":{\"id\":\"1448\"},\"toolbar\":{\"id\":\"1472\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1450\"},\"x_scale\":{\"id\":\"1453\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1455\"}},\"id\":\"1447\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1413\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2006\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1206\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1411\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2114\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1426\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2007\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1986\"},\"selection_policy\":{\"id\":\"1985\"}},\"id\":\"1206\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2115\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1489\"}],\"center\":[{\"id\":\"1492\"},{\"id\":\"1496\"}],\"height\":200,\"left\":[{\"id\":\"1493\"}],\"renderers\":[{\"id\":\"1664\"},{\"id\":\"1670\"},{\"id\":\"1676\"}],\"title\":{\"id\":\"1480\"},\"toolbar\":{\"id\":\"1504\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1482\"},\"x_scale\":{\"id\":\"1485\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1487\"}},\"id\":\"1479\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2135\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1219\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1221\"},\"nonselection_glyph\":{\"id\":\"1220\"},\"view\":{\"id\":\"1223\"}},\"id\":\"1222\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1423\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2008\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2116\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1415\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2136\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1223\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2009\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2117\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1938\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{\"axis\":{\"id\":\"1425\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1428\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1236\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2052\"},\"group\":null,\"major_label_policy\":{\"id\":\"2053\"},\"ticker\":{\"id\":\"1426\"}},\"id\":\"1425\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1450\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1236\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1942\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1237\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1939\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1239\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1943\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1240\",\"type\":\"Arrow\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2049\"},\"group\":null,\"major_label_policy\":{\"id\":\"2050\"},\"ticker\":{\"id\":\"1430\"},\"visible\":false},\"id\":\"1429\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1940\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{\"axis\":{\"id\":\"1429\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1432\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1239\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1941\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2100\"},\"selection_policy\":{\"id\":\"2099\"}},\"id\":\"2010\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1438\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1250\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"1990\"},\"selection_policy\":{\"id\":\"1989\"}},\"id\":\"1242\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1439\"}},\"id\":\"1435\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"1992\"},\"selection_policy\":{\"id\":\"1991\"}},\"id\":\"1249\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1436\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2118\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1242\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2102\"},\"selection_policy\":{\"id\":\"2101\"}},\"id\":\"2011\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2099\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2119\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1242\"}},\"id\":\"1248\",\"type\":\"CDSView\"}],\"root_ids\":[\"1924\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
+ " const render_items = [{\"docid\":\"8cb004cd-7d18-4bc4-989a-350d46a80772\",\"root_ids\":[\"1924\"],\"roots\":{\"1924\":\"84fa22ec-cc0c-4de4-9dfa-2f183159d7e8\"}}];\n",
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
+ "\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " let attempts = 0;\n",
+ " const timer = setInterval(function(root) {\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " clearInterval(timer);\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " attempts++;\n",
+ " if (attempts > 100) {\n",
+ " clearInterval(timer);\n",
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
+ " }\n",
+ " }\n",
+ " }, 10, root)\n",
+ " }\n",
+ "})(window);"
+ ],
+ "application/vnd.bokehjs_exec.v0+json": ""
+ },
+ "metadata": {
+ "application/vnd.bokehjs_exec.v0+json": {
+ "id": "1924"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hidden_code_nb_stress.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Legend**\n",
+ "\n",
+ "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
+ "\n",
+ "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
+ "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
+ "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
+ "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
+ "* **Textbox \"Geometrical and mechanical parameters:** small summary with the value of h, b, L, A (area), Iy (inertia with respect to the strong axis) and Iz (inertia with respect to the weak axis).\n",
+ "* **Textbox \"Forces and Moments:** small summary with the value of the magnitude of the reaction forces and the internal forces at the position x.\n",
+ "* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
+ "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
+ "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
+ "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
+ "* **Button of the force P:** apply or remove the external force P.\n",
+ "* **Figures \"N V M Diagrams\":** plots that show the axial force N, shear force V and bending moment M diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
+ "* **9 small bottom figures:** plots that show the strains, stresses and right-hand free-body diagram section (with N, V and M). By hovering with the cursor over the desired position, a small window will show the height and the value of the stress or strain.\n",
+ "\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
+ "### Recommendations\n",
+ "\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B or Cmd+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
+ "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully.\n",
+ "\n",
+ "### EXTRA: Note on the slow reactivity of the tool\n",
+ "\n",
+ "The slow reactivity of the tool is given by the two textboxes (called Div Widgets) which automatically call a specific funtion every time they are modified. This function redraws everything in the tool (figures, plots, diagrams, textboxes, sliders, ...), generating this problem. Considering that a real solution does not exist in the current version of the lib used (Bokeh 2.4.2), these textboxes will be removed in the next DEMOs."
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Simple Beam DEMOs/05-sb_torsion.ipynb b/Simple Beam DEMOs/05-sb_torsion.ipynb
new file mode 100644
index 0000000..dc98c40
--- /dev/null
+++ b/Simple Beam DEMOs/05-sb_torsion.ipynb
@@ -0,0 +1,595 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# **Simple beam - Torsion**\n",
+ "In this fifth notebook, the torsion is analysed. The system and part of the geometry and actions are taken from the previous DEMO \"04-sb_stress\", with the following changes:\n",
+ "\n",
+ "* the cross-section is now an hollow rectangular section\n",
+ "* in the middle of the beam, a torsional moment Mt is applied\n",
+ "* both supports are fixed with respect to the torsion\n",
+ "\n",
+ "To analyse correctly the interaction of the torsional stress and strain with the other ones, the left/right webs and the top/bottom flanges should be inspected individually, but considering the complexity of the problem (new cross-section geometry and the introduction of the torsion), the focus of this notebook is placed only on the left web."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Goals**\n",
+ "\n",
+ "* Explain the influence of the introduction of a torsional moment on the analysis of the beam\n",
+ "* Identify the differences that arise with this new cross-section\n",
+ "* Describe the tau stress and its origin"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Tasks and exercises**\n",
+ "\n",
+ "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
+ "\n",
+ "1. Consider the starting configuration, but with q = 1 kN/m and h = 100 mm. In the \"Total stress $\\tau$\" figure, try to explain the cause of the two couple of jumps in stress by computing by hand the equation that describes the total stress $\\tau$.\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " The first jump is due to the constant torsional stress $\\tau_T$ applied on the left web; the second jump is caused in the calculation of the shear stress $\\tau_V$ by the immediate shape change at height equals to h-t and t. The equations are:\n",
+ " <br>\n",
+ " $$ \\tau = \\tau_T + \\tau_V $$\n",
+ " <br>\n",
+ " $$ \\tau_T = \\frac{T}{2t(b-t)(h-t)} $$\n",
+ " <br>\n",
+ " $$\\tau_V=\\begin{cases}\n",
+ " \\frac{VS}{I_y2t}, S = \\frac{b}{2}(\\frac{h^2}{4}-(y-y_G)^2), & \\text{if $y\\in[t;h-t]$}.\\\\\n",
+ " \\frac{VS}{I_yb}, S = \\frac{b}{2}(h-t)^t + t(\\frac{(h-2t)^2}{4}-(y-y_G)^2), & \\text{otherwise}.\n",
+ " \\end{cases}$$\n",
+ " With $y_G$ the position of the centroid from below, that is equal to h/2.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ "\n",
+ "2. Why is $\\tau_T$ (stress generated by the torsion T) combinated with $\\tau_V$ (stress generated by shear force V) and not with $\\sigma_N$ (axial stress) or $\\sigma_M$ (bending stress)?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " The shear force and the torsion produce shear stress (called $\\tau$), on the other hand the axial force and the bending moment produce normal stress (called $\\sigma$). For this reason, the $\\tau_T$ is superimposed with $\\tau_V$. You will see how to visualize and combine togheter normal and shear stresses using the Mohr circle in the next DEMO.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "3. For what reasons the left web is the chosen one to be analysed?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " The web was chosen instead of the flange beacause given the direction in which the beam is bent, analysing the flange would have been less interesting. Secondly, the left web is critical considering that the superposition between the torsional stress and the shear stress results in a higher maximal stress.\n",
+ " </details>\n",
+ "\n",
+ "<br>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Build the interactive visualisation tool**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " <div class=\"bk-root\">\n",
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
+ " </div>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ " const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " \n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
+ " \"<p>\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"</p>\\n\"+\n",
+ " \"<ul>\\n\"+\n",
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
+ " \"</ul>\\n\"+\n",
+ " \"<code>\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"</code>\\n\"+\n",
+ " \"</div>\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"1002\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " \n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ " \n",
+ "\n",
+ " const inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " \n",
+ " \n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " \n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " \n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ " if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ "\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Import the packages needed\n",
+ "import sys\n",
+ "sys.path.append('../HiddenCode')\n",
+ "import hidden_code_nb_torsion\n",
+ "import math\n",
+ "import numpy as np\n",
+ "from cienpy import simplebeam as sb\n",
+ "from cienpy import hollow_rectangular_section as beam_section\n",
+ "from cienpy import stress_strain_elastic as stst"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Define the geometry, the external actions, the mechanical property and compute the initial configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Choose the dimensions\n",
+ "L = 6 # [m]\n",
+ "h = 200 # [mm]\n",
+ "b = 100 # [mm]\n",
+ "t = 10 # [mm]\n",
+ "q = 4 # [kN/m]\n",
+ "P = 10 # [kN]\n",
+ "Mt = 100 # [kNm]\n",
+ "\n",
+ "# Choose the material parameters\n",
+ "E = 200e3 # [MPa]\n",
+ "\n",
+ "# compute the internal forces (at x=L)\n",
+ "discr_NVM = 101\n",
+ "x_discr = np.linspace(0, L, discr_NVM)\n",
+ "N_discr = sb.compute_N(x_discr, P)\n",
+ "V_discr = sb.compute_V(x_discr, q, L)\n",
+ "M_discr = sb.compute_M(x_discr, q, L)\n",
+ "T_discr = sb.compute_T(x_discr, Mt, L)\n",
+ "N = N_discr[-1]\n",
+ "V = V_discr[-1]\n",
+ "M = M_discr[-1]\n",
+ "T = T_discr[-1]\n",
+ "\n",
+ "# compute the parameters\n",
+ "A = beam_section.compute_area(b, h, t) # [mm2]\n",
+ "Iy = beam_section.compute_inertia_y(b, h, t) # [mm4] strong axis\n",
+ "Iz = beam_section.compute_inertia_z(b, h, t) # [mm4] weak axis\n",
+ "yG = beam_section.compute_centroid_y(h)\n",
+ "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
+ "\n",
+ "# compute the reactions\n",
+ "Rx = sb.compute_Rx(P)\n",
+ "Ry_l = sb.compute_Ry_l(q, L)\n",
+ "Ry_r = sb.compute_Ry_r(q, L)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the complex code to generate the **interactive visualisation tool**:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " <div class=\"bk-root\" id=\"8de2cdc4-bf81-4ebc-b851-aa49955eb6f9\" data-root-id=\"2087\"></div>\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function embed_document(root) {\n",
+ " \n",
+ " const docs_json = {\"c22caa71-b155-4e16-ad9c-7384d8f7826e\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"2086\"}]},\"id\":\"2087\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2359\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1809\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2360\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2281\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2282\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2338\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1836\"},{\"id\":\"1837\"},{\"id\":\"1838\"},{\"id\":\"1839\"},{\"id\":\"1840\"},{\"id\":\"1841\"}]},\"id\":\"1843\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2339\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2297\"},\"selection_policy\":{\"id\":\"2296\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2227\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2296\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1837\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2228\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2297\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2340\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2229\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2230\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2258\"},\"group\":null,\"major_label_policy\":{\"id\":\"2259\"},\"ticker\":{\"id\":\"1829\"},\"visible\":false},\"id\":\"1828\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2283\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2130\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2284\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2341\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2321\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2131\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2361\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1822\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2298\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2322\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2133\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2255\"},\"group\":null,\"major_label_policy\":{\"id\":\"2256\"},\"ticker\":{\"id\":\"1833\"},\"visible\":false},\"id\":\"1832\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2285\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1824\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2362\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2299\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2134\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1828\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1831\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1818\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1829\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1832\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1835\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1826\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2213\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2286\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2342\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2214\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2343\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1841\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1836\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1842\"}},\"id\":\"1838\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2300\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1839\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2287\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1840\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2301\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1842\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2232\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2323\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2233\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2288\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2324\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2235\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2344\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2236\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2345\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2136\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2302\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2137\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2303\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2289\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2258\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1161\"}},\"id\":\"1166\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2362\"},\"selection_policy\":{\"id\":\"2361\"}},\"id\":\"1732\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2259\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1724\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1738\",\"type\":\"HoverTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1733\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1161\"},\"glyph\":{\"id\":\"1162\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1164\"},\"nonselection_glyph\":{\"id\":\"1163\"},\"view\":{\"id\":\"1166\"}},\"id\":\"1165\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"2191\"},\"selection_policy\":{\"id\":\"2190\"}},\"id\":\"1167\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1732\"},\"glyph\":{\"id\":\"1733\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1735\"},\"nonselection_glyph\":{\"id\":\"1734\"},\"view\":{\"id\":\"1737\"}},\"id\":\"1736\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1167\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1740\"},\"glyph\":{\"id\":\"1741\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1743\"},\"nonselection_glyph\":{\"id\":\"1742\"},\"view\":{\"id\":\"1745\"}},\"id\":\"1744\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2348\"},\"selection_policy\":{\"id\":\"2347\"}},\"id\":\"2260\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1734\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1753\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1732\"}},\"id\":\"1737\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1743\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1167\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"2193\"},\"selection_policy\":{\"id\":\"2192\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2310\"},\"selection_policy\":{\"id\":\"2309\"}},\"id\":\"1740\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1748\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2116\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1740\"}},\"id\":\"1745\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1742\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Text\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.1]},\"selected\":{\"id\":\"2195\"},\"selection_policy\":{\"id\":\"2194\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1763\",\"type\":\"Line\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1754\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2178\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1755\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1762\"},\"glyph\":{\"id\":\"1763\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1765\"},\"nonselection_glyph\":{\"id\":\"1764\"},\"view\":{\"id\":\"1767\"}},\"id\":\"1766\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2179\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1752\"}},\"id\":\"1757\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1769\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1771\"},\"nonselection_glyph\":{\"id\":\"1770\"},\"view\":{\"id\":\"1773\"}},\"id\":\"1772\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2180\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2322\"},\"selection_policy\":{\"id\":\"2321\"}},\"id\":\"1762\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1110\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2324\"},\"selection_policy\":{\"id\":\"2323\"}},\"id\":\"1774\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1770\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2181\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1762\"}},\"id\":\"1767\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1764\",\"type\":\"Line\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2062\"}]},\"start\":50,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1769\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Line\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n t = 10 mm<br>\\n L = 6 m<br>\\n A = 5.60e+03 mm<sup>2</sup><br>\\n Iy = 2.78e+07 mm<sup>4</sup><br>\\n Iz = 8.99e+06 mm<sup>4</sup>\",\"width\":170},\"id\":\"1107\",\"type\":\"Div\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1780\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1206\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2262\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1775\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1773\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2263\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1086\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2293\"},\"selection_policy\":{\"id\":\"2292\"}},\"id\":\"2182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1795\"}],\"center\":[{\"id\":\"1798\"},{\"id\":\"1802\"},{\"id\":\"1863\"}],\"height\":200,\"left\":[{\"id\":\"1799\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1785\"},\"toolbar\":{\"id\":\"1810\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1787\"},\"x_scale\":{\"id\":\"1791\"},\"y_range\":{\"id\":\"1789\"},\"y_scale\":{\"id\":\"1793\"}},\"id\":\"1784\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1206\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1110\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2182\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1111\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1777\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2265\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1774\"},\"glyph\":{\"id\":\"1775\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1777\"},\"nonselection_glyph\":{\"id\":\"1776\"},\"view\":{\"id\":\"1779\"}},\"id\":\"1778\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1286\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2158\"},\"selection_policy\":{\"id\":\"2157\"}},\"id\":\"1206\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2295\"},\"selection_policy\":{\"id\":\"2294\"}},\"id\":\"2183\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1776\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2266\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2063\"}]},\"start\":50,\"step\":10,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1109\",\"type\":\"Slider\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1862\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1774\"}},\"id\":\"1779\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"2187\"},\"selection_policy\":{\"id\":\"2186\"}},\"id\":\"1089\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1219\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2223\"},\"group\":null,\"major_label_policy\":{\"id\":\"2224\"},\"ticker\":{\"id\":\"1796\"},\"visible\":false},\"id\":\"1795\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1220\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1791\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1242\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1789\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2220\"},\"group\":null,\"major_label_policy\":{\"id\":\"2221\"},\"ticker\":{\"id\":\"1800\"},\"visible\":false},\"id\":\"1799\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"line_width\":{\"value\":1.8},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1102\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1219\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1221\"},\"nonselection_glyph\":{\"id\":\"1220\"},\"view\":{\"id\":\"1223\"}},\"id\":\"1222\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1223\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1804\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1795\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1798\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1101\"}},\"id\":\"1106\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2103\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1785\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2357\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1221\",\"type\":\"Patch\"},{\"attributes\":{\"interval\":50},\"id\":\"1080\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{},\"id\":\"1796\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1799\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1802\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1236\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1793\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1828\"}],\"center\":[{\"id\":\"1831\"},{\"id\":\"1835\"},{\"id\":\"1866\"}],\"height\":200,\"left\":[{\"id\":\"1832\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1860\"},{\"id\":\"1897\"},{\"id\":\"2021\"},{\"id\":\"2027\"},{\"id\":\"2033\"}],\"title\":{\"id\":\"1818\"},\"toolbar\":{\"id\":\"1843\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1820\"},\"x_scale\":{\"id\":\"1824\"},\"y_range\":{\"id\":\"1822\"},\"y_scale\":{\"id\":\"1826\"}},\"id\":\"1817\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1236\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2107\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1237\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1088\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2104\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1361\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1363\"},\"nonselection_glyph\":{\"id\":\"1362\"},\"view\":{\"id\":\"1365\"}},\"id\":\"1364\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2105\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1808\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1239\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1803\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2106\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{\"overlay\":{\"id\":\"1809\"}},\"id\":\"1805\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1806\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2162\"},\"selection_policy\":{\"id\":\"2161\"}},\"id\":\"1242\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1807\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1239\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2108\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1240\",\"type\":\"Arrow\"},{\"attributes\":{\"tools\":[{\"id\":\"1803\"},{\"id\":\"1804\"},{\"id\":\"1805\"},{\"id\":\"1806\"},{\"id\":\"1807\"},{\"id\":\"1808\"}]},\"id\":\"1810\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1092\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1857\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2337\"},\"selection_policy\":{\"id\":\"2336\"}},\"id\":\"1856\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1089\"}},\"id\":\"1094\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1856\"},\"glyph\":{\"id\":\"1857\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1859\"},\"nonselection_glyph\":{\"id\":\"1858\"},\"view\":{\"id\":\"1861\"}},\"id\":\"1860\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"xs\":[[[[50.0,50.0,-50.0,-50.0],[40.0,40.0,-40.0,-40.0]]]],\"ys\":[[[[100.0,-100.0,-100.0,100.0],[90.0,-90.0,-90.0,90.0]]]]},\"selected\":{\"id\":\"2282\"},\"selection_policy\":{\"id\":\"2281\"}},\"id\":\"1101\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1089\"},\"glyph\":{\"id\":\"1090\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1092\"},\"nonselection_glyph\":{\"id\":\"1091\"},\"view\":{\"id\":\"1094\"}},\"id\":\"1093\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1859\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"2189\"},\"selection_policy\":{\"id\":\"2188\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2331\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1856\"}},\"id\":\"1861\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1858\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2332\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1862\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2225\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1863\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2151\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":1.8},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1103\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2192\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2152\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2193\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2299\"},\"selection_policy\":{\"id\":\"2298\"}},\"id\":\"1868\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":1.8},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1104\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1865\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1865\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2260\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1866\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2284\"},\"selection_policy\":{\"id\":\"2283\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2301\"},\"selection_policy\":{\"id\":\"2300\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1868\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1122\"}},\"id\":\"1127\",\"type\":\"CDSView\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1933\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2194\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1119\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2207\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1119\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2183\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1120\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1868\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2208\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Scatter\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2220\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1122\"},\"glyph\":{\"id\":\"1123\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1125\"},\"nonselection_glyph\":{\"id\":\"1124\"},\"view\":{\"id\":\"1127\"}},\"id\":\"1126\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2118\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Scatter\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1125\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2119\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2286\"},\"selection_policy\":{\"id\":\"2285\"}},\"id\":\"1122\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2303\"},\"selection_policy\":{\"id\":\"2302\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"2152\"},\"selection_policy\":{\"id\":\"2151\"}},\"id\":\"1161\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2121\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2195\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1139\"}],\"center\":[{\"id\":\"1142\"},{\"id\":\"1146\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"},{\"id\":\"1237\"},{\"id\":\"1240\"}],\"height\":200,\"left\":[{\"id\":\"1143\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1165\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1222\"},{\"id\":\"1247\"},{\"id\":\"1253\"}],\"title\":{\"id\":\"1129\"},\"toolbar\":{\"id\":\"1154\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1131\"},\"x_scale\":{\"id\":\"1135\"},\"y_range\":{\"id\":\"1133\"},\"y_scale\":{\"id\":\"1137\"}},\"id\":\"1128\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2091\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2153\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2122\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2154\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2305\"},\"selection_policy\":{\"id\":\"2304\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2333\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2101\"},\"group\":null,\"major_label_policy\":{\"id\":\"2102\"},\"ticker\":{\"id\":\"1140\"},\"visible\":false},\"id\":\"1139\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2098\"},\"group\":null,\"major_label_policy\":{\"id\":\"2099\"},\"ticker\":{\"id\":\"1144\"},\"visible\":false},\"id\":\"1143\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2334\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1893\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1139\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1142\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2093\",\"type\":\"Title\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[4]},\"selected\":{\"id\":\"2339\"},\"selection_policy\":{\"id\":\"2338\"}},\"id\":\"1893\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1129\",\"type\":\"Title\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1895\",\"type\":\"Text\"},{\"attributes\":{\"axis\":{\"id\":\"1143\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1146\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1893\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1894\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1939\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1941\"},\"nonselection_glyph\":{\"id\":\"1940\"},\"view\":{\"id\":\"1943\"}},\"id\":\"1942\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1896\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Rect\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2067\"}]},\"labels\":[\"Apply or remove torsion M\\u209c\"]},\"id\":\"1900\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2095\",\"type\":\"Title\"},{\"attributes\":{\"end\":20,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2068\"}]},\"start\":2,\"title\":\"Change the thicknes t [mm]\",\"value\":10},\"id\":\"1931\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1909\"}],\"center\":[{\"id\":\"1912\"},{\"id\":\"1916\"}],\"height\":200,\"left\":[{\"id\":\"1913\"}],\"renderers\":[{\"id\":\"1936\"},{\"id\":\"1942\"},{\"id\":\"1950\"}],\"title\":{\"id\":\"2095\"},\"toolbar\":{\"id\":\"1924\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1905\"},\"y_range\":{\"id\":\"1903\"},\"y_scale\":{\"id\":\"1907\"}},\"id\":\"1901\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1153\"}},\"id\":\"1149\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"text\":\"Torsion M\\u209c=100 kNm (applied)\"},\"id\":\"1899\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2155\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1905\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2139\"},\"group\":null,\"major_label_policy\":{\"id\":\"2140\"},\"ticker\":{\"id\":\"1910\"}},\"id\":\"1909\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2156\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1932\"},\"glyph\":{\"id\":\"1933\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1935\"},\"nonselection_glyph\":{\"id\":\"1934\"},\"view\":{\"id\":\"1937\"}},\"id\":\"1936\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1153\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1903\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2196\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,0]},\"selected\":{\"id\":\"2217\"},\"selection_policy\":{\"id\":\"2216\"}},\"id\":\"1932\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2210\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2197\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1907\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1910\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2211\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1909\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1912\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1918\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Torsion T [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2136\"},\"group\":null,\"major_label_policy\":{\"id\":\"2137\"},\"ticker\":{\"id\":\"1914\"}},\"id\":\"1913\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2279\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1913\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1916\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2124\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1914\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2280\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1922\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1917\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2157\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1923\"}},\"id\":\"1919\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2127\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1920\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1921\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2158\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2198\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2336\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2199\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1923\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2337\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"},{\"id\":\"1152\"}]},\"id\":\"1154\",\"type\":\"Toolbar\"},{\"attributes\":{\"tools\":[{\"id\":\"1917\"},{\"id\":\"1918\"},{\"id\":\"1919\"},{\"id\":\"1920\"},{\"id\":\"1921\"},{\"id\":\"1922\"},{\"id\":\"1944\"}]},\"id\":\"1924\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1315\",\"type\":\"HelpTool\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"T_stress_diag\":{\"id\":\"2039\"},\"V_stress_diag\":{\"id\":\"1684\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div\":{\"id\":\"1107\"},\"div_P\":{\"id\":\"1259\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const t = db['t'][0]\\n const A = compute_area(b, h, t)\\n const Iy = compute_inertia_y(b, h, t)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // Easter egg\\n const str_Doge = \\\" such width\\\"\\n const str_tmp = div_P.text\\n if (b == 300) {\\n div_P.text = str_tmp+str_Doge\\n } else {\\n div_P.text = str_tmp.replace(str_Doge, '')\\n }\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h, t)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_torsional_stress(db, T_stress_diag)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const t = Math.round(data['t'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n t = `+t+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n const src = glyph_section.data_source\\n const t = data['t'][0]\\n const b = data['b'][0]\\n const h = data['h'][0]\\n src.data.xs = [[[ [b/2, b/2, -b/2, -b/2], [b/2-t, b/2-t, -b/2+t, -b/2+t] ]]]\\n src.data.ys = [[[ [h/2, -h/2, -h/2, h/2], [h/2-t, -h/2+t, -h/2+t, h/2-t] ]]]\\n src.change.emit()\\n }\\n \\n \\n function compute_area(b, h, t) {\\n return b*h - (b-t*2)*(h-2*t)\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12 - (b-2*t)*(h-2*t)**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h, t) {\\n return h*b**3/12 - (h-2*t)*(b-2*t)**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2062\",\"type\":\"CustomJS\"},{\"attributes\":{\"source\":{\"id\":\"1660\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1311\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1066\"}},\"id\":\"1062\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1316\"}},\"id\":\"1312\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2313\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"angle\":{\"value\":0.3141592653589793},\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"purple\"},\"text_font_size\":{\"value\":\"10px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2057\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1314\",\"type\":\"ResetTool\"},{\"attributes\":{\"angle\":{\"value\":0.3141592653589793},\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"purple\"},\"text_font_size\":{\"value\":\"10px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2058\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2314\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"},{\"id\":\"1065\"}]},\"id\":\"1067\",\"type\":\"Toolbar\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1316\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"T_stress_diag\":{\"id\":\"2039\"},\"V_stress_diag\":{\"id\":\"1684\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div_P\":{\"id\":\"1259\"},\"div_T\":{\"id\":\"1899\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_T_section\":{\"id\":\"2033\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_T_head\":{\"id\":\"2027\"},\"section_T_line\":{\"id\":\"2021\"},\"section_T_source\":{\"id\":\"2016\"},\"section_V\":{\"id\":\"1866\"},\"section_torsion_head\":{\"id\":\"1995\"},\"section_torsion_source\":{\"id\":\"1984\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n const Mt = db['Mt'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['T'][0] = compute_T(pos, Mt, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_T_section(db, section_torsion_head, section_torsion_source, section_T_line, section_T_head, section_T_source, div_T, label_T_section)\\n update_torsional_stress(db, T_stress_diag)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function update_T_section(data, head_T_curved, source_T_curved, line_T, head_T, source_T, div_T, label_T_section, offset_T=4, pixel2unit=10, scale_T=10) {\\n const Mt = data['Mt'][0]\\n const T = data['T'][0]\\n \\n if (T > 0) {\\n update_doubleArrow(offset_T, offset_T+T/scale_T, 0, 0, source_T, head_T)\\n } else {\\n update_doubleArrow(offset_T-T/scale_T, offset_T, 0, 0, source_T, head_T)\\n }\\n \\n // update visibility\\n if (Mt==0) {\\n div_T.text = \\\"Torsion M<sub>t</sub>=0 kNm (removed)\\\"\\n line_T.glyph.line_alpha = 0 // T\\n head_T.glyph.line_alpha = 0\\n head_T.glyph.fill_alpha = 0\\n // T in cross-section\\n update_curvedArrow(0, 0, 0, 0, 0, source_T_curved, head_T_curved)\\n } else {\\n div_T.text = \\\"Torsion M<sub>t</sub>=\\\"+Mt+\\\" kNm (applied)\\\"\\n line_T.glyph.line_alpha = 1 // T\\n head_T.glyph.line_alpha = 1\\n head_T.glyph.fill_alpha = 1\\n // T in cross-section\\n update_curvedArrow(0, T*4/scale_T, Math.abs(T*3/scale_T), 0, 0, source_T_curved, head_T_curved)\\n }\\n \\n if (T==0) {\\n label_T_section.glyph.text=''\\n } else {\\n label_T_section.glyph.text='T'\\n }\\n }\\n \\n \\n function update_doubleArrow(x_start, x_end, y_start, y_end, source, arr_heads, AHF=6, pixel2unit=10) {\\n // compute the angle of the line\\n const delta_x = x_end-x_start\\n const delta_y = y_end-y_start\\n if (delta_x==0) {\\n if (delta_y > 0) {\\n var theta = Math.PI/2\\n } else {\\n var theta = Math.PI*3/2\\n }\\n } else if (delta_x > 0) {\\n var theta = Math.atan(delta_y/delta_x)\\n } else {\\n var theta = Math.atan(delta_y/delta_x)+Math.PI\\n }\\n \\n // head adjust\\n const length_arr = Math.sqrt(delta_x**2 + delta_y**2)\\n const size_head = arrow_growth(length_arr)*AHF\\n const head_x = size_head/pixel2unit*Math.cos(theta)\\n const head_y = size_head/pixel2unit*Math.sin(theta)\\n \\n // update line\\n const data_line = source.data\\n data_line['x'] = [x_start, x_end]\\n data_line['y'] = [y_start, y_end]\\n source.change.emit()\\n \\n // heads\\n arr_heads.glyph.size = size_head\\n arr_heads.glyph.angle = theta+Math.PI/6\\n //arr_heads.glyph.x = [x_end-head_x/2, x_end-head_x/2*3]\\n //arr_heads.glyph.y = [y_end-head_y/2, y_end-head_y/2*3]\\n const source_h = arr_heads.data_source\\n source_h.data['x'] = [x_end-head_x/2, x_end-head_x/2*3]\\n source_h.data['y'] = [y_end-head_y/2, y_end-head_y/2*3]\\n source_h.change.emit()\\n }\\n \\n \\n function compute_T(x, Mt, L) {\\n if (x<L/2) {\\n return Mt/2\\n } else {\\n return -Mt/2\\n }\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2061\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1354\"},\"glyph\":{\"id\":\"1355\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1357\"},\"nonselection_glyph\":{\"id\":\"1356\"},\"view\":{\"id\":\"1359\"}},\"id\":\"1358\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2055\"},\"glyph\":{\"id\":\"2056\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2058\"},\"nonselection_glyph\":{\"id\":\"2057\"},\"view\":{\"id\":\"2060\"}},\"id\":\"2059\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"2055\"}},\"id\":\"2060\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1372\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1380\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1614\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"SaveTool\"},{\"attributes\":{\"args\":{\"EE1\":{\"id\":\"2059\"},\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"T_stress_diag\":{\"id\":\"2039\"},\"V_stress_diag\":{\"id\":\"1684\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div\":{\"id\":\"1107\"},\"div_T\":{\"id\":\"1899\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_b\":{\"id\":\"1003\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const t = db['t'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h, t)\\n const Iy = compute_inertia_y(b, h, t)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // Easter egg\\n /*const str_Doge = \\\" much wow\\\"\\n const str_tmp = div_T.text\\n if (h == 600) {\\n div_T.text = str_tmp+str_Doge\\n } else {\\n div_T.text = str_tmp.replace(str_Doge, '')\\n }*/\\n if (h == 600) {\\n EE1.glyph.text = \\\"much wow\\\"\\n } else {\\n EE1.glyph.text = \\\"\\\"\\n }\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h, t)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_torsional_stress(db, T_stress_diag)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const t = Math.round(data['t'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n t = `+t+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n const src = glyph_section.data_source\\n const t = data['t'][0]\\n const b = data['b'][0]\\n const h = data['h'][0]\\n src.data.xs = [[[ [b/2, b/2, -b/2, -b/2], [b/2-t, b/2-t, -b/2+t, -b/2+t] ]]]\\n src.data.ys = [[[ [h/2, -h/2, -h/2, h/2], [h/2-t, -h/2+t, -h/2+t, h/2-t] ]]]\\n src.change.emit()\\n }\\n \\n \\n function compute_area(b, h, t) {\\n return b*h - (b-t*2)*(h-2*t)\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12 - (b-2*t)*(h-2*t)**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h, t) {\\n return h*b**3/12 - (h-2*t)*(b-2*t)**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2063\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2354\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1377\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1640\"},\"glyph\":{\"id\":\"1641\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1643\"},\"nonselection_glyph\":{\"id\":\"1642\"},\"view\":{\"id\":\"1645\"}},\"id\":\"1644\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1358\"},\"N_stress_diag\":{\"id\":\"1644\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_M\":{\"id\":\"1242\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=101) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \"},\"id\":\"2064\",\"type\":\"CustomJS\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1379\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2317\"},\"selection_policy\":{\"id\":\"2316\"}},\"id\":\"1640\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2355\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1389\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1391\"},\"nonselection_glyph\":{\"id\":\"1390\"},\"view\":{\"id\":\"1393\"}},\"id\":\"1392\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1253\"},\"div_P\":{\"id\":\"1259\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"2065\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1386\"},\"M_stress_diag\":{\"id\":\"1664\"},\"V_diag\":{\"id\":\"1372\"},\"V_stress_diag\":{\"id\":\"1684\"},\"arr_head\":{\"id\":\"1253\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1716\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \"},\"id\":\"2066\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1619\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1376\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1618\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1621\",\"type\":\"Grid\"},{\"attributes\":{\"args\":{\"T_diag\":{\"id\":\"1936\"},\"T_stress_diag\":{\"id\":\"2039\"},\"div_T\":{\"id\":\"1899\"},\"label_T_section\":{\"id\":\"2033\"},\"neutral_axis\":{\"id\":\"1716\"},\"section_T_head\":{\"id\":\"2027\"},\"section_T_line\":{\"id\":\"2021\"},\"section_T_source\":{\"id\":\"2016\"},\"section_torsion_head\":{\"id\":\"1995\"},\"section_torsion_source\":{\"id\":\"1984\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox Mt\\n if (f.length==0) f = [1]\\n const db = source.data\\n const L = db['L'][0]\\n const x = db['x'][0]\\n\\n // apply the changes\\n db['Mt'][0] = 100*(1-f)\\n db['T'][0] = compute_T(x, db['Mt'][0], L)\\n\\n // update\\n update_torsional_stress(db, T_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_T_diagram(db, T_diag)\\n update_T_section(db, section_torsion_head, section_torsion_source, section_T_line, section_T_head, section_T_source, div_T, label_T_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_doubleArrow(x_start, x_end, y_start, y_end, source, arr_heads, AHF=6, pixel2unit=10) {\\n // compute the angle of the line\\n const delta_x = x_end-x_start\\n const delta_y = y_end-y_start\\n if (delta_x==0) {\\n if (delta_y > 0) {\\n var theta = Math.PI/2\\n } else {\\n var theta = Math.PI*3/2\\n }\\n } else if (delta_x > 0) {\\n var theta = Math.atan(delta_y/delta_x)\\n } else {\\n var theta = Math.atan(delta_y/delta_x)+Math.PI\\n }\\n \\n // head adjust\\n const length_arr = Math.sqrt(delta_x**2 + delta_y**2)\\n const size_head = arrow_growth(length_arr)*AHF\\n const head_x = size_head/pixel2unit*Math.cos(theta)\\n const head_y = size_head/pixel2unit*Math.sin(theta)\\n \\n // update line\\n const data_line = source.data\\n data_line['x'] = [x_start, x_end]\\n data_line['y'] = [y_start, y_end]\\n source.change.emit()\\n \\n // heads\\n arr_heads.glyph.size = size_head\\n arr_heads.glyph.angle = theta+Math.PI/6\\n //arr_heads.glyph.x = [x_end-head_x/2, x_end-head_x/2*3]\\n //arr_heads.glyph.y = [y_end-head_y/2, y_end-head_y/2*3]\\n const source_h = arr_heads.data_source\\n source_h.data['x'] = [x_end-head_x/2, x_end-head_x/2*3]\\n source_h.data['y'] = [y_end-head_y/2, y_end-head_y/2*3]\\n source_h.change.emit()\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_T_section(data, head_T_curved, source_T_curved, line_T, head_T, source_T, div_T, label_T_section, offset_T=4, pixel2unit=10, scale_T=10) {\\n const Mt = data['Mt'][0]\\n const T = data['T'][0]\\n \\n if (T > 0) {\\n update_doubleArrow(offset_T, offset_T+T/scale_T, 0, 0, source_T, head_T)\\n } else {\\n update_doubleArrow(offset_T-T/scale_T, offset_T, 0, 0, source_T, head_T)\\n }\\n \\n // update visibility\\n if (Mt==0) {\\n div_T.text = \\\"Torsion M<sub>t</sub>=0 kNm (removed)\\\"\\n line_T.glyph.line_alpha = 0 // T\\n head_T.glyph.line_alpha = 0\\n head_T.glyph.fill_alpha = 0\\n // T in cross-section\\n update_curvedArrow(0, 0, 0, 0, 0, source_T_curved, head_T_curved)\\n } else {\\n div_T.text = \\\"Torsion M<sub>t</sub>=\\\"+Mt+\\\" kNm (applied)\\\"\\n line_T.glyph.line_alpha = 1 // T\\n head_T.glyph.line_alpha = 1\\n head_T.glyph.fill_alpha = 1\\n // T in cross-section\\n update_curvedArrow(0, T*4/scale_T, Math.abs(T*3/scale_T), 0, 0, source_T_curved, head_T_curved)\\n }\\n \\n if (T==0) {\\n label_T_section.glyph.text=''\\n } else {\\n label_T_section.glyph.text='T'\\n }\\n }\\n \\n \\n function compute_T(x, Mt, L) {\\n if (x<L/2) {\\n return Mt/2\\n } else {\\n return -Mt/2\\n }\\n }\\n \\n \\n function update_T_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const Mt = data['Mt'][0]\\n const x = linspace(0, L, 101)\\n const T_discr = Array.from({length: discr}, (_, i) => compute_T(x[i], Mt, L))\\n update_NVM_diagram(glyph, T_discr)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2067\",\"type\":\"CustomJS\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2280\"},\"selection_policy\":{\"id\":\"2279\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1332\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1335\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2180\"},\"group\":null,\"major_label_policy\":{\"id\":\"2181\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1052\",\"type\":\"LinearAxis\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"T_stress_diag\":{\"id\":\"2039\"},\"V_stress_diag\":{\"id\":\"1684\"},\"axial_strain_diag\":{\"id\":\"1744\"},\"bending_strain_diag\":{\"id\":\"1766\"},\"centroid\":{\"id\":\"1676\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1716\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1704\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const t = cb_obj.value // value of the slider\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const A = compute_area(b, h, t)\\n const Iy = compute_inertia_y(b, h, t)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['t'][0] = t\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h, t)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_torsional_stress(db, T_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const t = Math.round(data['t'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n t = `+t+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n const src = glyph_section.data_source\\n const t = data['t'][0]\\n const b = data['b'][0]\\n const h = data['h'][0]\\n src.data.xs = [[[ [b/2, b/2, -b/2, -b/2], [b/2-t, b/2-t, -b/2+t, -b/2+t] ]]]\\n src.data.ys = [[[ [h/2, -h/2, -h/2, h/2], [h/2-t, -h/2+t, -h/2+t, h/2-t] ]]]\\n src.change.emit()\\n }\\n \\n \\n function compute_area(b, h, t) {\\n return b*h - (b-t*2)*(h-2*t)\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12 - (b-2*t)*(h-2*t)**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h, t) {\\n return h*b**3/12 - (h-2*t)*(b-2*t)**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2068\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1609\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2249\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1627\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"width\":10},\"id\":\"2069\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1616\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2114\"},\"group\":null,\"major_label_policy\":{\"id\":\"2115\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1651\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2250\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2277\"},\"group\":null,\"major_label_policy\":{\"id\":\"2278\"},\"ticker\":{\"id\":\"1619\"}},\"id\":\"1618\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2274\"},\"group\":null,\"major_label_policy\":{\"id\":\"2275\"},\"ticker\":{\"id\":\"1623\"}},\"id\":\"1622\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2252\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1066\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1330\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2178\"},\"group\":null,\"major_label_policy\":{\"id\":\"2179\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1056\",\"type\":\"LinearAxis\"},{\"attributes\":{\"height\":30},\"id\":\"2072\",\"type\":\"Spacer\"},{\"attributes\":{\"axis\":{\"id\":\"1622\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1625\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"BasicTicker\"},{\"attributes\":{\"height\":30},\"id\":\"2070\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2253\",\"type\":\"AllLabels\"},{\"attributes\":{\"height\":30},\"id\":\"2071\",\"type\":\"Spacer\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1087\"},{\"id\":\"1093\"},{\"id\":\"1099\"},{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1186\"},{\"id\":\"1192\"},{\"id\":\"2002\"},{\"id\":\"2008\"},{\"id\":\"2014\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1644\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1658\",\"type\":\"HoverTool\"},{\"attributes\":{\"children\":[{\"id\":\"2070\"},{\"id\":\"1108\"},{\"id\":\"1109\"},{\"id\":\"1931\"},{\"id\":\"1256\"},{\"id\":\"1255\"},{\"id\":\"2071\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"},{\"id\":\"1260\"},{\"id\":\"2072\"},{\"id\":\"1899\"},{\"id\":\"1900\"}]},\"id\":\"2073\",\"type\":\"Column\"},{\"attributes\":{\"tools\":[{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1315\"},{\"id\":\"1380\"}]},\"id\":\"1317\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1631\",\"type\":\"HelpTool\"},{\"attributes\":{\"children\":[{\"id\":\"1041\"},{\"id\":\"2069\"},{\"id\":\"2073\"}]},\"id\":\"2074\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1328\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1626\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1632\"}},\"id\":\"1628\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2133\"},\"group\":null,\"major_label_policy\":{\"id\":\"2134\"},\"ticker\":{\"id\":\"1333\"},\"visible\":false},\"id\":\"1332\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1629\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2185\"},\"selection_policy\":{\"id\":\"2184\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1630\",\"type\":\"ResetTool\"},{\"attributes\":{\"width\":200},\"id\":\"2080\",\"type\":\"Spacer\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2156\"},\"selection_policy\":{\"id\":\"2155\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"1128\"},{\"id\":\"2074\"}]},\"id\":\"2075\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"2160\"},\"selection_policy\":{\"id\":\"2159\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"height\":10},\"id\":\"2076\",\"type\":\"Spacer\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1333\",\"type\":\"BasicTicker\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"2076\"},{\"id\":\"1262\"},{\"id\":\"1294\"},{\"id\":\"1324\"},{\"id\":\"1901\"}]},\"id\":\"2077\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2316\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2356\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"2075\"},{\"id\":\"2077\"}]},\"id\":\"2078\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1642\",\"type\":\"Line\"},{\"attributes\":{\"width\":200},\"id\":\"2081\",\"type\":\"Spacer\"},{\"attributes\":{\"tools\":[{\"id\":\"1626\"},{\"id\":\"1627\"},{\"id\":\"1628\"},{\"id\":\"1629\"},{\"id\":\"1630\"},{\"id\":\"1631\"},{\"id\":\"1738\"}]},\"id\":\"1633\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2312\"},\"selection_policy\":{\"id\":\"2311\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"2079\"},{\"id\":\"2082\"}]},\"id\":\"2083\",\"type\":\"Column\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2130\"},\"group\":null,\"major_label_policy\":{\"id\":\"2131\"},\"ticker\":{\"id\":\"1337\"}},\"id\":\"1336\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1052\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1055\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1336\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1339\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"A\":[5600],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[27786666.666666664],\"Iz\":[8986666.666666666],\"L\":[6],\"M\":[0.0],\"Mt\":[100],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"T\":[-50.0],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"t\":[10],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"2154\"},\"selection_policy\":{\"id\":\"2153\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1101\"},\"glyph\":{\"id\":\"1102\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1104\"},\"nonselection_glyph\":{\"id\":\"1103\"},\"view\":{\"id\":\"1106\"}},\"id\":\"1105\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2221\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1784\"},{\"id\":\"1447\"},{\"id\":\"1414\"},{\"id\":\"1511\"},{\"id\":\"1479\"},{\"id\":\"1576\"}]},\"id\":\"2079\",\"type\":\"Row\"},{\"attributes\":{\"below\":[{\"id\":\"1052\"}],\"center\":[{\"id\":\"1055\"},{\"id\":\"1059\"},{\"id\":\"1111\"},{\"id\":\"1120\"}],\"left\":[{\"id\":\"1056\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1078\"},{\"id\":\"1105\"},{\"id\":\"1117\"},{\"id\":\"1126\"},{\"id\":\"1989\"},{\"id\":\"1995\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1067\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1048\"},\"y_range\":{\"id\":\"1046\"},\"y_scale\":{\"id\":\"1050\"}},\"id\":\"1041\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"children\":[{\"id\":\"2083\"}]},\"id\":\"2084\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1084\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1086\"},\"nonselection_glyph\":{\"id\":\"1085\"},\"view\":{\"id\":\"1088\"}},\"id\":\"1087\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1340\"},{\"id\":\"1341\"},{\"id\":\"1342\"},{\"id\":\"1343\"},{\"id\":\"1344\"},{\"id\":\"1345\"},{\"id\":\"1394\"}]},\"id\":\"1347\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1345\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2223\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1340\",\"type\":\"PanTool\"},{\"attributes\":{\"children\":[{\"id\":\"1817\"},{\"id\":\"2080\"},{\"id\":\"1543\"},{\"id\":\"2081\"},{\"id\":\"1952\"},{\"id\":\"1608\"}]},\"id\":\"2082\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{\"overlay\":{\"id\":\"1346\"}},\"id\":\"1342\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2224\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2327\"},\"selection_policy\":{\"id\":\"2326\"}},\"id\":\"1660\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1065\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1056\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1059\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"DataRange1d\"},{\"attributes\":{\"children\":[{\"id\":\"2078\"},{\"id\":\"2084\"}]},\"id\":\"2085\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1346\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1647\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2111\"},\"group\":null,\"major_label_policy\":{\"id\":\"2112\"},\"ticker\":{\"id\":\"1024\"},\"visible\":false},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{\"children\":[{\"id\":\"2085\"}]},\"id\":\"2086\",\"type\":\"Row\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1375\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1377\"},\"nonselection_glyph\":{\"id\":\"1376\"},\"view\":{\"id\":\"1379\"}},\"id\":\"1378\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1480\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2308\"},\"selection_policy\":{\"id\":\"2307\"}},\"id\":\"2225\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1640\"}},\"id\":\"1645\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1641\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2318\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1643\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2255\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2319\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1648\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1747\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1749\"},\"nonselection_glyph\":{\"id\":\"1748\"},\"view\":{\"id\":\"1751\"}},\"id\":\"1750\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2256\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1649\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1586\"}],\"center\":[{\"id\":\"1589\"},{\"id\":\"1593\"}],\"height\":200,\"renderers\":[{\"id\":\"1704\"},{\"id\":\"1710\"},{\"id\":\"1716\"}],\"right\":[{\"id\":\"1590\"}],\"title\":{\"id\":\"1577\"},\"toolbar\":{\"id\":\"1601\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1579\"},\"x_scale\":{\"id\":\"1582\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1584\"}},\"id\":\"1576\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1250\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1490\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1489\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1492\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2246\"},\"group\":null,\"major_label_policy\":{\"id\":\"2247\"},\"ticker\":{\"id\":\"1490\"}},\"id\":\"1489\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1242\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2164\"},\"selection_policy\":{\"id\":\"2163\"}},\"id\":\"1249\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2243\"},\"group\":null,\"major_label_policy\":{\"id\":\"2244\"},\"ticker\":{\"id\":\"1494\"},\"visible\":false},\"id\":\"1493\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1252\",\"type\":\"Scatter\"},{\"attributes\":{\"axis\":{\"id\":\"1493\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1496\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1251\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1257\",\"type\":\"Div\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2061\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1256\",\"type\":\"Slider\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2066\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1255\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1502\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1249\"},\"glyph\":{\"id\":\"1250\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1252\"},\"nonselection_glyph\":{\"id\":\"1251\"},\"view\":{\"id\":\"1254\"}},\"id\":\"1253\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1497\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1249\"}},\"id\":\"1254\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1503\"}},\"id\":\"1499\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2065\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1258\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{},\"id\":\"1500\",\"type\":\"SaveTool\"},{\"attributes\":{\"below\":[{\"id\":\"1332\"}],\"center\":[{\"id\":\"1335\"},{\"id\":\"1339\"}],\"height\":160,\"left\":[{\"id\":\"1336\"}],\"renderers\":[{\"id\":\"1386\"},{\"id\":\"1392\"},{\"id\":\"1412\"}],\"title\":{\"id\":\"2093\"},\"toolbar\":{\"id\":\"1347\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1328\"},\"y_range\":{\"id\":\"1326\"},\"y_scale\":{\"id\":\"1330\"}},\"id\":\"1324\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1501\",\"type\":\"ResetTool\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1259\",\"type\":\"Div\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1261\",\"type\":\"Div\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1503\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2238\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1268\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1517\",\"type\":\"LinearScale\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2064\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1260\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1272\"}],\"center\":[{\"id\":\"1275\"},{\"id\":\"1279\"}],\"height\":160,\"left\":[{\"id\":\"1276\"}],\"renderers\":[{\"id\":\"1358\"},{\"id\":\"1364\"},{\"id\":\"1400\"},{\"id\":\"2059\"}],\"title\":{\"id\":\"1263\"},\"toolbar\":{\"id\":\"1287\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1268\"},\"y_range\":{\"id\":\"1266\"},\"y_scale\":{\"id\":\"1270\"}},\"id\":\"1262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2239\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1280\"},{\"id\":\"1281\"},{\"id\":\"1282\"},{\"id\":\"1283\"},{\"id\":\"1284\"},{\"id\":\"1285\"},{\"id\":\"1366\"}]},\"id\":\"1287\",\"type\":\"Toolbar\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1568\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1302\"}],\"center\":[{\"id\":\"1305\"},{\"id\":\"1309\"}],\"height\":160,\"left\":[{\"id\":\"1306\"}],\"renderers\":[{\"id\":\"1372\"},{\"id\":\"1378\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"2091\"},\"toolbar\":{\"id\":\"1317\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1298\"},\"y_range\":{\"id\":\"1296\"},\"y_scale\":{\"id\":\"1300\"}},\"id\":\"1294\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1266\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2240\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1272\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1275\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1263\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1270\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2241\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1281\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2121\"},\"group\":null,\"major_label_policy\":{\"id\":\"2122\"},\"ticker\":{\"id\":\"1273\"},\"visible\":false},\"id\":\"1272\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1273\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2166\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2118\"},\"group\":null,\"major_label_policy\":{\"id\":\"2119\"},\"ticker\":{\"id\":\"1277\"}},\"id\":\"1276\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2167\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1276\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1279\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1519\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1285\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2168\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1286\"}},\"id\":\"1282\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1512\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2169\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1766\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1782\",\"type\":\"HoverTool\"},{\"attributes\":{\"below\":[{\"id\":\"1554\"}],\"center\":[{\"id\":\"1557\"},{\"id\":\"1561\"}],\"height\":200,\"left\":[{\"id\":\"1558\"}],\"renderers\":[{\"id\":\"1684\"},{\"id\":\"1690\"},{\"id\":\"1696\"}],\"title\":{\"id\":\"1544\"},\"toolbar\":{\"id\":\"1569\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1546\"},\"x_scale\":{\"id\":\"1550\"},\"y_range\":{\"id\":\"1548\"},\"y_scale\":{\"id\":\"1552\"}},\"id\":\"1543\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2170\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1514\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2171\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1497\"},{\"id\":\"1498\"},{\"id\":\"1499\"},{\"id\":\"1500\"},{\"id\":\"1501\"},{\"id\":\"1502\"},{\"id\":\"1678\"}]},\"id\":\"1504\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1521\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1524\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1302\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1305\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2111\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1660\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2172\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2112\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2240\"},\"group\":null,\"major_label_policy\":{\"id\":\"2241\"},\"ticker\":{\"id\":\"1780\"}},\"id\":\"1521\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2173\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2238\"},\"group\":null,\"major_label_policy\":{\"id\":\"2239\"},\"ticker\":{\"id\":\"1526\"},\"visible\":false},\"id\":\"1525\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2127\"},\"group\":null,\"major_label_policy\":{\"id\":\"2128\"},\"ticker\":{\"id\":\"1303\"},\"visible\":false},\"id\":\"1302\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2114\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1525\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1528\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2174\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2243\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1296\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2115\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2175\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1534\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2244\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1529\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1535\"}},\"id\":\"1531\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1532\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2246\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2176\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2247\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1300\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2177\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1535\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2204\"},\"selection_policy\":{\"id\":\"2203\"}},\"id\":\"2116\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1326\",\"type\":\"DataRange1d\"},{\"attributes\":{\"tools\":[{\"id\":\"1529\"},{\"id\":\"1530\"},{\"id\":\"1531\"},{\"id\":\"1532\"},{\"id\":\"1533\"},{\"id\":\"1534\"},{\"id\":\"1782\"}]},\"id\":\"1536\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2124\"},\"group\":null,\"major_label_policy\":{\"id\":\"2125\"},\"ticker\":{\"id\":\"1307\"}},\"id\":\"1306\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1306\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1309\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2319\"},\"selection_policy\":{\"id\":\"2318\"}},\"id\":\"1652\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2020\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1652\"},\"glyph\":{\"id\":\"1653\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1655\"},\"nonselection_glyph\":{\"id\":\"1654\"},\"view\":{\"id\":\"1657\"}},\"id\":\"1656\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1653\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1939\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1664\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1678\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2314\"},\"selection_policy\":{\"id\":\"2313\"}},\"id\":\"1752\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[4.5,5.5],\"y\":[-6.123233995736766e-17,-1.8369701987210297e-16]},\"selected\":{\"id\":\"2343\"},\"selection_policy\":{\"id\":\"2342\"}},\"id\":\"2023\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1941\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1654\",\"type\":\"Line\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1652\"}},\"id\":\"1657\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"2016\"}},\"id\":\"2022\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1947\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1949\"},\"nonselection_glyph\":{\"id\":\"1948\"},\"view\":{\"id\":\"1951\"}},\"id\":\"1950\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2329\"},\"selection_policy\":{\"id\":\"2328\"}},\"id\":\"1672\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2184\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2185\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1687\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1689\"},\"nonselection_glyph\":{\"id\":\"1688\"},\"view\":{\"id\":\"1691\"}},\"id\":\"1690\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1934\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2326\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1672\"},\"glyph\":{\"id\":\"1673\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1675\"},\"nonselection_glyph\":{\"id\":\"1674\"},\"view\":{\"id\":\"1677\"}},\"id\":\"1676\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1672\"}},\"id\":\"1677\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1936\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Torsion\",\"@y kNm\"]]},\"id\":\"1944\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1674\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2327\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2350\"},\"selection_policy\":{\"id\":\"2349\"}},\"id\":\"1680\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2347\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1935\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1683\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2348\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1932\"}},\"id\":\"1937\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2349\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1680\"},\"glyph\":{\"id\":\"1681\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1683\"},\"nonselection_glyph\":{\"id\":\"1682\"},\"view\":{\"id\":\"1685\"}},\"id\":\"1684\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2352\"},\"selection_policy\":{\"id\":\"2351\"}},\"id\":\"1692\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2216\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1688\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2350\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1940\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2186\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1680\"}},\"id\":\"1685\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1943\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1682\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1752\"},\"glyph\":{\"id\":\"1753\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1755\"},\"nonselection_glyph\":{\"id\":\"1754\"},\"view\":{\"id\":\"1757\"}},\"id\":\"1756\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1960\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2217\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2187\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":3.665191429188092},\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2024\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAABapAw83ZofwM4Pi5SBpyvAchzHcRzHMcC35odFysAzwLfmh0XKwDPAchzHcRzHMcDLD4uUgacrwFSkDDzdmh/AAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAALsBVVVVVVVUnwKqqqqqqqiDAAAAAAAAAFMCoqqqqqqr6v7Cqqqqqqvo/AAAAAAAAFECsqqqqqqogQFZVVVVVVSdAAAAAAAAALkA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2288\"},\"selection_policy\":{\"id\":\"2287\"}},\"id\":\"1984\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1751\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"T\"}},\"id\":\"1947\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1684\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1698\",\"type\":\"HoverTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"T\"}},\"id\":\"1948\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1689\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1951\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1962\"}],\"center\":[{\"id\":\"1965\"},{\"id\":\"1969\"}],\"height\":200,\"left\":[{\"id\":\"1966\"}],\"renderers\":[{\"id\":\"2039\"},{\"id\":\"2045\"},{\"id\":\"2051\"}],\"title\":{\"id\":\"1953\"},\"toolbar\":{\"id\":\"1977\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1955\"},\"x_scale\":{\"id\":\"1958\"},\"y_range\":{\"id\":\"1548\"},\"y_scale\":{\"id\":\"1960\"}},\"id\":\"1952\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1691\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"T\"}},\"id\":\"1949\",\"type\":\"Circle\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1701\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1963\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1955\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1695\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1692\"},\"glyph\":{\"id\":\"1693\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1695\"},\"nonselection_glyph\":{\"id\":\"1694\"},\"view\":{\"id\":\"1697\"}},\"id\":\"1696\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1700\"},\"glyph\":{\"id\":\"1701\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1703\"},\"nonselection_glyph\":{\"id\":\"1702\"},\"view\":{\"id\":\"1705\"}},\"id\":\"1704\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1958\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1694\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1707\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1709\"},\"nonselection_glyph\":{\"id\":\"1708\"},\"view\":{\"id\":\"1711\"}},\"id\":\"1710\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Torsional stress\"},\"id\":\"1953\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"1692\"}},\"id\":\"1697\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2328\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1962\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1965\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1971\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2188\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2329\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2332\"},\"selection_policy\":{\"id\":\"2331\"}},\"id\":\"1700\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2334\"},\"selection_policy\":{\"id\":\"2333\"}},\"id\":\"1712\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u209c [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2271\"},\"group\":null,\"major_label_policy\":{\"id\":\"2272\"},\"ticker\":{\"id\":\"1963\"}},\"id\":\"1962\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2189\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1708\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1700\"}},\"id\":\"1705\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2268\"},\"group\":null,\"major_label_policy\":{\"id\":\"2269\"},\"ticker\":{\"id\":\"1967\"},\"visible\":false},\"id\":\"1966\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1702\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1966\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1969\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1749\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2351\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1707\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1967\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2352\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1704\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1718\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1975\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1713\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1970\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1711\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1976\"}},\"id\":\"1972\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1973\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1974\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1720\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1712\"},\"glyph\":{\"id\":\"1713\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1715\"},\"nonselection_glyph\":{\"id\":\"1714\"},\"view\":{\"id\":\"1717\"}},\"id\":\"1716\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1976\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1712\"}},\"id\":\"1717\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1970\"},{\"id\":\"1971\"},{\"id\":\"1972\"},{\"id\":\"1973\"},{\"id\":\"1974\"},{\"id\":\"1975\"},{\"id\":\"2053\"}]},\"id\":\"1977\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1714\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2190\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1758\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2360\"},\"selection_policy\":{\"id\":\"2359\"}},\"id\":\"1720\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2191\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2019\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2018\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2016\"},\"glyph\":{\"id\":\"2018\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2020\"},\"nonselection_glyph\":{\"id\":\"2019\"},\"view\":{\"id\":\"2022\"}},\"id\":\"2021\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1720\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"angle\":{\"value\":3.665191429188092},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2026\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2290\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[15.0]},\"selected\":{\"id\":\"2290\"},\"selection_policy\":{\"id\":\"2289\"}},\"id\":\"1991\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2268\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2159\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1986\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2269\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1984\"},\"glyph\":{\"id\":\"1986\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1988\"},\"nonselection_glyph\":{\"id\":\"1987\"},\"view\":{\"id\":\"1990\"}},\"id\":\"1989\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2160\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2271\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2200\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2272\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1987\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2201\",\"type\":\"Selection\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2031\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1988\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1984\"}},\"id\":\"1990\",\"type\":\"CDSView\"},{\"attributes\":{\"angle\":{\"value\":-1.2120256565243244},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1993\",\"type\":\"Scatter\"},{\"attributes\":{\"angle\":{\"value\":-1.2120256565243244},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1994\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":[3.0,4.0],\"y\":[0,0]},\"selected\":{\"id\":\"2197\"},\"selection_policy\":{\"id\":\"2196\"}},\"id\":\"1997\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"angle\":{\"value\":-1.2120256565243244},\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1992\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1997\"},\"glyph\":{\"id\":\"1999\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2001\"},\"nonselection_glyph\":{\"id\":\"2000\"},\"view\":{\"id\":\"2003\"}},\"id\":\"2002\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1991\"},\"glyph\":{\"id\":\"1992\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1994\"},\"nonselection_glyph\":{\"id\":\"1993\"},\"view\":{\"id\":\"1996\"}},\"id\":\"1995\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1991\"}},\"id\":\"1996\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"2010\"}},\"id\":\"2015\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[3.925,3.775],\"y\":[0.0,0.0]},\"selected\":{\"id\":\"2199\"},\"selection_policy\":{\"id\":\"2198\"}},\"id\":\"2004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"green\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1999\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"green\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2000\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"2042\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2044\"},\"nonselection_glyph\":{\"id\":\"2043\"},\"view\":{\"id\":\"2046\"}},\"id\":\"2045\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"green\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2001\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2004\"},\"glyph\":{\"id\":\"2005\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2007\"},\"nonselection_glyph\":{\"id\":\"2006\"},\"view\":{\"id\":\"2009\"}},\"id\":\"2008\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1997\"}},\"id\":\"2003\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2292\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"angle\":{\"value\":0.5235987755982988},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"green\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"green\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2006\",\"type\":\"Scatter\"},{\"attributes\":{\"angle\":{\"value\":0.5235987755982988},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"green\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"green\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2007\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"2004\"}},\"id\":\"2009\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2293\",\"type\":\"Selection\"},{\"attributes\":{\"angle\":{\"value\":0.5235987755982988},\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2005\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":[9.0,4],\"y\":[0,0]},\"selected\":{\"id\":\"2341\"},\"selection_policy\":{\"id\":\"2340\"}},\"id\":\"2016\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2030\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"M\\u209c\"],\"x\":[3.5],\"y\":[0.01]},\"selected\":{\"id\":\"2201\"},\"selection_policy\":{\"id\":\"2200\"}},\"id\":\"2010\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2294\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2011\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2161\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2010\"},\"glyph\":{\"id\":\"2011\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2013\"},\"nonselection_glyph\":{\"id\":\"2012\"},\"view\":{\"id\":\"2015\"}},\"id\":\"2014\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2295\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2162\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"2035\"}},\"id\":\"2040\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2274\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2012\",\"type\":\"Text\"},{\"attributes\":{\"angle\":{\"value\":3.665191429188092},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2025\",\"type\":\"Scatter\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2013\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2203\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2275\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2023\"},\"glyph\":{\"id\":\"2024\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2026\"},\"nonselection_glyph\":{\"id\":\"2025\"},\"view\":{\"id\":\"2028\"}},\"id\":\"2027\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2029\"},\"glyph\":{\"id\":\"2030\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2032\"},\"nonselection_glyph\":{\"id\":\"2031\"},\"view\":{\"id\":\"2034\"}},\"id\":\"2033\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2204\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"text\":[\"T\"],\"x\":[11.000000000000002],\"y\":[1]},\"selected\":{\"id\":\"2345\"},\"selection_policy\":{\"id\":\"2344\"}},\"id\":\"2029\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2277\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"2023\"}},\"id\":\"2028\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2205\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2278\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2032\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2035\"},\"glyph\":{\"id\":\"2036\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2038\"},\"nonselection_glyph\":{\"id\":\"2037\"},\"view\":{\"id\":\"2040\"}},\"id\":\"2039\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2206\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2036\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2029\"}},\"id\":\"2034\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2163\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2038\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2355\"},\"selection_policy\":{\"id\":\"2354\"}},\"id\":\"2035\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2357\"},\"selection_policy\":{\"id\":\"2356\"}},\"id\":\"2047\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2164\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2043\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2037\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1632\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2042\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"2039\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"2053\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2044\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2048\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"2046\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2050\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2049\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2047\"}},\"id\":\"2052\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2047\"},\"glyph\":{\"id\":\"2048\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2050\"},\"nonselection_glyph\":{\"id\":\"2049\"},\"view\":{\"id\":\"2052\"}},\"id\":\"2051\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[2],\"y\":[-4]},\"selected\":{\"id\":\"2208\"},\"selection_policy\":{\"id\":\"2207\"}},\"id\":\"2055\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"angle\":{\"value\":0.3141592653589793},\"text_color\":{\"value\":\"purple\"},\"text_font_size\":{\"value\":\"10px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2056\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2304\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1744\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1760\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis\":{\"id\":\"1429\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1432\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1582\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1438\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1357\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1439\"}},\"id\":\"1435\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1436\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2206\"},\"selection_policy\":{\"id\":\"2205\"}},\"id\":\"1354\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2305\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1354\"}},\"id\":\"1359\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1587\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1439\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1521\"}],\"center\":[{\"id\":\"1524\"},{\"id\":\"1528\"}],\"height\":200,\"left\":[{\"id\":\"1525\"}],\"renderers\":[{\"id\":\"1766\"},{\"id\":\"1772\"},{\"id\":\"1778\"}],\"title\":{\"id\":\"1512\"},\"toolbar\":{\"id\":\"1536\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1514\"},\"x_scale\":{\"id\":\"1517\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1519\"}},\"id\":\"1511\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1552\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1618\"}],\"center\":[{\"id\":\"1621\"},{\"id\":\"1625\"}],\"height\":200,\"renderers\":[{\"id\":\"1724\"},{\"id\":\"1730\"},{\"id\":\"1736\"}],\"right\":[{\"id\":\"1622\"}],\"title\":{\"id\":\"1609\"},\"toolbar\":{\"id\":\"1633\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1611\"},\"x_scale\":{\"id\":\"1614\"},\"y_range\":{\"id\":\"1548\"},\"y_scale\":{\"id\":\"1616\"}},\"id\":\"1608\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1358\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1366\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1365\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2317\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1371\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1548\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1546\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1368\"},\"glyph\":{\"id\":\"1369\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1371\"},\"nonselection_glyph\":{\"id\":\"1370\"},\"view\":{\"id\":\"1373\"}},\"id\":\"1372\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1555\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1544\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2098\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-12.0,-11.76,-11.52,-11.28,-11.04,-10.8,-10.56,-10.32,-10.08,-9.84,-9.6,-9.36,-9.120000000000001,-8.879999999999999,-8.64,-8.4,-8.16,-7.92,-7.68,-7.44,-7.2,-6.96,-6.720000000000001,-6.48,-6.24,-6.0,-5.76,-5.5200000000000005,-5.28,-5.04,-4.800000000000001,-4.5600000000000005,-4.32,-4.08,-3.84,-3.5999999999999996,-3.3599999999999994,-3.120000000000001,-2.880000000000001,-2.6400000000000006,-2.4000000000000004,-2.16,-1.92,-1.6799999999999997,-1.4400000000000013,-1.200000000000001,-0.9600000000000009,-0.7200000000000006,-0.4800000000000004,-0.2400000000000002,0.0,0.2400000000000002,0.4800000000000004,0.7199999999999989,0.9599999999999991,1.1999999999999993,1.4399999999999995,1.6799999999999997,1.92,2.16,2.3999999999999986,2.639999999999999,2.879999999999999,3.119999999999999,3.3599999999999994,3.5999999999999996,3.84,4.079999999999998,4.32,4.559999999999999,4.800000000000001,5.039999999999999,5.280000000000001,5.52,5.759999999999998,6.0,6.239999999999998,6.48,6.719999999999999,6.960000000000001,7.199999999999999,7.439999999999998,7.68,7.919999999999998,8.16,8.399999999999999,8.64,8.879999999999999,9.119999999999997,9.36,9.599999999999998,9.84,10.079999999999998,10.32,10.559999999999999,10.8,11.04,11.279999999999998,11.52,11.759999999999998,12.0,0]},\"selected\":{\"id\":\"2211\"},\"selection_policy\":{\"id\":\"2210\"}},\"id\":\"1368\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1554\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1557\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1550\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1382\"},\"glyph\":{\"id\":\"1383\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1385\"},\"nonselection_glyph\":{\"id\":\"1384\"},\"view\":{\"id\":\"1387\"}},\"id\":\"1386\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2265\"},\"group\":null,\"major_label_policy\":{\"id\":\"2266\"},\"ticker\":{\"id\":\"1555\"}},\"id\":\"1554\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1368\"}},\"id\":\"1373\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1562\"},{\"id\":\"1563\"},{\"id\":\"1564\"},{\"id\":\"1565\"},{\"id\":\"1566\"},{\"id\":\"1567\"},{\"id\":\"1698\"}]},\"id\":\"1569\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1370\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1563\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2099\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-0.0,-0.7128,-1.4112,-2.0952,-2.7647999999999997,-3.42,-4.0607999999999995,-4.6872,-5.299199999999999,-5.896800000000001,-6.48,-7.048799999999999,-7.6032,-8.1432,-8.6688,-9.179999999999998,-9.6768,-10.1592,-10.6272,-11.0808,-11.52,-11.9448,-12.355199999999998,-12.751199999999999,-13.132800000000001,-13.5,-13.852799999999998,-14.191199999999998,-14.5152,-14.8248,-15.12,-15.4008,-15.6672,-15.919199999999998,-16.1568,-16.38,-16.5888,-16.7832,-16.9632,-17.1288,-17.28,-17.4168,-17.5392,-17.6472,-17.7408,-17.82,-17.8848,-17.9352,-17.9712,-17.9928,-18.0,-17.9928,-17.9712,-17.935200000000002,-17.8848,-17.82,-17.7408,-17.6472,-17.5392,-17.4168,-17.28,-17.128800000000002,-16.9632,-16.7832,-16.5888,-16.38,-16.1568,-15.919200000000002,-15.6672,-15.400800000000002,-15.12,-14.824800000000002,-14.515199999999998,-14.1912,-13.852800000000002,-13.5,-13.132800000000003,-12.751199999999999,-12.355200000000002,-11.944799999999999,-11.520000000000001,-11.080800000000004,-10.6272,-10.159200000000004,-9.6768,-9.180000000000003,-8.6688,-8.143200000000002,-7.6032000000000055,-7.048800000000002,-6.480000000000005,-5.896800000000001,-5.299200000000004,-4.687199999999999,-4.060800000000003,-3.419999999999998,-2.7648000000000024,-2.095200000000007,-1.4112000000000011,-0.7128000000000059,0.0,0]},\"selected\":{\"id\":\"2214\"},\"selection_policy\":{\"id\":\"2213\"}},\"id\":\"1382\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2262\"},\"group\":null,\"major_label_policy\":{\"id\":\"2263\"},\"ticker\":{\"id\":\"1559\"},\"visible\":false},\"id\":\"1558\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2101\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1558\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1561\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1559\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1383\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2102\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1382\"}},\"id\":\"1387\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1457\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1460\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1390\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1562\",\"type\":\"PanTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1465\"},{\"id\":\"1466\"},{\"id\":\"1467\"},{\"id\":\"1468\"},{\"id\":\"1469\"},{\"id\":\"1470\"},{\"id\":\"1760\"}]},\"id\":\"1472\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"1568\"}},\"id\":\"1564\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1389\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1565\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1450\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1566\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1647\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1649\"},\"nonselection_glyph\":{\"id\":\"1648\"},\"view\":{\"id\":\"1651\"}},\"id\":\"1650\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1386\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1394\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1391\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1453\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1393\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1433\"},{\"id\":\"1434\"},{\"id\":\"1435\"},{\"id\":\"1436\"},{\"id\":\"1437\"},{\"id\":\"1438\"},{\"id\":\"1658\"}]},\"id\":\"1440\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2307\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2167\"},\"selection_policy\":{\"id\":\"2166\"}},\"id\":\"2103\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1466\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1448\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1579\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2308\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"1586\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1589\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2229\"},\"group\":null,\"major_label_policy\":{\"id\":\"2230\"},\"ticker\":{\"id\":\"1758\"}},\"id\":\"1457\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1611\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2309\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2169\"},\"selection_policy\":{\"id\":\"2168\"}},\"id\":\"2104\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2227\"},\"group\":null,\"major_label_policy\":{\"id\":\"2228\"},\"ticker\":{\"id\":\"1462\"},\"visible\":false},\"id\":\"1461\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"1461\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1464\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1595\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2310\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2171\"},\"selection_policy\":{\"id\":\"2170\"}},\"id\":\"2105\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1577\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1584\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1409\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1411\"},\"nonselection_glyph\":{\"id\":\"1410\"},\"view\":{\"id\":\"1413\"}},\"id\":\"1412\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1594\"},{\"id\":\"1595\"},{\"id\":\"1596\"},{\"id\":\"1597\"},{\"id\":\"1598\"},{\"id\":\"1599\"},{\"id\":\"1718\"}]},\"id\":\"1601\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1470\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2173\"},\"selection_policy\":{\"id\":\"2172\"}},\"id\":\"2106\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1410\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2252\"},\"group\":null,\"major_label_policy\":{\"id\":\"2253\"},\"ticker\":{\"id\":\"1587\"}},\"id\":\"1586\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1465\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1471\"}},\"id\":\"1467\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2249\"},\"group\":null,\"major_label_policy\":{\"id\":\"2250\"},\"ticker\":{\"id\":\"1591\"}},\"id\":\"1590\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1468\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis\":{\"id\":\"1590\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1593\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1469\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1471\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1591\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2175\"},\"selection_policy\":{\"id\":\"2174\"}},\"id\":\"2107\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1409\",\"type\":\"Circle\"},{\"attributes\":{\"below\":[{\"id\":\"1425\"}],\"center\":[{\"id\":\"1428\"},{\"id\":\"1432\"}],\"height\":200,\"left\":[{\"id\":\"1429\"}],\"renderers\":[{\"id\":\"1644\"},{\"id\":\"1650\"},{\"id\":\"1656\"}],\"title\":{\"id\":\"1415\"},\"toolbar\":{\"id\":\"1440\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1417\"},\"x_scale\":{\"id\":\"1421\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1423\"}},\"id\":\"1414\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1482\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1457\"}],\"center\":[{\"id\":\"1460\"},{\"id\":\"1464\"}],\"height\":200,\"left\":[{\"id\":\"1461\"}],\"renderers\":[{\"id\":\"1744\"},{\"id\":\"1750\"},{\"id\":\"1756\"}],\"title\":{\"id\":\"1448\"},\"toolbar\":{\"id\":\"1472\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1450\"},\"x_scale\":{\"id\":\"1453\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1455\"}},\"id\":\"1447\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1413\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1599\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1411\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1594\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2311\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2177\"},\"selection_policy\":{\"id\":\"2176\"}},\"id\":\"2108\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1426\",\"type\":\"BasicTicker\"},{\"attributes\":{\"overlay\":{\"id\":\"1600\"}},\"id\":\"1596\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1597\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1598\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2312\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1489\"}],\"center\":[{\"id\":\"1492\"},{\"id\":\"1496\"}],\"height\":200,\"left\":[{\"id\":\"1493\"}],\"renderers\":[{\"id\":\"1664\"},{\"id\":\"1670\"},{\"id\":\"1676\"}],\"title\":{\"id\":\"1480\"},\"toolbar\":{\"id\":\"1504\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1482\"},\"x_scale\":{\"id\":\"1485\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1487\"}},\"id\":\"1479\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1423\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1487\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1415\",\"type\":\"Title\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1600\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1425\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1428\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2235\"},\"group\":null,\"major_label_policy\":{\"id\":\"2236\"},\"ticker\":{\"id\":\"1426\"}},\"id\":\"1425\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2232\"},\"group\":null,\"major_label_policy\":{\"id\":\"2233\"},\"ticker\":{\"id\":\"1430\"},\"visible\":false},\"id\":\"1429\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"LinearScale\"}],\"root_ids\":[\"2087\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
+ " const render_items = [{\"docid\":\"c22caa71-b155-4e16-ad9c-7384d8f7826e\",\"root_ids\":[\"2087\"],\"roots\":{\"2087\":\"8de2cdc4-bf81-4ebc-b851-aa49955eb6f9\"}}];\n",
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
+ "\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " let attempts = 0;\n",
+ " const timer = setInterval(function(root) {\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " clearInterval(timer);\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " attempts++;\n",
+ " if (attempts > 100) {\n",
+ " clearInterval(timer);\n",
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
+ " }\n",
+ " }\n",
+ " }, 10, root)\n",
+ " }\n",
+ "})(window);"
+ ],
+ "application/vnd.bokehjs_exec.v0+json": ""
+ },
+ "metadata": {
+ "application/vnd.bokehjs_exec.v0+json": {
+ "id": "2087"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hidden_code_nb_torsion.main_code(L, h, b, t, A, Iy, Iz, yG, y_n_axis, q, P, Mt, E, N, V, M, T, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr, T_discr)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Legend**\n",
+ "\n",
+ "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
+ "\n",
+ "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
+ "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
+ "* **Slider of thickness t:** move the slider to change the thickness t of the cross-section of the beam.\n",
+ "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
+ "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
+ "* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
+ "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
+ "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
+ "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
+ "* **Button of the force P:** apply or remove the external force P.\n",
+ "* **Button of the torsional moment Mt:** apply or remove the external torsional moment Mt.\n",
+ "* **Figures \"N V M T Diagrams\":** plots that show the axial force N, shear force V, bending moment M and the torsion T diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
+ "* **10 small bottom figures:** plots that show the strains, stresses and right-hand free-body diagram section (with N, V, M and T) only of the left web. By hovering with the cursor over the desired position, a small window will show the height and the value of the stress or strain.\n",
+ "\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
+ "### Recommendations\n",
+ "\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B or Cmd+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
+ "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Simple Beam DEMOs/06-sb_mohr.ipynb b/Simple Beam DEMOs/06-sb_mohr.ipynb
new file mode 100644
index 0000000..c88d9e9
--- /dev/null
+++ b/Simple Beam DEMOs/06-sb_mohr.ipynb
@@ -0,0 +1,669 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# **Simple beam - Mohr Circle**\n",
+ "In this sixth notebook, the Mohr circle is explored. The system, geometry and actions are taken from the previous DEMO \"04-sb_stress\"."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Goals**\n",
+ "\n",
+ "* Describe the Mohr circle and its different parameters\n",
+ "* Identify the relationships between the normal and shear stress using the Mohr circle\n",
+ "* Explain the importance of the orientation of the stress element analysed"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Tasks and exercises**\n",
+ "\n",
+ "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
+ "\n",
+ "1. What are $\\theta_p$ and $\\theta$? Is it correct that there's a 2 multiplier in fornt of the angles in the Mohr circle plot?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " $\\theta_p$ is the principal angle, that characterises the plane that experiences zero shear stress; $\\theta$ is the angle of the rotating stress element with respect to the fixed stress element. It is defined with the reference position set horizontally and the positive direction set counter-clockwise.\n",
+ " \n",
+ " <br>\n",
+ " \n",
+ " Yes, because in the representation of the stress element in a 2D cartesian graph with $\\sigma$ vs. $\\tau$, the angle in the plot is the double of the real inclination of the stress element studied.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "2. Consider the starting configuration and the stress element in the point at y = 150 mm and x = 5.30 m.\n",
+ "\n",
+ " 1. Are the stresses in the fixed stress element principal?\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " No, because the principal stresses corresponds to the stress state with zero shear stress and in the fixed stress element the $\\tau$ stress is not zero.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 2. Which angle $\\theta$ corresponds to a rotating stress element with stresses approximately equal to the principal ones?\n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " By rotating the stress element counter-clockwise by 85.0 degrees, the shear stress are approximately zero, thus the element has stresses approximately equal to the principal ones. The same result could be obtained by rotating the element clockwise by $90-85 = 5$ degrees.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 3. Compute the principal stresses $\\sigma_1$ and $\\sigma_2$ and the principal angle. Can you formulate a relation between the angle of the rotating element $\\theta$ and the principal angle $\\theta_p$ when the stresses inside the rotating element are equal to the principal ones? \n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " The equations to compute the principal stresses are the following:\n",
+ " \n",
+ " $$ \\sigma_{avg} = \\frac{\\sigma_{x0}+\\sigma_{y0}}{2} $$\n",
+ " $$ r_{circle} = \\sqrt{\\tau_0^2 + \\frac{(\\sigma_{x0}-\\sigma_{y0})^2}{4}} $$\n",
+ " $$ \\sigma_1 = \\sigma_{avg} - r_{circle} $$\n",
+ " $$ \\sigma_2 = \\sigma_{avg} + r_{circle} $$\n",
+ " \n",
+ " The equation to compute the principal angle $\\theta_p$ is the following:\n",
+ " \n",
+ " $$ \\theta_p = \\arctan(\\frac{2\\tau_0}{\\sigma_{y0}-\\sigma_{x0}})/2 $$\n",
+ " \n",
+ " With $\\tau_0 = -0.518 MPa$, $\\sigma_{x0} = -6.065 MPa$ and $\\sigma_{y0} = 0 MPa$, the principal stresses are $\\sigma_1 = 0.044 MPa$ and $\\sigma_2 = -6.109 MPa$ and the principal angle is $\\theta_p = -4.84$ degrees.\n",
+ " It's possible to check the results with the stresses inside the rotating element with theta = 85 degrees.\n",
+ " \n",
+ " <br>\n",
+ " <br>\n",
+ " \n",
+ " To formulate the relation between $\\theta$ and $\\theta_p$, let's define the angle $\\theta'$ with the reference position set vertically and the positive direction set counter-clockwise. The relation with the principal angle $\\theta_p$ would be:\n",
+ " $$ \\theta_p = \\theta'$$\n",
+ " The relation between the angle $\\theta'$ and $\\theta$ is the following:\n",
+ " $$\\theta' = \\theta + \\pi/2$$\n",
+ " Thus, the relation between the angle theta and the principal angle theta p is the following:\n",
+ " $$ \\theta_p = \\pi/2 + \\theta $$\n",
+ " This can also be observed in the Mohr circle plot by multiplying the equation above by 2:\n",
+ " $$ 2\\theta_p = \\pi + 2\\theta $$\n",
+ " \n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ "\n",
+ "3. Consider the starting configuration but with q = 5 kN/m and a cross-section with b = 30 mm and h = 300 mm; analyse the welds presented in the figures below.\n",
+ "\n",
+ " 1. Assume a vertical weld positioned at $L_1 = 5 m$ illustrated in red in the figure below.\n",
+ " \n",
+ " <br>\n",
+ " <img src=\"img/Weld1.png\" alt=\"drawing\" width=\"600\"/>\n",
+ " <br>\n",
+ " \n",
+ " In which point the stress state is critical for the design of the weld? Define the minimal normal yield strength of the weld material. \n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " By analysing the stresses along the weld, the critical point is positioned at an height of 0 mm; here the tensile stress is maximum.\n",
+ " <br>\n",
+ " The minimal normal yield strength of the weld material needs to be bigger that the maxiaml tensile stress that is equal to 26.67 MPa, thus a metal with 30 MPa normal yield strength works.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 2. Consider the new weld with an angle $\\beta$ = 55 degrees presented in red the green dot positioned at $L_2 = 0.5 m$ and $h_2 = 80 mm$.\n",
+ " \n",
+ " <br>\n",
+ " <img src=\"img/Weld2.png\" alt=\"drawing\" width=\"600\"/>\n",
+ " <br>\n",
+ " \n",
+ " Define the minimal shear and normal yield strength of the weld material, assuming that the green dot is the critical point. \n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " To define the material characteristics, the critical stress state needs to be studied. The coordinates are defined as x = 0.5 m and y = 80 mm, but in this case, the default stress element ($\\theta$ = 0) is not the correct one, because the plane of the weld is oblique. By rotating the element by 55 degrees, the critical stresses are exposed: tensile stress of 5.57 MPa and shear stress of 2.27 MPa. The weld can be designed by using a metal with 6 MPa normal yield strength and 2.5 MPa shear yield strength.\n",
+ " </details>\n",
+ "\n",
+ " <br>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Build the interactive visualisation tool**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " <div class=\"bk-root\">\n",
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
+ " </div>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ " const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " \n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
+ " \"<p>\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"</p>\\n\"+\n",
+ " \"<ul>\\n\"+\n",
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
+ " \"</ul>\\n\"+\n",
+ " \"<code>\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"</code>\\n\"+\n",
+ " \"</div>\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"1002\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " \n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ " \n",
+ "\n",
+ " const inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " \n",
+ " \n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " \n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " \n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ " if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ "\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Import the packages needed\n",
+ "import sys\n",
+ "sys.path.append('../HiddenCode')\n",
+ "import hidden_code_nb_mohr\n",
+ "import math\n",
+ "import numpy as np\n",
+ "from cienpy import simplebeam as sb\n",
+ "from cienpy import rectangular_section as beam_section\n",
+ "from cienpy import stress_strain_elastic as stst\n",
+ "from cienpy import mohrcircle"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Define the geometry, the external actions, the mechanical property and compute the initial configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Choose the dimensions\n",
+ "L = 6 # [m]\n",
+ "h = 200 # [mm]\n",
+ "b = 100 # [mm]\n",
+ "q = 4; # [kN/m]\n",
+ "P = 10; # [kN]\n",
+ "\n",
+ "# Choose the material parameters\n",
+ "E = 200e3 # [MPa]\n",
+ "\n",
+ "# compute the internal forces (at x=L)\n",
+ "discr_NVM = 101\n",
+ "x_discr = np.linspace(0, L, discr_NVM)\n",
+ "N_discr = sb.compute_N(x_discr, P)\n",
+ "V_discr = sb.compute_V(x_discr, q, L)\n",
+ "M_discr = sb.compute_M(x_discr, q, L)\n",
+ "N = N_discr[-1]\n",
+ "V = V_discr[-1]\n",
+ "M = M_discr[-1]\n",
+ "\n",
+ "# compute the parameters\n",
+ "A = beam_section.compute_area(b, h) # [mm2]\n",
+ "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
+ "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
+ "yG = beam_section.compute_centroid_y(h)\n",
+ "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
+ "\n",
+ "# compute the reactions\n",
+ "Rx = sb.compute_Rx(P)\n",
+ "Ry_l = sb.compute_Ry_l(q, L)\n",
+ "Ry_r = sb.compute_Ry_r(q, L)\n",
+ "\n",
+ "# compute Mohr circle parameters\n",
+ "initial_y = h\n",
+ "initial_theta_element = 0\n",
+ "sigma_axial = stst.compute_sigma_axial(initial_y, N, A)\n",
+ "sigma_bending = stst.compute_sigma_bending(initial_y, M, Iy, yG)\n",
+ "S = beam_section. compute_first_moment_of_area(initial_y, b, h, yG)\n",
+ "sigma_tau = stst.compute_tau_shear(initial_y, V, S, Iy, b)\n",
+ "sigma_x0 = stst.compute_total_sigma(sigma_axial, sigma_bending)\n",
+ "sigma_y0 = 0 # no vertical axial forces\n",
+ "tau_0 = stst.compute_total_tau(sigma_tau)\n",
+ "sigma_average_mohr = mohrcircle.compute_sigma_average_mohr(sigma_x0, sigma_y0)\n",
+ "r_circle_mohr = mohrcircle.compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\n",
+ "theta_principal = mohrcircle.compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\n",
+ "initial_theta = mohrcircle.compute_theta_mohr(initial_theta_element, theta_principal)\n",
+ "\n",
+ "# stress state in function of theta\n",
+ "new_state = mohrcircle.compute_stress_state_mohr(sigma_average_mohr, r_circle_mohr, initial_theta)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the complex code to generate the **interactive visualisation tool**:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " <div class=\"bk-root\" id=\"cf97d42a-8a40-4f6d-aba3-358d43f1dbe1\" data-root-id=\"2164\"></div>\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function embed_document(root) {\n",
+ " \n",
+ " const docs_json = {\"21595604-136d-47e8-80bc-7b0b2dcec6f8\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"2163\"}]},\"id\":\"2164\",\"type\":\"Column\"},{\"attributes\":{\"overlay\":{\"id\":\"1836\"}},\"id\":\"1832\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1515\"}],\"center\":[{\"id\":\"1518\"},{\"id\":\"1522\"}],\"height\":200,\"left\":[{\"id\":\"1519\"}],\"renderers\":[{\"id\":\"1760\"},{\"id\":\"1766\"},{\"id\":\"1772\"}],\"title\":{\"id\":\"1506\"},\"toolbar\":{\"id\":\"1530\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1508\"},\"x_scale\":{\"id\":\"1511\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1513\"}},\"id\":\"1505\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1460\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2264\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1459\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"SaveTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1465\"}},\"id\":\"1461\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2265\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1324\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1463\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1322\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1834\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1465\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2266\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1479\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2267\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1491\"},{\"id\":\"1492\"},{\"id\":\"1493\"},{\"id\":\"1494\"},{\"id\":\"1495\"},{\"id\":\"1496\"},{\"id\":\"1672\"}]},\"id\":\"1498\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2441\"},\"selection_policy\":{\"id\":\"2440\"}},\"id\":\"1125\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2268\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2471\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2489\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1294\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2269\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2472\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1320\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2490\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2270\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1481\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1292\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2271\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1290\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"lightgray\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1044\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2303\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1297\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1474\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2306\"},\"group\":null,\"major_label_policy\":{\"id\":\"2307\"},\"ticker\":{\"id\":\"1297\"},\"visible\":false},\"id\":\"1296\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2272\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1296\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1299\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2304\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1484\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1305\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2273\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1487\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1490\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2491\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2303\"},\"group\":null,\"major_label_policy\":{\"id\":\"2304\"},\"ticker\":{\"id\":\"1301\"}},\"id\":\"1300\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2306\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1300\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1303\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1476\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2492\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1301\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2307\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2274\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1459\"},{\"id\":\"1460\"},{\"id\":\"1461\"},{\"id\":\"1462\"},{\"id\":\"1463\"},{\"id\":\"1464\"},{\"id\":\"1754\"}]},\"id\":\"1466\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis\":{\"id\":\"1483\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1486\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2275\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1304\",\"type\":\"PanTool\"},{\"attributes\":{\"below\":[{\"id\":\"1580\"}],\"center\":[{\"id\":\"1583\"},{\"id\":\"1587\"}],\"height\":200,\"renderers\":[{\"id\":\"1698\"},{\"id\":\"1704\"},{\"id\":\"1710\"}],\"right\":[{\"id\":\"1584\"}],\"title\":{\"id\":\"1571\"},\"toolbar\":{\"id\":\"1595\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1573\"},\"x_scale\":{\"id\":\"1576\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1578\"}},\"id\":\"1570\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"overlay\":{\"id\":\"1310\"}},\"id\":\"1306\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"SaveTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1497\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1308\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2409\"},\"group\":null,\"major_label_policy\":{\"id\":\"2410\"},\"ticker\":{\"id\":\"1484\"}},\"id\":\"1483\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1326\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1329\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2406\"},\"group\":null,\"major_label_policy\":{\"id\":\"2407\"},\"ticker\":{\"id\":\"1488\"},\"visible\":false},\"id\":\"1487\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1310\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1488\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2412\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1330\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1333\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_color\":{\"value\":\"lightgray\"},\"height\":{\"value\":200},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1042\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1506\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1496\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2474\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1491\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1497\"}},\"id\":\"1493\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1562\"}},\"id\":\"1558\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2475\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1513\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1559\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2403\"},\"group\":null,\"major_label_policy\":{\"id\":\"2404\"},\"ticker\":{\"id\":\"1774\"}},\"id\":\"1515\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2457\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1511\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2413\",\"type\":\"AllLabels\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1760\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1776\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2309\"},\"group\":null,\"major_label_policy\":{\"id\":\"2310\"},\"ticker\":{\"id\":\"1331\"}},\"id\":\"1330\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1560\",\"type\":\"ResetTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1304\"},{\"id\":\"1305\"},{\"id\":\"1306\"},{\"id\":\"1307\"},{\"id\":\"1308\"},{\"id\":\"1309\"},{\"id\":\"1374\"}]},\"id\":\"1311\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2309\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2494\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2312\"},\"group\":null,\"major_label_policy\":{\"id\":\"2313\"},\"ticker\":{\"id\":\"1327\"}},\"id\":\"1326\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"lightgray\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1043\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2310\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2495\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1331\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2458\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1327\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2415\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"1548\"}],\"center\":[{\"id\":\"1551\"},{\"id\":\"1555\"}],\"height\":200,\"left\":[{\"id\":\"1552\"}],\"renderers\":[{\"id\":\"1678\"},{\"id\":\"1684\"},{\"id\":\"1690\"}],\"title\":{\"id\":\"1538\"},\"toolbar\":{\"id\":\"1563\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1540\"},\"x_scale\":{\"id\":\"1544\"},\"y_range\":{\"id\":\"1542\"},\"y_scale\":{\"id\":\"1546\"}},\"id\":\"1537\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1125\"},\"glyph\":{\"id\":\"1126\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1128\"},\"nonselection_glyph\":{\"id\":\"1127\"},\"view\":{\"id\":\"1130\"}},\"id\":\"1129\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1844\"},\"glyph\":{\"id\":\"1845\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1847\"},\"nonselection_glyph\":{\"id\":\"1846\"},\"view\":{\"id\":\"1849\"}},\"id\":\"1848\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"2009\"}},\"id\":\"2014\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1134\"},\"glyph\":{\"id\":\"1135\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1137\"},\"nonselection_glyph\":{\"id\":\"1136\"},\"view\":{\"id\":\"1139\"}},\"id\":\"1138\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2418\"},\"group\":null,\"major_label_policy\":{\"id\":\"2419\"},\"ticker\":{\"id\":\"1827\"},\"visible\":false},\"id\":\"1826\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":[0,150.0],\"y\":[0,0]},\"selected\":{\"id\":\"2242\"},\"selection_policy\":{\"id\":\"2241\"}},\"id\":\"2015\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1131\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2355\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1132\",\"type\":\"Arrow\"},{\"attributes\":{\"axis\":{\"id\":\"1515\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1518\",\"type\":\"Grid\"},{\"attributes\":{\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2016\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1125\"}},\"id\":\"1130\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1524\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2015\"},\"glyph\":{\"id\":\"2016\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2018\"},\"nonselection_glyph\":{\"id\":\"2017\"},\"view\":{\"id\":\"2020\"}},\"id\":\"2019\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1134\"}},\"id\":\"1139\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1831\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2017\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1826\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1829\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1131\",\"type\":\"VeeHead\"},{\"attributes\":{\"source\":{\"id\":\"2015\"}},\"id\":\"2020\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"2324\"},\"selection_policy\":{\"id\":\"2323\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2401\"},\"group\":null,\"major_label_policy\":{\"id\":\"2402\"},\"ticker\":{\"id\":\"1520\"},\"visible\":false},\"id\":\"1519\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2033\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1519\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1522\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1280\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2024\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2227\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Rect\"},{\"attributes\":{\"below\":[{\"id\":\"1151\"}],\"center\":[{\"id\":\"1154\"},{\"id\":\"1158\"},{\"id\":\"1219\"},{\"id\":\"1222\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"}],\"height\":200,\"left\":[{\"id\":\"1155\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1177\"},{\"id\":\"1192\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1241\"},{\"id\":\"1247\"}],\"title\":{\"id\":\"1141\"},\"toolbar\":{\"id\":\"1166\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1143\"},\"x_scale\":{\"id\":\"1147\"},\"y_range\":{\"id\":\"1145\"},\"y_scale\":{\"id\":\"1149\"}},\"id\":\"1140\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2018\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1520\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2045\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1830\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2027\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2228\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2021\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2179\"},\"start\":null,\"x_end\":{\"value\":25.0},\"x_start\":{\"value\":25.5},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2022\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1145\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2333\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2021\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1523\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2030\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2280\"},\"group\":null,\"major_label_policy\":{\"id\":\"2281\"},\"ticker\":{\"id\":\"1152\"},\"visible\":false},\"id\":\"1151\",\"type\":\"LinearAxis\"},{\"attributes\":{\"overlay\":{\"id\":\"1529\"}},\"id\":\"1525\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2033\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2183\"},\"start\":null,\"x_end\":{\"value\":20.0},\"x_start\":{\"value\":20.0},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2034\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2277\"},\"group\":null,\"major_label_policy\":{\"id\":\"2278\"},\"ticker\":{\"id\":\"1156\"},\"visible\":false},\"id\":\"1155\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2334\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2024\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2180\"},\"start\":null,\"x_end\":{\"value\":-25.0},\"x_start\":{\"value\":-25.5},\"y_end\":{\"value\":-0.0},\"y_start\":{\"value\":-0.0}},\"id\":\"2025\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1141\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2036\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2184\"},\"start\":null,\"x_end\":{\"value\":-20.0},\"x_start\":{\"value\":-20.0},\"y_end\":{\"value\":-0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2037\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1527\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1836\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2027\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2181\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":25.0},\"y_start\":{\"value\":25.0}},\"id\":\"2028\",\"type\":\"Arrow\"},{\"attributes\":{\"axis\":{\"id\":\"1151\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1154\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1529\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2036\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1155\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1158\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2030\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2182\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":-25.0},\"y_start\":{\"value\":-25.0}},\"id\":\"2031\",\"type\":\"Arrow\"},{\"attributes\":{\"below\":[{\"id\":\"1612\"}],\"center\":[{\"id\":\"1615\"},{\"id\":\"1619\"}],\"height\":200,\"renderers\":[{\"id\":\"1718\"},{\"id\":\"1724\"},{\"id\":\"1730\"}],\"right\":[{\"id\":\"1616\"}],\"title\":{\"id\":\"1603\"},\"toolbar\":{\"id\":\"1627\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1605\"},\"x_scale\":{\"id\":\"1608\"},\"y_range\":{\"id\":\"1542\"},\"y_scale\":{\"id\":\"1610\"}},\"id\":\"1602\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2042\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1149\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2048\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1164\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2051\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2039\",\"type\":\"VeeHead\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2054\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1156\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2039\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2185\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":20.0},\"y_start\":{\"value\":20.0}},\"id\":\"2040\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2057\",\"type\":\"VeeHead\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2042\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2186\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":-20.0},\"y_start\":{\"value\":-20.0}},\"id\":\"2043\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1160\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2060\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1159\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2360\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2045\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2187\"},\"start\":null,\"x_end\":{\"value\":145.0},\"x_start\":{\"value\":145.5},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2046\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2229\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1165\"}},\"id\":\"1161\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2063\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1162\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2335\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2048\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2188\"},\"start\":null,\"x_end\":{\"value\":95.0},\"x_start\":{\"value\":94.5},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2049\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2230\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1163\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2066\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2336\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2051\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2189\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":25.0},\"y_start\":{\"value\":25.0}},\"id\":\"2052\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"hatch_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"radius\":{\"value\":0.25},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2070\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"1548\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1551\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1165\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2054\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2190\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":-25.0},\"y_start\":{\"value\":-25.0}},\"id\":\"2055\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2057\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2191\"},\"start\":null,\"x_end\":{\"value\":140.0},\"x_start\":{\"value\":140.0},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2058\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2231\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"gray\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"radius\":{\"value\":0.25},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2071\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2361\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2452\"},\"selection_policy\":{\"id\":\"2451\"}},\"id\":\"1862\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2060\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2192\"},\"start\":null,\"x_end\":{\"value\":100.0},\"x_start\":{\"value\":100.0},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2061\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2285\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2078\",\"type\":\"Arc\"},{\"attributes\":{},\"id\":\"1542\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2063\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2193\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":20.0},\"y_start\":{\"value\":20.0}},\"id\":\"2064\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1847\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2069\"},\"glyph\":{\"id\":\"2070\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2072\"},\"nonselection_glyph\":{\"id\":\"2071\"},\"view\":{\"id\":\"2074\"}},\"id\":\"2073\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2066\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2194\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":-20.0},\"y_start\":{\"value\":-20.0}},\"id\":\"2067\",\"type\":\"Arrow\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1845\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1549\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[-0.25],\"y\":[0]},\"selected\":{\"id\":\"2205\"},\"selection_policy\":{\"id\":\"2204\"}},\"id\":\"2075\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2334\"},\"selection_policy\":{\"id\":\"2333\"}},\"id\":\"1236\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-0.25],\"y\":[0]},\"selected\":{\"id\":\"2203\"},\"selection_policy\":{\"id\":\"2202\"}},\"id\":\"2069\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2286\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1546\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2450\"},\"selection_policy\":{\"id\":\"2449\"}},\"id\":\"1844\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"gray\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"radius\":{\"value\":0.25},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2072\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"2069\"}},\"id\":\"2074\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2076\",\"type\":\"Arc\"},{\"attributes\":{},\"id\":\"2232\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1830\"},{\"id\":\"1831\"},{\"id\":\"1832\"},{\"id\":\"1833\"},{\"id\":\"1834\"},{\"id\":\"1835\"}]},\"id\":\"1837\",\"type\":\"Toolbar\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2077\",\"type\":\"Arc\"},{\"attributes\":{\"source\":{\"id\":\"1844\"}},\"id\":\"1849\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2295\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"tools\":[{\"id\":\"1523\"},{\"id\":\"1524\"},{\"id\":\"1525\"},{\"id\":\"1526\"},{\"id\":\"1527\"},{\"id\":\"1528\"},{\"id\":\"1776\"}]},\"id\":\"1530\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2490\"},\"selection_policy\":{\"id\":\"2489\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2075\"},\"glyph\":{\"id\":\"2076\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2078\"},\"nonselection_glyph\":{\"id\":\"2077\"},\"view\":{\"id\":\"2080\"}},\"id\":\"2079\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1538\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1846\",\"type\":\"Line\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2082\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1540\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1865\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2075\"}},\"id\":\"2080\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2458\"},\"selection_policy\":{\"id\":\"2457\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2083\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1544\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[-0.125],\"y\":[0]},\"selected\":{\"id\":\"2207\"},\"selection_policy\":{\"id\":\"2206\"}},\"id\":\"2081\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2428\"},\"group\":null,\"major_label_policy\":{\"id\":\"2429\"},\"ticker\":{\"id\":\"1549\"}},\"id\":\"1548\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2087\"},\"glyph\":{\"id\":\"2088\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2090\"},\"nonselection_glyph\":{\"id\":\"2089\"},\"view\":{\"id\":\"2092\"}},\"id\":\"2091\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1573\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2088\",\"type\":\"Arc\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1557\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2089\",\"type\":\"Arc\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-0.25],\"y\":[0]},\"selected\":{\"id\":\"2209\"},\"selection_policy\":{\"id\":\"2208\"}},\"id\":\"2087\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1552\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1555\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2425\"},\"group\":null,\"major_label_policy\":{\"id\":\"2426\"},\"ticker\":{\"id\":\"1553\"},\"visible\":false},\"id\":\"1552\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2084\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2081\"},\"glyph\":{\"id\":\"2082\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2084\"},\"nonselection_glyph\":{\"id\":\"2083\"},\"view\":{\"id\":\"2086\"}},\"id\":\"2085\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1553\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"2081\"}},\"id\":\"2086\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1856\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2388\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1857\",\"type\":\"Arrow\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2090\",\"type\":\"Arc\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1383\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1864\",\"type\":\"Line\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2094\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1859\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1561\",\"type\":\"HelpTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1159\"},{\"id\":\"1160\"},{\"id\":\"1161\"},{\"id\":\"1162\"},{\"id\":\"1163\"},{\"id\":\"1164\"}]},\"id\":\"1166\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2233\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1859\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2423\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1860\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"2087\"}},\"id\":\"2092\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1556\",\"type\":\"PanTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2095\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2234\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2454\"},\"selection_policy\":{\"id\":\"2453\"}},\"id\":\"1869\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[-0.15],\"y\":[0]},\"selected\":{\"id\":\"2211\"},\"selection_policy\":{\"id\":\"2210\"}},\"id\":\"2093\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1862\"},\"glyph\":{\"id\":\"1864\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1866\"},\"nonselection_glyph\":{\"id\":\"1865\"},\"view\":{\"id\":\"1868\"}},\"id\":\"1867\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2106\",\"type\":\"Circle\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1869\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"blue\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2100\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1423\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1426\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2338\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2101\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2213\"},\"selection_policy\":{\"id\":\"2212\"}},\"id\":\"2099\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2339\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"2367\"},\"selection_policy\":{\"id\":\"2366\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1866\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1869\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2096\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1862\"}},\"id\":\"1868\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1562\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2093\"},\"glyph\":{\"id\":\"2094\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2096\"},\"nonselection_glyph\":{\"id\":\"2095\"},\"view\":{\"id\":\"2098\"}},\"id\":\"2097\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"tools\":[{\"id\":\"1556\"},{\"id\":\"1557\"},{\"id\":\"1558\"},{\"id\":\"1559\"},{\"id\":\"1560\"},{\"id\":\"1561\"},{\"id\":\"1692\"}]},\"id\":\"1563\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"2093\"}},\"id\":\"2098\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"2099\"}},\"id\":\"2104\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2340\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2099\"},\"glyph\":{\"id\":\"2100\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2102\"},\"nonselection_glyph\":{\"id\":\"2101\"},\"view\":{\"id\":\"2104\"}},\"id\":\"2103\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1380\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1388\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2287\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2102\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2456\"},\"selection_policy\":{\"id\":\"2455\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2437\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"2159\"}]},\"id\":\"2160\",\"type\":\"Row\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2401\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"black\"},\"height\":{\"value\":30.0},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1974\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"marker\":{\"value\":\"square\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y_var\"}},\"id\":\"1895\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2402\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"marker\":{\"value\":\"square\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y_var\"}},\"id\":\"1896\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2403\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"2153\"},{\"id\":\"2160\"}]},\"id\":\"2161\",\"type\":\"Column\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"marker\":{\"value\":\"square\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y_var\"}},\"id\":\"1894\",\"type\":\"Scatter\"},{\"attributes\":{\"end\":200,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2144\"}]},\"start\":0,\"title\":\"Change the height y along the section [mm]\",\"value\":200},\"id\":\"1899\",\"type\":\"Slider\"},{\"attributes\":{\"children\":[{\"id\":\"1901\"},{\"id\":\"1934\"}]},\"id\":\"2162\",\"type\":\"Column\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1641\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1643\"},\"nonselection_glyph\":{\"id\":\"1642\"},\"view\":{\"id\":\"1645\"}},\"id\":\"1644\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"fixed_location\":0,\"formatter\":{\"id\":\"2171\"},\"group\":null,\"major_label_policy\":{\"id\":\"2172\"},\"ticker\":{\"id\":\"1913\"}},\"id\":\"1912\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2379\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2404\",\"type\":\"AllLabels\"},{\"attributes\":{\"below\":[{\"id\":\"1912\"}],\"center\":[{\"id\":\"1915\"},{\"id\":\"1919\"}],\"left\":[{\"id\":\"1916\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"2073\"},{\"id\":\"2079\"},{\"id\":\"2085\"},{\"id\":\"2091\"},{\"id\":\"2097\"},{\"id\":\"2103\"},{\"id\":\"2109\"},{\"id\":\"2115\"},{\"id\":\"2121\"},{\"id\":\"2127\"},{\"id\":\"2133\"}],\"title\":{\"id\":\"1902\"},\"toolbar\":{\"id\":\"1927\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1904\"},\"x_scale\":{\"id\":\"1908\"},\"y_range\":{\"id\":\"1906\"},\"y_scale\":{\"id\":\"1910\"}},\"id\":\"1901\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2244\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":90,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2143\"}]},\"start\":0,\"step\":0.5,\"title\":\"Change the angle \\u03b8 of the element [\\u00b0]\",\"value\":0},\"id\":\"1900\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"2380\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"2161\"},{\"id\":\"2162\"}]},\"id\":\"2163\",\"type\":\"Row\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":180.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":180.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1968\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2245\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1904\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-40.0]},\"selected\":{\"id\":\"2361\"},\"selection_policy\":{\"id\":\"2360\"}},\"id\":\"1053\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1576\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1605\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1908\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2204\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1906\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2205\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2246\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Mohr circle, x axis: stress \\u03c3 [MPa], y axis: stress \\u03c4 [MPa]\"},\"id\":\"1902\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1580\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1583\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1921\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1571\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1912\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1915\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2247\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1581\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1910\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1589\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"fixed_location\":0,\"formatter\":{\"id\":\"2168\"},\"group\":null,\"major_label_policy\":{\"id\":\"2169\"},\"ticker\":{\"id\":\"1917\"}},\"id\":\"1916\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1578\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1916\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1919\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2415\"},\"group\":null,\"major_label_policy\":{\"id\":\"2416\"},\"ticker\":{\"id\":\"1581\"}},\"id\":\"1580\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1913\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2248\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2412\"},\"group\":null,\"major_label_policy\":{\"id\":\"2413\"},\"ticker\":{\"id\":\"1585\"}},\"id\":\"1584\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1917\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1584\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1587\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2249\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1585\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1424\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1925\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1920\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1593\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1926\"}},\"id\":\"1922\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1588\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1923\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2206\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2250\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1924\",\"type\":\"ResetTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1594\"}},\"id\":\"1590\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1591\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1592\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2207\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2251\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1926\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1594\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1939\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1391\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1608\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2252\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2449\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":180.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":180.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1970\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2208\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2406\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2253\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2450\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2228\"},\"selection_policy\":{\"id\":\"2227\"}},\"id\":\"1973\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2407\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1967\"}},\"id\":\"1972\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":180.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":180.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1969\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2254\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1392\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2409\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1967\"},\"glyph\":{\"id\":\"1968\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1970\"},\"nonselection_glyph\":{\"id\":\"1969\"},\"view\":{\"id\":\"1972\"}},\"id\":\"1971\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1612\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1615\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2255\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2410\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Stress state\"},\"id\":\"1935\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2209\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1626\"}},\"id\":\"1622\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2470\"},\"selection_policy\":{\"id\":\"2469\"}},\"id\":\"1634\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2363\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2256\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1613\",\"type\":\"BasicTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"1588\"},{\"id\":\"1589\"},{\"id\":\"1590\"},{\"id\":\"1591\"},{\"id\":\"1592\"},{\"id\":\"1593\"},{\"id\":\"1712\"}]},\"id\":\"1595\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2451\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1941\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2257\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2258\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1603\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2452\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1945\"}],\"center\":[{\"id\":\"1948\"},{\"id\":\"1952\"},{\"id\":\"2022\"},{\"id\":\"2025\"},{\"id\":\"2028\"},{\"id\":\"2031\"},{\"id\":\"2034\"},{\"id\":\"2037\"},{\"id\":\"2040\"},{\"id\":\"2043\"},{\"id\":\"2046\"},{\"id\":\"2049\"},{\"id\":\"2052\"},{\"id\":\"2055\"},{\"id\":\"2058\"},{\"id\":\"2061\"},{\"id\":\"2064\"},{\"id\":\"2067\"}],\"left\":[{\"id\":\"1949\"}],\"match_aspect\":true,\"min_border_left\":0,\"renderers\":[{\"id\":\"1971\"},{\"id\":\"1977\"},{\"id\":\"1983\"},{\"id\":\"1989\"},{\"id\":\"1995\"},{\"id\":\"2001\"},{\"id\":\"2007\"},{\"id\":\"2013\"},{\"id\":\"2019\"}],\"title\":{\"id\":\"1935\"},\"toolbar\":{\"id\":\"1960\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1937\"},\"x_scale\":{\"id\":\"1941\"},\"y_range\":{\"id\":\"1939\"},\"y_scale\":{\"id\":\"1943\"}},\"id\":\"1934\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2259\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1634\"},\"glyph\":{\"id\":\"1635\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1637\"},\"nonselection_glyph\":{\"id\":\"1636\"},\"view\":{\"id\":\"1639\"}},\"id\":\"1638\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1621\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1610\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1616\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1619\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1937\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2260\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2434\"},\"group\":null,\"major_label_policy\":{\"id\":\"2435\"},\"ticker\":{\"id\":\"1613\"}},\"id\":\"1612\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2210\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1920\"},{\"id\":\"1921\"},{\"id\":\"1922\"},{\"id\":\"1923\"},{\"id\":\"1924\"},{\"id\":\"1925\"},{\"id\":\"2135\"}]},\"id\":\"1927\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2261\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1617\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2177\"},\"group\":null,\"major_label_policy\":{\"id\":\"2178\"},\"ticker\":{\"id\":\"1946\"},\"visible\":false},\"id\":\"1945\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2431\"},\"group\":null,\"major_label_policy\":{\"id\":\"2432\"},\"ticker\":{\"id\":\"1617\"}},\"id\":\"1616\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2211\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1625\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1950\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2174\"},\"group\":null,\"major_label_policy\":{\"id\":\"2175\"},\"ticker\":{\"id\":\"1950\"},\"visible\":false},\"id\":\"1949\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1620\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2262\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1620\"},{\"id\":\"1621\"},{\"id\":\"1622\"},{\"id\":\"1623\"},{\"id\":\"1624\"},{\"id\":\"1625\"},{\"id\":\"1732\"}]},\"id\":\"1627\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1945\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1948\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2453\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1943\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1624\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2263\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1626\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1946\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2454\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2446\"},\"selection_policy\":{\"id\":\"2445\"}},\"id\":\"2354\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2390\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1759\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2372\"},\"selection_policy\":{\"id\":\"2371\"}},\"id\":\"1348\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2391\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1335\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1757\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2448\"},\"selection_policy\":{\"id\":\"2447\"}},\"id\":\"2355\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2392\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1340\"}},\"id\":\"1336\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2475\"},\"selection_policy\":{\"id\":\"2474\"}},\"id\":\"1756\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1774\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1764\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1338\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2393\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1756\"}},\"id\":\"1761\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1758\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2383\"},\"group\":null,\"major_label_policy\":{\"id\":\"2384\"},\"ticker\":{\"id\":\"1794\"},\"visible\":false},\"id\":\"1793\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1340\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1763\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1351\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1793\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1796\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2460\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1789\"}],\"center\":[{\"id\":\"1792\"},{\"id\":\"1796\"},{\"id\":\"1857\"}],\"height\":200,\"left\":[{\"id\":\"1793\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1848\"},{\"id\":\"1867\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"}],\"title\":{\"id\":\"1779\"},\"toolbar\":{\"id\":\"1804\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1781\"},\"x_scale\":{\"id\":\"1785\"},\"y_range\":{\"id\":\"1783\"},\"y_scale\":{\"id\":\"1787\"}},\"id\":\"1778\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1419\"}],\"center\":[{\"id\":\"1422\"},{\"id\":\"1426\"}],\"height\":200,\"left\":[{\"id\":\"1423\"}],\"renderers\":[{\"id\":\"1638\"},{\"id\":\"1644\"},{\"id\":\"1650\"}],\"title\":{\"id\":\"1409\"},\"toolbar\":{\"id\":\"1434\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1411\"},\"x_scale\":{\"id\":\"1415\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1417\"}},\"id\":\"1408\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1767\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1769\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2477\"},\"selection_policy\":{\"id\":\"2476\"}},\"id\":\"1768\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1768\"},\"glyph\":{\"id\":\"1769\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1771\"},\"nonselection_glyph\":{\"id\":\"1770\"},\"view\":{\"id\":\"1773\"}},\"id\":\"1772\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1770\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2168\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"1451\"}],\"center\":[{\"id\":\"1454\"},{\"id\":\"1458\"}],\"height\":200,\"left\":[{\"id\":\"1455\"}],\"renderers\":[{\"id\":\"1738\"},{\"id\":\"1744\"},{\"id\":\"1750\"}],\"title\":{\"id\":\"1442\"},\"toolbar\":{\"id\":\"1466\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1444\"},\"x_scale\":{\"id\":\"1447\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1449\"}},\"id\":\"1441\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2290\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1856\",\"type\":\"VeeHead\"},{\"attributes\":{\"source\":{\"id\":\"1768\"}},\"id\":\"1773\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2169\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2291\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1781\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1420\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2461\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1822\"}],\"center\":[{\"id\":\"1825\"},{\"id\":\"1829\"},{\"id\":\"1860\"}],\"height\":200,\"left\":[{\"id\":\"1826\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1812\"},\"toolbar\":{\"id\":\"1837\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1814\"},\"x_scale\":{\"id\":\"1818\"},\"y_range\":{\"id\":\"1816\"},\"y_scale\":{\"id\":\"1820\"}},\"id\":\"1811\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2171\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2293\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1785\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1783\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2172\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2294\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2484\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1802\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1794\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2485\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1779\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1348\"},\"glyph\":{\"id\":\"1349\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1351\"},\"nonselection_glyph\":{\"id\":\"1350\"},\"view\":{\"id\":\"1353\"}},\"id\":\"1352\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":158.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1062\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1801\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1797\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1798\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1803\"}},\"id\":\"1799\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2395\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2356\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1334\"},{\"id\":\"1335\"},{\"id\":\"1336\"},{\"id\":\"1337\"},{\"id\":\"1338\"},{\"id\":\"1339\"},{\"id\":\"1388\"}]},\"id\":\"1341\",\"type\":\"Toolbar\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1068\",\"type\":\"Text\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2370\"},\"selection_policy\":{\"id\":\"2369\"}},\"id\":\"2295\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1348\"}},\"id\":\"1353\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2357\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2396\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1349\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1803\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1350\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1364\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2398\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1357\",\"type\":\"Line\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2399\",\"type\":\"AllLabels\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1352\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1360\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2369\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2463\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1362\"},\"glyph\":{\"id\":\"1363\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1365\"},\"nonselection_glyph\":{\"id\":\"1364\"},\"view\":{\"id\":\"1367\"}},\"id\":\"1366\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1359\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"2492\"},\"selection_policy\":{\"id\":\"2491\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2437\"},\"selection_policy\":{\"id\":\"2436\"}},\"id\":\"1104\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1365\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1369\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1371\"},\"nonselection_glyph\":{\"id\":\"1370\"},\"view\":{\"id\":\"1373\"}},\"id\":\"1372\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-12.0,-11.76,-11.52,-11.28,-11.04,-10.8,-10.56,-10.32,-10.08,-9.84,-9.6,-9.36,-9.120000000000001,-8.879999999999999,-8.64,-8.4,-8.16,-7.92,-7.68,-7.44,-7.2,-6.96,-6.720000000000001,-6.48,-6.24,-6.0,-5.76,-5.5200000000000005,-5.28,-5.04,-4.800000000000001,-4.5600000000000005,-4.32,-4.08,-3.84,-3.5999999999999996,-3.3599999999999994,-3.120000000000001,-2.880000000000001,-2.6400000000000006,-2.4000000000000004,-2.16,-1.92,-1.6799999999999997,-1.4400000000000013,-1.200000000000001,-0.9600000000000009,-0.7200000000000006,-0.4800000000000004,-0.2400000000000002,0.0,0.2400000000000002,0.4800000000000004,0.7199999999999989,0.9599999999999991,1.1999999999999993,1.4399999999999995,1.6799999999999997,1.92,2.16,2.3999999999999986,2.639999999999999,2.879999999999999,3.119999999999999,3.3599999999999994,3.5999999999999996,3.84,4.079999999999998,4.32,4.559999999999999,4.800000000000001,5.039999999999999,5.280000000000001,5.52,5.759999999999998,6.0,6.239999999999998,6.48,6.719999999999999,6.960000000000001,7.199999999999999,7.439999999999998,7.68,7.919999999999998,8.16,8.399999999999999,8.64,8.879999999999999,9.119999999999997,9.36,9.599999999999998,9.84,10.079999999999998,10.32,10.559999999999999,10.8,11.04,11.279999999999998,11.52,11.759999999999998,12.0,0]},\"selected\":{\"id\":\"2377\"},\"selection_policy\":{\"id\":\"2376\"}},\"id\":\"1362\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1812\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1370\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2358\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1378\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":320.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":160.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1105\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2486\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1362\"}},\"id\":\"1367\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2359\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2487\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1816\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1483\"}],\"center\":[{\"id\":\"1486\"},{\"id\":\"1490\"}],\"height\":200,\"left\":[{\"id\":\"1487\"}],\"renderers\":[{\"id\":\"1658\"},{\"id\":\"1664\"},{\"id\":\"1670\"}],\"title\":{\"id\":\"1474\"},\"toolbar\":{\"id\":\"1498\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1476\"},\"x_scale\":{\"id\":\"1479\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1481\"}},\"id\":\"1473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1371\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1823\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2297\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-0.0,-0.7128,-1.4112,-2.0952,-2.7647999999999997,-3.42,-4.0607999999999995,-4.6872,-5.299199999999999,-5.896800000000001,-6.48,-7.048799999999999,-7.6032,-8.1432,-8.6688,-9.179999999999998,-9.6768,-10.1592,-10.6272,-11.0808,-11.52,-11.9448,-12.355199999999998,-12.751199999999999,-13.132800000000001,-13.5,-13.852799999999998,-14.191199999999998,-14.5152,-14.8248,-15.12,-15.4008,-15.6672,-15.919199999999998,-16.1568,-16.38,-16.5888,-16.7832,-16.9632,-17.1288,-17.28,-17.4168,-17.5392,-17.6472,-17.7408,-17.82,-17.8848,-17.9352,-17.9712,-17.9928,-18.0,-17.9928,-17.9712,-17.935200000000002,-17.8848,-17.82,-17.7408,-17.6472,-17.5392,-17.4168,-17.28,-17.128800000000002,-16.9632,-16.7832,-16.5888,-16.38,-16.1568,-15.919200000000002,-15.6672,-15.400800000000002,-15.12,-14.824800000000002,-14.515199999999998,-14.1912,-13.852800000000002,-13.5,-13.132800000000003,-12.751199999999999,-12.355200000000002,-11.944799999999999,-11.520000000000001,-11.080800000000004,-10.6272,-10.159200000000004,-9.6768,-9.180000000000003,-8.6688,-8.143200000000002,-7.6032000000000055,-7.048800000000002,-6.480000000000005,-5.896800000000001,-5.299200000000004,-4.687199999999999,-4.060800000000003,-3.419999999999998,-2.7648000000000024,-2.095200000000007,-1.4112000000000011,-0.7128000000000059,0.0,0]},\"selected\":{\"id\":\"2380\"},\"selection_policy\":{\"id\":\"2379\"}},\"id\":\"1376\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1814\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1366\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1374\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1091\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1383\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1385\"},\"nonselection_glyph\":{\"id\":\"1384\"},\"view\":{\"id\":\"1387\"}},\"id\":\"1386\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1376\"},\"glyph\":{\"id\":\"1377\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1379\"},\"nonselection_glyph\":{\"id\":\"1378\"},\"view\":{\"id\":\"1381\"}},\"id\":\"1380\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2298\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1376\"}},\"id\":\"1381\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2371\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2300\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1373\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1797\"},{\"id\":\"1798\"},{\"id\":\"1799\"},{\"id\":\"1800\"},{\"id\":\"1801\"},{\"id\":\"1802\"}]},\"id\":\"1804\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2421\"},\"group\":null,\"major_label_policy\":{\"id\":\"2422\"},\"ticker\":{\"id\":\"1823\"},\"visible\":false},\"id\":\"1822\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1818\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2301\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1377\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1379\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1822\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1825\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2220\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2221\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1688\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1835\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1701\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1703\"},\"nonselection_glyph\":{\"id\":\"1702\"},\"view\":{\"id\":\"1705\"}},\"id\":\"1704\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1678\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1692\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"1686\"}},\"id\":\"1691\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2464\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1641\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2465\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2503\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2425\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2504\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2222\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2426\",\"type\":\"AllLabels\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1638\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1652\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2223\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2428\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1635\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2376\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2429\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2377\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1637\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2466\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1634\"}},\"id\":\"1639\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1636\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2467\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1642\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1689\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1694\"},\"glyph\":{\"id\":\"1695\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1697\"},\"nonselection_glyph\":{\"id\":\"1696\"},\"view\":{\"id\":\"1699\"}},\"id\":\"1698\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1643\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1649\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1647\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1645\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1677\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2480\"},\"selection_policy\":{\"id\":\"2479\"}},\"id\":\"1654\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2472\"},\"selection_policy\":{\"id\":\"2471\"}},\"id\":\"1646\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1646\"},\"glyph\":{\"id\":\"1647\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1649\"},\"nonselection_glyph\":{\"id\":\"1648\"},\"view\":{\"id\":\"1651\"}},\"id\":\"1650\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1654\"},\"glyph\":{\"id\":\"1655\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1657\"},\"nonselection_glyph\":{\"id\":\"1656\"},\"view\":{\"id\":\"1659\"}},\"id\":\"1658\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1648\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1674\"}},\"id\":\"1679\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1646\"}},\"id\":\"1651\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1657\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1674\"},\"glyph\":{\"id\":\"1675\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1677\"},\"nonselection_glyph\":{\"id\":\"1676\"},\"view\":{\"id\":\"1679\"}},\"id\":\"1678\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1658\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1672\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2431\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1666\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1095\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1654\"}},\"id\":\"1659\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2432\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1656\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2434\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2225\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1686\"},\"glyph\":{\"id\":\"1687\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1689\"},\"nonselection_glyph\":{\"id\":\"1688\"},\"view\":{\"id\":\"1691\"}},\"id\":\"1690\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2435\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1676\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2469\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2226\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2470\",\"type\":\"Selection\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1681\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1683\"},\"nonselection_glyph\":{\"id\":\"1682\"},\"view\":{\"id\":\"1685\"}},\"id\":\"1684\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2482\"},\"selection_policy\":{\"id\":\"2481\"}},\"id\":\"1666\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1093\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1666\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2497\"},\"selection_policy\":{\"id\":\"2496\"}},\"id\":\"1674\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1094\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1958\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2325\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1949\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1952\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2326\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1954\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1953\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1959\"}},\"id\":\"1955\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1956\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2445\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1957\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2446\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1959\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":[120],\"y\":[0]},\"selected\":{\"id\":\"2232\"},\"selection_policy\":{\"id\":\"2231\"}},\"id\":\"1985\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1096\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2447\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2448\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1973\"}},\"id\":\"1978\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1528\",\"type\":\"HelpTool\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1981\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2327\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1976\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2328\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1980\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2416\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1975\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1979\"},\"glyph\":{\"id\":\"1980\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1982\"},\"nonselection_glyph\":{\"id\":\"1981\"},\"view\":{\"id\":\"1984\"}},\"id\":\"1983\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2329\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[60.0],\"y\":[60.0]},\"selected\":{\"id\":\"2226\"},\"selection_policy\":{\"id\":\"2225\"}},\"id\":\"1967\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2330\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1953\"},{\"id\":\"1954\"},{\"id\":\"1955\"},{\"id\":\"1956\"},{\"id\":\"1957\"},{\"id\":\"1958\"}]},\"id\":\"1960\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"text\":[\"Fixed \\nelement\"],\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2230\"},\"selection_policy\":{\"id\":\"2229\"}},\"id\":\"1979\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1979\"}},\"id\":\"1984\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1973\"},\"glyph\":{\"id\":\"1974\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1976\"},\"nonselection_glyph\":{\"id\":\"1975\"},\"view\":{\"id\":\"1978\"}},\"id\":\"1977\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1998\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1987\",\"type\":\"Rect\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1982\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"black\"},\"height\":{\"value\":30.0},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1986\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1985\"},\"glyph\":{\"id\":\"1986\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1988\"},\"nonselection_glyph\":{\"id\":\"1987\"},\"view\":{\"id\":\"1990\"}},\"id\":\"1989\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1991\"},\"glyph\":{\"id\":\"1992\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1994\"},\"nonselection_glyph\":{\"id\":\"1993\"},\"view\":{\"id\":\"1996\"}},\"id\":\"1995\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1992\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2011\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2331\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1988\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1985\"}},\"id\":\"1990\",\"type\":\"CDSView\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1993\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2332\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"text\":[\"Rotating \\nelement\"],\"x\":[120],\"y\":[0]},\"selected\":{\"id\":\"2234\"},\"selection_policy\":{\"id\":\"2233\"}},\"id\":\"1991\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,150.0],\"y\":[0,0]},\"selected\":{\"id\":\"2236\"},\"selection_policy\":{\"id\":\"2235\"}},\"id\":\"1997\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1991\"}},\"id\":\"1996\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2465\"},\"selection_policy\":{\"id\":\"2464\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2012\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1999\",\"type\":\"Line\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1994\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2009\"},\"glyph\":{\"id\":\"2010\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2012\"},\"nonselection_glyph\":{\"id\":\"2011\"},\"view\":{\"id\":\"2014\"}},\"id\":\"2013\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1997\"},\"glyph\":{\"id\":\"1998\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2000\"},\"nonselection_glyph\":{\"id\":\"1999\"},\"view\":{\"id\":\"2002\"}},\"id\":\"2001\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1997\"}},\"id\":\"2002\",\"type\":\"CDSView\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":60},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2006\",\"type\":\"Arc\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":60},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2004\",\"type\":\"Arc\"},{\"attributes\":{\"source\":{\"id\":\"2003\"}},\"id\":\"2008\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2000\",\"type\":\"Line\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2010\",\"type\":\"Text\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":60},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2005\",\"type\":\"Arc\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[60],\"y\":[0]},\"selected\":{\"id\":\"2240\"},\"selection_policy\":{\"id\":\"2239\"}},\"id\":\"2009\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2238\"},\"selection_policy\":{\"id\":\"2237\"}},\"id\":\"2003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2003\"},\"glyph\":{\"id\":\"2004\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2006\"},\"nonselection_glyph\":{\"id\":\"2005\"},\"view\":{\"id\":\"2008\"}},\"id\":\"2007\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2108\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2341\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2235\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2312\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2496\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2107\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2313\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1682\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2215\"},\"selection_policy\":{\"id\":\"2214\"}},\"id\":\"2105\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1789\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1792\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2497\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"2105\"}},\"id\":\"2110\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2236\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2342\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1696\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2113\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2277\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2476\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1702\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2105\"},\"glyph\":{\"id\":\"2106\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2108\"},\"nonselection_glyph\":{\"id\":\"2107\"},\"view\":{\"id\":\"2110\"}},\"id\":\"2109\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2343\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1683\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"Fixed element \\n(\\u03c3\\u2093\\u2080, \\u03c4\\u2080)\",\"Fixed element \\n(\\u03c3\\u1d67\\u2080, -\\u03c4\\u2080)\"],\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2217\"},\"selection_policy\":{\"id\":\"2216\"}},\"id\":\"2111\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2278\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2477\",\"type\":\"Selection\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2112\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1685\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2219\"},\"selection_policy\":{\"id\":\"2218\"}},\"id\":\"2117\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1697\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2114\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2280\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1698\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1712\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2344\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2499\"},\"selection_policy\":{\"id\":\"2498\"}},\"id\":\"1686\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"red\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2118\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2111\"},\"glyph\":{\"id\":\"2112\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2114\"},\"nonselection_glyph\":{\"id\":\"2113\"},\"view\":{\"id\":\"2116\"}},\"id\":\"2115\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2281\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1695\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2111\"}},\"id\":\"2116\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2345\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2485\"},\"selection_policy\":{\"id\":\"2484\"}},\"id\":\"1694\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2119\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1694\"}},\"id\":\"1699\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2438\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2221\"},\"selection_policy\":{\"id\":\"2220\"}},\"id\":\"2123\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1701\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2123\"}},\"id\":\"2128\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2124\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2237\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2386\"},\"group\":null,\"major_label_policy\":{\"id\":\"2387\"},\"ticker\":{\"id\":\"1790\"},\"visible\":false},\"id\":\"1789\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2120\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2346\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2117\"},\"glyph\":{\"id\":\"2118\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2120\"},\"nonselection_glyph\":{\"id\":\"2119\"},\"view\":{\"id\":\"2122\"}},\"id\":\"2121\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2439\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"2117\"}},\"id\":\"2122\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2238\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2126\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2347\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1705\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2125\",\"type\":\"Circle\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1707\",\"type\":\"Line\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_color\":{\"value\":\"red\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":-5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2130\",\"type\":\"Text\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2339\"},\"selection_policy\":{\"id\":\"2338\"}},\"id\":\"2282\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2487\"},\"selection_policy\":{\"id\":\"2486\"}},\"id\":\"1706\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"Rotating element \\n(\\u03c3\\u2093, \\u03c4)\",\"Rotating element \\n(\\u03c3\\u1d67, -\\u03c4)\"],\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2223\"},\"selection_policy\":{\"id\":\"2222\"}},\"id\":\"2129\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2123\"},\"glyph\":{\"id\":\"2124\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2126\"},\"nonselection_glyph\":{\"id\":\"2125\"},\"view\":{\"id\":\"2128\"}},\"id\":\"2127\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1706\"},\"glyph\":{\"id\":\"1707\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1709\"},\"nonselection_glyph\":{\"id\":\"1708\"},\"view\":{\"id\":\"1711\"}},\"id\":\"1710\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2348\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":-5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2131\",\"type\":\"Text\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2341\"},\"selection_policy\":{\"id\":\"2340\"}},\"id\":\"2283\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2383\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1706\"}},\"id\":\"1711\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1708\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2498\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2343\"},\"selection_policy\":{\"id\":\"2342\"}},\"id\":\"2284\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2349\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2384\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2499\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"2109\"},{\"id\":\"2127\"}],\"tooltips\":[[\"Sigma\",\"@x MPa\"],[\"Tau\",\"@y MPa\"]]},\"id\":\"2135\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2502\"},\"selection_policy\":{\"id\":\"2501\"}},\"id\":\"1714\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":-5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2132\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2386\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1714\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1658\"},\"Mohr_circle\":{\"id\":\"2073\"},\"N_stress_diag\":{\"id\":\"1638\"},\"V_stress_diag\":{\"id\":\"1678\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arr_head\":{\"id\":\"1247\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1710\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n const N = compute_N(db['P'][0])\\n const V = compute_V(pos, q, L)\\n const M = compute_M(pos, q, L)\\n\\n // update data\\n db['N'][0] = N\\n db['V'][0] = V\\n db['M'][0] = M\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n \\n const y_var = db['y_var'][0]\\n const A = db['A'][0]\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const yG = db['yG'][0]\\n const Iy = db['Iy'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n \\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2137\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2129\"},\"glyph\":{\"id\":\"2130\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2132\"},\"nonselection_glyph\":{\"id\":\"2131\"},\"view\":{\"id\":\"2134\"}},\"id\":\"2133\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2345\"},\"selection_policy\":{\"id\":\"2344\"}},\"id\":\"2285\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2129\"}},\"id\":\"2134\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2239\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2387\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1718\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1732\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2440\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1658\"},\"Mohr_circle\":{\"id\":\"2073\"},\"N_stress_diag\":{\"id\":\"1638\"},\"V_stress_diag\":{\"id\":\"1678\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div\":{\"id\":\"1119\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1710\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"section\":{\"id\":\"1117\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1057\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const V = db['V'][0]\\n const y_var = db['y_var'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2138\",\"type\":\"CustomJS\"},{\"attributes\":{\"source\":{\"id\":\"1714\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2240\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2441\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2347\"},\"selection_policy\":{\"id\":\"2346\"}},\"id\":\"2286\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1790\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"LinearScale\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1658\"},\"Mohr_circle\":{\"id\":\"2073\"},\"N_stress_diag\":{\"id\":\"1638\"},\"V_stress_diag\":{\"id\":\"1678\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"beam\":{\"id\":\"1045\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div\":{\"id\":\"1119\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1710\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1117\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"slider_y\":{\"id\":\"1899\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1057\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // solve sliders conflict\\n const db = source.data\\n const h = cb_obj.value // value of the slider\\n if (h < db['y_var'][0]) {\\n db['y_var'][0] = h\\n }\\n slider_y.end = h\\n if (h < slider_y.value) {\\n slider_y.value = h\\n }\\n\\n // retrieve data used\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const V = db['V'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n const y_var = db['y_var'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n beam.glyph.height = h // change the beam height\\n beam.glyph.y = h/2\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2139\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2479\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2241\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2349\"},\"selection_policy\":{\"id\":\"2348\"}},\"id\":\"2287\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2392\"},\"group\":null,\"major_label_policy\":{\"id\":\"2393\"},\"ticker\":{\"id\":\"1752\"}},\"id\":\"1451\",\"type\":\"LinearAxis\"},{\"attributes\":{\"args\":{\"Mohr_circle\":{\"id\":\"2073\"},\"N_diag\":{\"id\":\"1352\"},\"N_stress_diag\":{\"id\":\"1638\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arr_head\":{\"id\":\"1247\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1710\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_M\":{\"id\":\"1236\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const P = 10*(1-f)\\n const db = source.data\\n const N = compute_N(P)\\n const M = db['M'][0]\\n const A = db['A'][0]\\n const Iy = db['Iy'][0]\\n const yG = db['yG'][0]\\n const y_var = db['y_var'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = db['tau_0'][0]\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // apply the changes\\n db['P'][0] = P\\n db['N'][0] = N\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=101) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2140\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1247\"},\"div_P\":{\"id\":\"1253\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"2141\",\"type\":\"CustomJS\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2461\"},\"selection_policy\":{\"id\":\"2460\"}},\"id\":\"2388\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2480\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1380\"},\"M_stress_diag\":{\"id\":\"1658\"},\"Mohr_circle\":{\"id\":\"2073\"},\"V_diag\":{\"id\":\"1366\"},\"V_stress_diag\":{\"id\":\"1678\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arr_head\":{\"id\":\"1247\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1710\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n const N = db['N'][0]\\n const V = compute_V(pos, q, L)\\n const M = compute_M(pos, q, L)\\n const y_var = db['y_var'][0]\\n const A = db['A'][0]\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const yG = db['yG'][0]\\n const Iy = db['Iy'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['q'][0] = q\\n db['V'][0] = V\\n db['M'][0] = M\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2142\",\"type\":\"CustomJS\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2504\"},\"selection_policy\":{\"id\":\"2503\"}},\"id\":\"1726\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"args\":{\"Mohr_circle\":{\"id\":\"2073\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_element\":{\"id\":\"2007\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"beam_position\":{\"id\":\"1897\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_stress_state_theta\":{\"id\":\"1995\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_element\":{\"id\":\"2013\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"rotating_axis\":{\"id\":\"2001\"},\"source\":{\"id\":\"1007\"},\"stress_state_theta\":{\"id\":\"1989\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const theta_element = cb_obj.value/180*Math.PI\\n const sigma_x0 = db['sigma_x0'][0]\\n const sigma_y0 = db['sigma_y0'][0]\\n const tau_0 = db['tau_0'][0]\\n const sigma_average = db['sigma_average'][0]\\n const r_circle = db['r_circle_mohr'][0]\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta_element'][0] = theta_element\\n db['theta'][0] = theta\\n\\n // update\\n // square point:\\n beam_position.glyph.angle = theta_element\\n // stress state element\\n update_stress_state_elements(db, stress_state_theta, rotating_axis, label_stress_state_theta, arc_theta_element, label_theta_element)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n // update Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_stress_state_elements(data, glyph_stress_state_theta, glyph_axis, glyph_label_element_theta, glyph_arc_theta, glyph_label_theta, max_stress=60, max_dim=150.0) {\\n // set variables\\n const theta_element = data['theta_element'][0]\\n const x_new = max_stress*Math.cos(theta_element)\\n const y_new = max_stress*Math.sin(theta_element)\\n \\n \\n // update rotating axis\\n const src_axis = glyph_axis.data_source\\n src_axis.data.x = [0, x_new*max_dim/max_stress]\\n src_axis.data.y = [0, y_new*max_dim/max_stress]\\n src_axis.change.emit()\\n \\n // update stress state theta\\n glyph_stress_state_theta.glyph.angle = theta_element\\n glyph_stress_state_theta.glyph.x = x_new*2\\n glyph_stress_state_theta.glyph.y = y_new*2\\n \\n // label element\\n const src_label_element = glyph_label_element_theta.data_source\\n src_label_element.data.x = [x_new*2]\\n src_label_element.data.y = [y_new*2]\\n src_label_element.change.emit()\\n \\n // arc theta (stress state)\\n glyph_arc_theta.glyph.end_angle = theta_element\\n \\n // label theta (stress state)\\n if (theta_element==0) {\\n glyph_label_theta.glyph.text = \\\"\\\"\\n } else {\\n glyph_label_theta.glyph.text = \\\"\\u03b8\\\"\\n const src_label_theta = glyph_label_theta.data_source\\n src_label_theta.data.x = [max_stress*Math.cos(theta_element/2)]\\n src_label_theta.data.y = [max_stress*Math.sin(theta_element/2)]\\n src_label_theta.change.emit()\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2143\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1726\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2442\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1734\"},\"glyph\":{\"id\":\"1735\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1737\"},\"nonselection_glyph\":{\"id\":\"1736\"},\"view\":{\"id\":\"1739\"}},\"id\":\"1738\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"Mohr_circle\":{\"id\":\"2073\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"beam_position\":{\"id\":\"1897\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"source\":{\"id\":\"1007\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const y_var = cb_obj.value\\n const N = db['N'][0]\\n const V = db['V'][0]\\n const M = db['M'][0]\\n const A = db['A'][0]\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const yG = db['yG'][0]\\n const Iy = db['Iy'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['y_var'][0] = y_var\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n // square point:\\n beam_position.glyph.y = y_var\\n // update Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2144\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{\"width\":10},\"id\":\"2145\",\"type\":\"Spacer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1741\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1743\"},\"nonselection_glyph\":{\"id\":\"1742\"},\"view\":{\"id\":\"1745\"}},\"id\":\"1744\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2390\"},\"group\":null,\"major_label_policy\":{\"id\":\"2391\"},\"ticker\":{\"id\":\"1456\"},\"visible\":false},\"id\":\"1455\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1726\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2443\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2242\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1737\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"2146\"},{\"id\":\"1120\"},{\"id\":\"1121\"},{\"id\":\"1899\"},{\"id\":\"1900\"},{\"id\":\"2147\"},{\"id\":\"1250\"},{\"id\":\"1249\"},{\"id\":\"1251\"},{\"id\":\"1252\"},{\"id\":\"1253\"},{\"id\":\"1254\"}]},\"id\":\"2148\",\"type\":\"Column\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2463\"},\"selection_policy\":{\"id\":\"2462\"}},\"id\":\"1734\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1752\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"height\":10},\"id\":\"2146\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2323\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2350\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"height\":10},\"id\":\"2147\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1734\"}},\"id\":\"1739\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1742\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1736\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1071\"},{\"id\":\"2145\"},{\"id\":\"2148\"}]},\"id\":\"2149\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2324\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2351\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2501\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2352\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"width\":200},\"id\":\"2155\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1746\"}},\"id\":\"1751\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"1140\"},{\"id\":\"2149\"}]},\"id\":\"2150\",\"type\":\"Column\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1743\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2502\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2353\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1749\",\"type\":\"Line\"},{\"attributes\":{\"height\":10},\"id\":\"2151\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1745\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"2150\"},{\"id\":\"2152\"}]},\"id\":\"2153\",\"type\":\"Row\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"2151\"},{\"id\":\"1256\"},{\"id\":\"1288\"},{\"id\":\"1318\"}]},\"id\":\"2152\",\"type\":\"Column\"},{\"attributes\":{\"width\":200},\"id\":\"2156\",\"type\":\"Spacer\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2467\"},\"selection_policy\":{\"id\":\"2466\"}},\"id\":\"1746\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2481\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"width\":200},\"id\":\"2157\",\"type\":\"Spacer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1746\"},\"glyph\":{\"id\":\"1747\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1749\"},\"nonselection_glyph\":{\"id\":\"1748\"},\"view\":{\"id\":\"1751\"}},\"id\":\"1750\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"1811\"},{\"id\":\"2155\"},{\"id\":\"1537\"},{\"id\":\"2156\"},{\"id\":\"2157\"},{\"id\":\"1602\"}]},\"id\":\"2158\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2482\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1748\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1778\"},{\"id\":\"1441\"},{\"id\":\"1408\"},{\"id\":\"1505\"},{\"id\":\"1473\"},{\"id\":\"1570\"}]},\"id\":\"2154\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1756\"},\"glyph\":{\"id\":\"1757\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1759\"},\"nonselection_glyph\":{\"id\":\"1758\"},\"view\":{\"id\":\"1761\"}},\"id\":\"1760\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"2154\"},{\"id\":\"2158\"}]},\"id\":\"2159\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1763\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1765\"},\"nonselection_glyph\":{\"id\":\"1764\"},\"view\":{\"id\":\"1767\"}},\"id\":\"1766\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2269\"},\"selection_policy\":{\"id\":\"2268\"}},\"id\":\"2191\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1200\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2212\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[400]},\"selected\":{\"id\":\"2365\"},\"selection_policy\":{\"id\":\"2364\"}},\"id\":\"1065\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"r_circle_mohr\":[0.25],\"sigma_average\":[-0.25],\"sigma_x\":[-0.5],\"sigma_x0\":[-0.5],\"sigma_y\":[0.0],\"sigma_y0\":[0],\"state\":[\"IDLE\"],\"tau\":[0.0],\"tau_0\":[0.0],\"theta\":[0.0],\"theta_element\":[0],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0],\"y_var\":[200]},\"selected\":{\"id\":\"2326\"},\"selection_policy\":{\"id\":\"2325\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1066\",\"type\":\"Text\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2267\"},\"selection_policy\":{\"id\":\"2266\"}},\"id\":\"2190\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2336\"},\"selection_policy\":{\"id\":\"2335\"}},\"id\":\"1243\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2271\"},\"selection_policy\":{\"id\":\"2270\"}},\"id\":\"2192\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1065\"}},\"id\":\"1070\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2174\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1078\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1045\"},{\"id\":\"1051\"},{\"id\":\"1057\"},{\"id\":\"1063\"},{\"id\":\"1069\"},{\"id\":\"1186\"},{\"id\":\"1897\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2142\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1249\",\"type\":\"Slider\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1067\",\"type\":\"Text\"},{\"attributes\":{\"end\":560.0,\"start\":-80.0},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"2332\"},\"selection_policy\":{\"id\":\"2331\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2175\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1387\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2273\"},\"selection_policy\":{\"id\":\"2272\"}},\"id\":\"2193\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2328\"},\"selection_policy\":{\"id\":\"2327\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2213\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1076\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2177\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1391\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1393\"},\"nonselection_glyph\":{\"id\":\"1392\"},\"view\":{\"id\":\"1395\"}},\"id\":\"1394\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2352\"},\"group\":null,\"major_label_policy\":{\"id\":\"2353\"},\"ticker\":{\"id\":\"1110\"}},\"id\":\"1082\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":158.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1061\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2374\"},\"selection_policy\":{\"id\":\"2373\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1059\"},\"glyph\":{\"id\":\"1060\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1062\"},\"nonselection_glyph\":{\"id\":\"1061\"},\"view\":{\"id\":\"1064\"}},\"id\":\"1063\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1200\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1074\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2178\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2275\"},\"selection_policy\":{\"id\":\"2274\"}},\"id\":\"2194\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2350\"},\"group\":null,\"major_label_policy\":{\"id\":\"2351\"},\"ticker\":{\"id\":\"1110\"}},\"id\":\"1086\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1082\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1085\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2330\"},\"selection_policy\":{\"id\":\"2329\"}},\"id\":\"1200\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1080\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1395\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1072\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1393\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Patch\"},{\"attributes\":{\"axis\":{\"id\":\"1086\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1089\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1236\"}},\"id\":\"1242\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1059\"}},\"id\":\"1064\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2395\"},\"group\":null,\"major_label_policy\":{\"id\":\"2396\"},\"ticker\":{\"id\":\"1424\"},\"visible\":false},\"id\":\"1423\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":320.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":160.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1106\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Patch\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1126\",\"type\":\"Text\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1738\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1754\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1243\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2362\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2245\"},\"selection_policy\":{\"id\":\"2244\"}},\"id\":\"2179\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2293\"},\"group\":null,\"major_label_policy\":{\"id\":\"2294\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2214\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1409\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1240\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1090\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"1096\"}},\"id\":\"1092\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2215\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2398\"},\"group\":null,\"major_label_policy\":{\"id\":\"2399\"},\"ticker\":{\"id\":\"1420\"}},\"id\":\"1419\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1221\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2247\"},\"selection_policy\":{\"id\":\"2246\"}},\"id\":\"2180\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1218\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2282\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1219\",\"type\":\"Arrow\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2290\"},\"group\":null,\"major_label_policy\":{\"id\":\"2291\"},\"ticker\":{\"id\":\"1024\"},\"visible\":false},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1419\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1422\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2249\"},\"selection_policy\":{\"id\":\"2248\"}},\"id\":\"2181\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1218\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2439\"},\"selection_policy\":{\"id\":\"2438\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1238\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2370\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1239\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2443\"},\"selection_policy\":{\"id\":\"2442\"}},\"id\":\"1134\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2251\"},\"selection_policy\":{\"id\":\"2250\"}},\"id\":\"2182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1221\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2283\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1222\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1236\"},\"glyph\":{\"id\":\"1238\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1240\"},\"nonselection_glyph\":{\"id\":\"1239\"},\"view\":{\"id\":\"1242\"}},\"id\":\"1241\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2372\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1433\"}},\"id\":\"1429\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2284\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1135\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1431\",\"type\":\"ResetTool\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1128\",\"type\":\"Text\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1137\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2364\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1433\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2253\"},\"selection_policy\":{\"id\":\"2252\"}},\"id\":\"2183\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1243\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2365\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1136\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2216\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1251\",\"type\":\"Div\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":158.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1060\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2255\"},\"selection_policy\":{\"id\":\"2254\"}},\"id\":\"2184\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2137\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1250\",\"type\":\"Slider\"},{\"attributes\":{\"end\":200,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2138\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1120\",\"type\":\"Slider\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2141\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1252\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1296\"}],\"center\":[{\"id\":\"1299\"},{\"id\":\"1303\"}],\"height\":160,\"left\":[{\"id\":\"1300\"}],\"renderers\":[{\"id\":\"1366\"},{\"id\":\"1372\"},{\"id\":\"1400\"}],\"title\":{\"id\":\"2198\"},\"toolbar\":{\"id\":\"1311\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1292\"},\"y_range\":{\"id\":\"1290\"},\"y_scale\":{\"id\":\"1294\"}},\"id\":\"1288\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2217\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2418\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1253\",\"type\":\"Div\"},{\"attributes\":{\"source\":{\"id\":\"1053\"}},\"id\":\"1058\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2198\",\"type\":\"Title\"},{\"attributes\":{\"data\":{\"x\":[0,0.125,-0.125],\"y\":[0,-69.28203230275508,-69.28203230275508]},\"selected\":{\"id\":\"2359\"},\"selection_policy\":{\"id\":\"2358\"}},\"id\":\"1047\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1255\",\"type\":\"Div\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2257\"},\"selection_policy\":{\"id\":\"2256\"}},\"id\":\"2185\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1508\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2419\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1041\"},\"glyph\":{\"id\":\"1042\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1044\"},\"nonselection_glyph\":{\"id\":\"1043\"},\"view\":{\"id\":\"1046\"}},\"id\":\"1045\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2373\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1262\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1104\"},\"glyph\":{\"id\":\"1105\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1107\"},\"nonselection_glyph\":{\"id\":\"1106\"},\"view\":{\"id\":\"1109\"}},\"id\":\"1108\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2218\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2140\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1254\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{},\"id\":\"2421\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"1266\"}],\"center\":[{\"id\":\"1269\"},{\"id\":\"1273\"}],\"height\":160,\"left\":[{\"id\":\"1270\"}],\"renderers\":[{\"id\":\"1352\"},{\"id\":\"1358\"},{\"id\":\"1394\"}],\"title\":{\"id\":\"1257\"},\"toolbar\":{\"id\":\"1281\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1262\"},\"y_range\":{\"id\":\"1260\"},\"y_scale\":{\"id\":\"1264\"}},\"id\":\"1256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.125},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1056\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2374\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2259\"},\"selection_policy\":{\"id\":\"2258\"}},\"id\":\"2186\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1264\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1355\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1357\"},\"nonselection_glyph\":{\"id\":\"1356\"},\"view\":{\"id\":\"1359\"}},\"id\":\"1358\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[100.0]},\"selected\":{\"id\":\"2357\"},\"selection_policy\":{\"id\":\"2356\"}},\"id\":\"1041\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2366\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1260\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1827\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2200\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1266\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1269\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2422\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1275\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2367\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1326\"}],\"center\":[{\"id\":\"1329\"},{\"id\":\"1333\"}],\"height\":200,\"left\":[{\"id\":\"1330\"}],\"renderers\":[{\"id\":\"1380\"},{\"id\":\"1386\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"2200\"},\"toolbar\":{\"id\":\"1341\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1322\"},\"y_range\":{\"id\":\"1320\"},\"y_scale\":{\"id\":\"1324\"}},\"id\":\"1318\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2261\"},\"selection_policy\":{\"id\":\"2260\"}},\"id\":\"2187\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.125},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1055\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1257\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2300\"},\"group\":null,\"major_label_policy\":{\"id\":\"2301\"},\"ticker\":{\"id\":\"1267\"},\"visible\":false},\"id\":\"1266\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1041\"}},\"id\":\"1046\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1451\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1454\",\"type\":\"Grid\"},{\"attributes\":{\"tools\":[{\"id\":\"1090\"},{\"id\":\"1091\"},{\"id\":\"1092\"},{\"id\":\"1093\"},{\"id\":\"1094\"},{\"id\":\"1095\"}]},\"id\":\"1097\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1267\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1104\"}},\"id\":\"1109\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2455\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2263\"},\"selection_policy\":{\"id\":\"2262\"}},\"id\":\"2188\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2219\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1455\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1458\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2297\"},\"group\":null,\"major_label_policy\":{\"id\":\"2298\"},\"ticker\":{\"id\":\"1271\"}},\"id\":\"1270\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1049\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":320.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":160.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1107\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"1270\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1273\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1444\",\"type\":\"DataRange1d\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1127\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1271\",\"type\":\"BasicTicker\"},{\"attributes\":{\"interval\":50},\"id\":\"1110\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2495\"},\"selection_policy\":{\"id\":\"2494\"}},\"id\":\"2423\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.125},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1054\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2436\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"1119\",\"type\":\"Div\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2265\"},\"selection_policy\":{\"id\":\"2264\"}},\"id\":\"2189\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1047\"},\"glyph\":{\"id\":\"1048\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1050\"},\"nonselection_glyph\":{\"id\":\"1049\"},\"view\":{\"id\":\"1052\"}},\"id\":\"1051\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1447\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1050\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1122\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1048\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1274\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1280\"}},\"id\":\"1276\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1427\"},{\"id\":\"1428\"},{\"id\":\"1429\"},{\"id\":\"1430\"},{\"id\":\"1431\"},{\"id\":\"1432\"},{\"id\":\"1652\"}]},\"id\":\"1434\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2202\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1047\"}},\"id\":\"1052\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1065\"},\"glyph\":{\"id\":\"1066\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1068\"},\"nonselection_glyph\":{\"id\":\"1067\"},\"view\":{\"id\":\"1070\"}},\"id\":\"1069\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1278\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1442\",\"type\":\"Title\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[480.0]},\"selected\":{\"id\":\"2363\"},\"selection_policy\":{\"id\":\"2362\"}},\"id\":\"1059\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1449\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1053\"},\"glyph\":{\"id\":\"1054\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1056\"},\"nonselection_glyph\":{\"id\":\"1055\"},\"view\":{\"id\":\"1058\"}},\"id\":\"1057\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2203\",\"type\":\"Selection\"},{\"attributes\":{\"end\":400,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2139\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1121\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1122\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2354\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1123\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1456\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2462\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1082\"}],\"center\":[{\"id\":\"1085\"},{\"id\":\"1089\"},{\"id\":\"1123\"},{\"id\":\"1132\"}],\"height\":500,\"left\":[{\"id\":\"1086\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1108\"},{\"id\":\"1117\"},{\"id\":\"1129\"},{\"id\":\"1138\"}],\"title\":{\"id\":\"1072\"},\"toolbar\":{\"id\":\"1097\"},\"toolbar_location\":null,\"width\":250,\"x_range\":{\"id\":\"1074\"},\"x_scale\":{\"id\":\"1078\"},\"y_range\":{\"id\":\"1076\"},\"y_scale\":{\"id\":\"1080\"}},\"id\":\"1071\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2456\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1274\"},{\"id\":\"1275\"},{\"id\":\"1276\"},{\"id\":\"1277\"},{\"id\":\"1278\"},{\"id\":\"1279\"},{\"id\":\"1360\"}]},\"id\":\"1281\",\"type\":\"Toolbar\"}],\"root_ids\":[\"2164\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
+ " const render_items = [{\"docid\":\"21595604-136d-47e8-80bc-7b0b2dcec6f8\",\"root_ids\":[\"2164\"],\"roots\":{\"2164\":\"cf97d42a-8a40-4f6d-aba3-358d43f1dbe1\"}}];\n",
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
+ "\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " let attempts = 0;\n",
+ " const timer = setInterval(function(root) {\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " clearInterval(timer);\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " attempts++;\n",
+ " if (attempts > 100) {\n",
+ " clearInterval(timer);\n",
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
+ " }\n",
+ " }\n",
+ " }, 10, root)\n",
+ " }\n",
+ "})(window);"
+ ],
+ "application/vnd.bokehjs_exec.v0+json": ""
+ },
+ "metadata": {
+ "application/vnd.bokehjs_exec.v0+json": {
+ "id": "2164"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hidden_code_nb_mohr.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr, initial_y, initial_theta_element, sigma_axial, sigma_bending, sigma_tau, sigma_x0, sigma_y0, tau_0, sigma_average_mohr, r_circle_mohr, theta_principal, initial_theta, new_state)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Legend**\n",
+ "\n",
+ "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
+ "\n",
+ "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
+ "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
+ "* **Slider of the hight y:** move the slider to change the height y along h starting from the bottom.\n",
+ "* **Slider of the angle $\\theta$:** move the slider to change the angle of the rotating stress element.\n",
+ "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
+ "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
+ "* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
+ "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
+ "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
+ "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
+ "* **Button of the force P:** apply or remove the external force P.\n",
+ "* **Figures \"N V M Diagrams\":** plots that show the axial force N, shear force V and bending moment M diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
+ "* **9 small bottom figures:** plots that show the strains, stresses and right-hand free-body diagram section (with N, V and M). By hovering with the cursor over the desired position, a small window will show the height and the value of the stress or strain.\n",
+ "* **Figure \"Mohr circle\":** plot that shows the Mohr circle of the stress element in the position x, y. By hovering with the cursor over the desired position, a small window will show the shear and normal stress.\n",
+ "* **Figures \"Stress state\":** figure that shows the stress element with an angle fixed of 0 (characterized by the stresses $\\sigma_{x0}$ = total stress, $\\sigma_{y0}$ = 0 and $\\tau_{0}$ = total shear) and the stress element rotated by the angle $\\theta$. $\\theta_p$ is the principal stress.\n",
+ "\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
+ "### Recommendations\n",
+ "\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B or Cmd+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
+ "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Simple Beam DEMOs/07-sb_plastic.ipynb b/Simple Beam DEMOs/07-sb_plastic.ipynb
new file mode 100644
index 0000000..02e8268
--- /dev/null
+++ b/Simple Beam DEMOs/07-sb_plastic.ipynb
@@ -0,0 +1,635 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# **Simple beam - Plastic Analysis**\n",
+ "In this seventh notebook, the plastic analysis is presented. The system, geometry and actions are taken from the previous DEMO \"04-sb_stress\"."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Goals**\n",
+ "\n",
+ "* Describe the difference in the elastic and plastic analysis\n",
+ "* Analyse the influence of the material parameters\n",
+ "* Explore the evolution of the stress after the elastic limit"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Tasks and exercises**\n",
+ "\n",
+ "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
+ "\n",
+ "1. Consider the starting configuration but with q = 5 kN/m, b = 90 mm and h = 100 mm.\n",
+ " \n",
+ " 1. By analysing the stresses inside the section, do you think that the beam is designed correctly? \n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " No, because the section and material chosen are enough resistant for the beam to remain elastic (no collapse), but the beam is clearly oversized.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 2. By changing only one parameter, is there a configuration with the critical stress slightly below the yield strength (maxiaml elastic resistant)?\n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " Yes, there are different solutions:\n",
+ " <ul>\n",
+ " <li>Decrease b to 40 mm (55.6 % reduction)</li>\n",
+ " <li>Decrease h to 80 mm (20.0 % reduction)</li>\n",
+ " <li>Decrease yield strength $f_y$ to 152 MPa (57.2 % reduction)</li>\n",
+ " <li>Increase L to 9 m (50.0 % increase)</li>\n",
+ " </ul>\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 3. By changing only the same parameter of the previous question, is it possible to reduce costs even more by yielding the section? What is the limit?\n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " Yes, there are different solutions:\n",
+ " <ul>\n",
+ " <li>Decrease b from 40 mm to 30 mm (25.0 % reduction)</li>\n",
+ " <li>Decrease h from 80 mm to 60 mm (25.0 % reduction)</li>\n",
+ " <li>Decrease yield strength $f_y$ from 152 MPa to 101 MPa (33.6 % reduction)</li>\n",
+ " <li>Increase L from 9 m to 11 m (22.2 % increase)</li>\n",
+ " </ul>\n",
+ " The beam collapses if a plastic hinge is formed, considering that the system is isostatic. Thus, the limit is achieved when the plastic strain becomes infinite and the section is completely yielded.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 4. Find which parameter does not influence the critical stress and explain the reasons.\n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " It's easy to observe that the elastic modulus E does not influence the stress distribution inside the section. Considering that the system is isostaic, the parameter E is directly proportional to the strain.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ "\n",
+ "2. Explore different configurations and observe the position of the elastic neutral axis.\n",
+ "\n",
+ " 1. Does it coincide with the position of the plastic neautral axis (not shown explicitly in the plots)?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " By analysing a configuration with very slender section (20 mm x 160 mm), x=L/2, yield strength = 16 MPa and q = 5 kN/m, the position of the elastic neutral axis is clearly not the same of the plastic neutral axis.\n",
+ " \n",
+ " If the section remains elastic, the two neutral axis overlap; when the section yields, the plastic neutral axis can move, due to the redistribution of stresses inside the section, resulting in a differnet position of the two neutral axis.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 2. Show elastic and plastic neutral axis are computed differently (formulas).\n",
+ " \n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " \n",
+ " Elastic neutral axis: \n",
+ " $$ y_{Ne} = yG - \\frac{NI_y}{AM} = \\frac{h}{2} - \\frac{N}{M}\\frac{h^2}{12} $$\n",
+ " \n",
+ " Plastic neutral axis (section completely yielded): \n",
+ " $$ y_{Np} = \\frac{h}{2} - \\frac{N}{2f_yb} $$\n",
+ " \n",
+ " This equations show that changing the width of the section influences only the position of the plastic neutral axis (when the section is completely yielded). Thus by using the configuration of the previous answer, it is possible to see hot the plastic neutral axis moves inside the section by changing only b.\n",
+ " <br>\n",
+ " Note that the position of the plastic neutral axis depends on the yield status of the section: if the section is not in a elastic or completely yielded status, it is in a transitory status that has a different position of the plastic neutral axis.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Build the interactive visualisation tool**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " <div class=\"bk-root\">\n",
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
+ " </div>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ " const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " \n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
+ " \"<p>\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"</p>\\n\"+\n",
+ " \"<ul>\\n\"+\n",
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
+ " \"</ul>\\n\"+\n",
+ " \"<code>\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"</code>\\n\"+\n",
+ " \"</div>\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"1002\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " \n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ " \n",
+ "\n",
+ " const inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " \n",
+ " \n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " \n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " \n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ " if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ "\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Import the packages needed\n",
+ "import sys\n",
+ "sys.path.append('../HiddenCode')\n",
+ "import hidden_code_nb_plastic\n",
+ "import math\n",
+ "import numpy as np \n",
+ "from cienpy import simplebeam as sb\n",
+ "from cienpy import rectangular_section as beam_section\n",
+ "from cienpy import stress_strain_elastic as ststel\n",
+ "from cienpy import stress_strain_plastic as ststpl"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Define the geometry, the external actions, the mechanical property and compute the initial configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Choose the dimensions\n",
+ "L = 6 # [m]\n",
+ "h = 200 # [mm]\n",
+ "b = 100 # [mm]\n",
+ "q = 4; # [kN/m]\n",
+ "P = 10; # [kN]\n",
+ "\n",
+ "# Choose the material parameters\n",
+ "E_steel = 200e3 # [MPa] steel\n",
+ "fy_steel = 355 # [MPa] steel\n",
+ "E = E_steel\n",
+ "fy = fy_steel\n",
+ "\n",
+ "# compute the internal forces (at x=L)\n",
+ "discr_NVM = 101\n",
+ "x_discr = np.linspace(0, L, discr_NVM)\n",
+ "N_discr = sb.compute_N(x_discr, P)\n",
+ "V_discr = sb.compute_V(x_discr, q, L)\n",
+ "M_discr = sb.compute_M(x_discr, q, L)\n",
+ "N = N_discr[-1]\n",
+ "V = V_discr[-1]\n",
+ "M = M_discr[-1]\n",
+ "\n",
+ "# compute the parameters\n",
+ "A = beam_section.compute_area(b, h) # [mm2]\n",
+ "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
+ "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
+ "yG = beam_section.compute_centroid_y(h)\n",
+ "y_n_axis = ststel.compute_neutral_axis(N, A, Iy, M, yG)\n",
+ "\n",
+ "# compute the reactions\n",
+ "Rx = sb.compute_Rx(P)\n",
+ "Ry_l = sb.compute_Ry_l(q, L)\n",
+ "Ry_r = sb.compute_Ry_r(q, L)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the complex code to generate the **interactive visualisation tool**:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " <div class=\"bk-root\" id=\"b4d05515-c356-42ea-b8bb-80d4c028fd3a\" data-root-id=\"1995\"></div>\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function embed_document(root) {\n",
+ " \n",
+ " const docs_json = {\"c3f311ba-a0da-40e7-945f-9d5df57dacdd\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1994\"}]},\"id\":\"1995\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2007\"},\"group\":null,\"major_label_policy\":{\"id\":\"2008\"},\"ticker\":{\"id\":\"1140\"},\"visible\":false},\"id\":\"1139\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1692\"},\"glyph\":{\"id\":\"1693\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1695\"},\"nonselection_glyph\":{\"id\":\"1694\"},\"view\":{\"id\":\"1697\"}},\"id\":\"1696\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1724\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1740\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2004\"},\"group\":null,\"major_label_policy\":{\"id\":\"2005\"},\"ticker\":{\"id\":\"1144\"},\"visible\":false},\"id\":\"1143\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1448\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1695\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1457\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1460\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1632\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1466\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2239\"},\"selection_policy\":{\"id\":\"2238\"}},\"id\":\"1692\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1139\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1142\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1643\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1684\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1698\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1701\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1129\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2118\"},\"group\":null,\"major_label_policy\":{\"id\":\"2119\"},\"ticker\":{\"id\":\"1738\"}},\"id\":\"1457\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1143\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1146\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1700\"},\"glyph\":{\"id\":\"1701\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1703\"},\"nonselection_glyph\":{\"id\":\"1702\"},\"view\":{\"id\":\"1705\"}},\"id\":\"1704\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1674\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2116\"},\"group\":null,\"major_label_policy\":{\"id\":\"2117\"},\"ticker\":{\"id\":\"1462\"},\"visible\":false},\"id\":\"1461\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1694\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1461\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1464\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1707\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1709\"},\"nonselection_glyph\":{\"id\":\"1708\"},\"view\":{\"id\":\"1711\"}},\"id\":\"1710\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1842\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1692\"}},\"id\":\"1697\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1161\"}},\"id\":\"1166\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1680\"},\"glyph\":{\"id\":\"1681\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1683\"},\"nonselection_glyph\":{\"id\":\"1682\"},\"view\":{\"id\":\"1685\"}},\"id\":\"1684\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1470\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1465\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2242\"},\"selection_policy\":{\"id\":\"2241\"}},\"id\":\"1700\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1471\"}},\"id\":\"1467\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1153\"}},\"id\":\"1149\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1468\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1672\"}},\"id\":\"1677\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1469\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1700\"}},\"id\":\"1705\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1702\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1708\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1647\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1707\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1471\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1153\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1767\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1489\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1492\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1640\"}},\"id\":\"1645\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1931\"},{\"id\":\"1925\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1947\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1713\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1711\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2244\"},\"selection_policy\":{\"id\":\"2243\"}},\"id\":\"1712\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress (green=yield) and N.A.\"},\"id\":\"1577\",\"type\":\"Title\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1641\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1582\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total strain (green=yield)\"},\"id\":\"1884\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1704\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1718\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2058\"},\"selection_policy\":{\"id\":\"2057\"}},\"id\":\"1206\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1647\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1649\"},\"nonselection_glyph\":{\"id\":\"1648\"},\"view\":{\"id\":\"1651\"}},\"id\":\"1650\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1712\"},\"glyph\":{\"id\":\"1713\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1715\"},\"nonselection_glyph\":{\"id\":\"1714\"},\"view\":{\"id\":\"1717\"}},\"id\":\"1716\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1206\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1720\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1672\"},\"glyph\":{\"id\":\"1673\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1675\"},\"nonselection_glyph\":{\"id\":\"1674\"},\"view\":{\"id\":\"1677\"}},\"id\":\"1676\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1714\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2241\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2146\"},\"group\":null,\"major_label_policy\":{\"id\":\"2147\"},\"ticker\":{\"id\":\"1587\"}},\"id\":\"1586\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1893\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1896\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1712\"}},\"id\":\"1717\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1626\"},{\"id\":\"1627\"},{\"id\":\"1628\"},{\"id\":\"1629\"},{\"id\":\"1630\"},{\"id\":\"1631\"},{\"id\":\"1718\"}]},\"id\":\"1633\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2051\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2242\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1642\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1500\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1648\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2052\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2194\"},\"selection_policy\":{\"id\":\"2193\"}},\"id\":\"1720\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2017\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1720\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1664\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1678\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1587\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1742\"},\"glyph\":{\"id\":\"1743\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1745\"},\"nonselection_glyph\":{\"id\":\"1744\"},\"view\":{\"id\":\"1747\"}},\"id\":\"1746\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1649\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2018\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2132\"},\"group\":null,\"major_label_policy\":{\"id\":\"2133\"},\"ticker\":{\"id\":\"1494\"},\"visible\":false},\"id\":\"1493\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2203\"},\"selection_policy\":{\"id\":\"2202\"}},\"id\":\"1652\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1653\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1502\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1651\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2020\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1689\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1733\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2021\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1644\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1658\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1652\"},\"glyph\":{\"id\":\"1653\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1655\"},\"nonselection_glyph\":{\"id\":\"1654\"},\"view\":{\"id\":\"1657\"}},\"id\":\"1656\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2198\"},\"selection_policy\":{\"id\":\"2197\"}},\"id\":\"1732\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1493\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1496\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1654\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"},{\"id\":\"1152\"}]},\"id\":\"1154\",\"type\":\"Toolbar\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1738\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1497\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2022\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"below\":[{\"id\":\"1775\"}],\"center\":[{\"id\":\"1778\"},{\"id\":\"1782\"},{\"id\":\"1843\"}],\"height\":200,\"left\":[{\"id\":\"1779\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1834\"},{\"id\":\"1853\"},{\"id\":\"1859\"},{\"id\":\"1865\"},{\"id\":\"1871\"}],\"title\":{\"id\":\"1765\"},\"toolbar\":{\"id\":\"1790\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1767\"},\"x_scale\":{\"id\":\"1771\"},\"y_range\":{\"id\":\"1769\"},\"y_scale\":{\"id\":\"1773\"}},\"id\":\"1764\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1732\"},\"glyph\":{\"id\":\"1733\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1735\"},\"nonselection_glyph\":{\"id\":\"1734\"},\"view\":{\"id\":\"1737\"}},\"id\":\"1736\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1161\"},\"glyph\":{\"id\":\"1162\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1164\"},\"nonselection_glyph\":{\"id\":\"1163\"},\"view\":{\"id\":\"1166\"}},\"id\":\"1165\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1652\"}},\"id\":\"1657\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1503\"}},\"id\":\"1499\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"2091\"},\"selection_policy\":{\"id\":\"2090\"}},\"id\":\"1167\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1734\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1749\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1751\"},\"nonselection_glyph\":{\"id\":\"1750\"},\"view\":{\"id\":\"1753\"}},\"id\":\"1752\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2053\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1167\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1732\"}},\"id\":\"1737\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1501\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1660\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2054\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2098\"},\"selection_policy\":{\"id\":\"2097\"}},\"id\":\"2022\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1743\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2211\"},\"selection_policy\":{\"id\":\"2210\"}},\"id\":\"1660\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1503\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"2093\"},\"selection_policy\":{\"id\":\"2092\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"tools\":[{\"id\":\"1497\"},{\"id\":\"1498\"},{\"id\":\"1499\"},{\"id\":\"1500\"},{\"id\":\"1501\"},{\"id\":\"1502\"},{\"id\":\"1678\"}]},\"id\":\"1504\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2206\"},\"selection_policy\":{\"id\":\"2205\"}},\"id\":\"1742\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1167\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1745\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1750\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1688\",\"type\":\"Line\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1579\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1742\"}},\"id\":\"1747\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1744\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1660\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1691\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1754\"}},\"id\":\"1759\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1749\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2213\"},\"selection_policy\":{\"id\":\"2212\"}},\"id\":\"1672\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"2095\"},\"selection_policy\":{\"id\":\"2094\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1687\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1689\"},\"nonselection_glyph\":{\"id\":\"1688\"},\"view\":{\"id\":\"1691\"}},\"id\":\"1690\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1751\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1755\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1753\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2208\"},\"selection_policy\":{\"id\":\"2207\"}},\"id\":\"1754\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1584\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1757\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1756\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2237\"},\"selection_policy\":{\"id\":\"2236\"}},\"id\":\"1680\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2055\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1760\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1754\"},\"glyph\":{\"id\":\"1755\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1757\"},\"nonselection_glyph\":{\"id\":\"1756\"},\"view\":{\"id\":\"1759\"}},\"id\":\"1758\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1680\"}},\"id\":\"1685\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1683\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1285\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1286\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2063\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2033\"},\"group\":null,\"major_label_policy\":{\"id\":\"2034\"},\"ticker\":{\"id\":\"1303\"},\"visible\":false},\"id\":\"1302\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2064\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2143\"},\"group\":null,\"major_label_policy\":{\"id\":\"2144\"},\"ticker\":{\"id\":\"1591\"}},\"id\":\"1590\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1586\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1589\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1591\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1326\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2219\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2132\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2220\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2133\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1296\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2030\"},\"group\":null,\"major_label_policy\":{\"id\":\"2031\"},\"ticker\":{\"id\":\"1307\"}},\"id\":\"1306\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2135\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1302\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1305\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2136\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1300\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1311\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1306\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1309\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1391\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1315\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1316\"}},\"id\":\"1312\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1314\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1316\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1328\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2066\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1330\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2067\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2222\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1393\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1386\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1394\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2068\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2223\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2069\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2180\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{\"tools\":[{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1315\"},{\"id\":\"1380\"}]},\"id\":\"1317\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2138\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2181\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2070\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2071\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2039\"},\"group\":null,\"major_label_policy\":{\"id\":\"2040\"},\"ticker\":{\"id\":\"1333\"}},\"id\":\"1332\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2141\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2090\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2162\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2091\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2163\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2036\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2165\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2200\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2037\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2166\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2201\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2039\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2040\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2092\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1065\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1682\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2093\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2012\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"},{\"id\":\"1065\"}]},\"id\":\"1067\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2078\"},\"group\":null,\"major_label_policy\":{\"id\":\"2079\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1056\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2202\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1066\"}},\"id\":\"1062\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2094\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2203\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2095\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2168\"},\"selection_policy\":{\"id\":\"2167\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1066\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"PanTool\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1056\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1059\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-0.0,-0.7128,-1.4112,-2.0952,-2.7647999999999997,-3.42,-4.0607999999999995,-4.6872,-5.299199999999999,-5.896800000000001,-6.48,-7.048799999999999,-7.6032,-8.1432,-8.6688,-9.179999999999998,-9.6768,-10.1592,-10.6272,-11.0808,-11.52,-11.9448,-12.355199999999998,-12.751199999999999,-13.132800000000001,-13.5,-13.852799999999998,-14.191199999999998,-14.5152,-14.8248,-15.12,-15.4008,-15.6672,-15.919199999999998,-16.1568,-16.38,-16.5888,-16.7832,-16.9632,-17.1288,-17.28,-17.4168,-17.5392,-17.6472,-17.7408,-17.82,-17.8848,-17.9352,-17.9712,-17.9928,-18.0,-17.9928,-17.9712,-17.935200000000002,-17.8848,-17.82,-17.7408,-17.6472,-17.5392,-17.4168,-17.28,-17.128800000000002,-16.9632,-16.7832,-16.5888,-16.38,-16.1568,-15.919200000000002,-15.6672,-15.400800000000002,-15.12,-14.824800000000002,-14.515199999999998,-14.1912,-13.852800000000002,-13.5,-13.132800000000003,-12.751199999999999,-12.355200000000002,-11.944799999999999,-11.520000000000001,-11.080800000000004,-10.6272,-10.159200000000004,-9.6768,-9.180000000000003,-8.6688,-8.143200000000002,-7.6032000000000055,-7.048800000000002,-6.480000000000005,-5.896800000000001,-5.299200000000004,-4.687199999999999,-4.060800000000003,-3.419999999999998,-2.7648000000000024,-2.095200000000007,-1.4112000000000011,-0.7128000000000059,0.0,0]},\"selected\":{\"id\":\"2106\"},\"selection_policy\":{\"id\":\"2105\"}},\"id\":\"1382\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1915\"},\"glyph\":{\"id\":\"1916\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1918\"},\"nonselection_glyph\":{\"id\":\"1917\"},\"view\":{\"id\":\"1920\"}},\"id\":\"1919\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1480\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1902\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2138\"},\"group\":null,\"major_label_policy\":{\"id\":\"2139\"},\"ticker\":{\"id\":\"1898\"},\"visible\":false},\"id\":\"1897\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1897\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1900\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2231\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1568\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1898\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2232\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1906\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1901\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"overlay\":{\"id\":\"1907\"}},\"id\":\"1903\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1904\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1905\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1409\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1490\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1907\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1410\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1936\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2217\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1409\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1411\"},\"nonselection_glyph\":{\"id\":\"1410\"},\"view\":{\"id\":\"1413\"}},\"id\":\"1412\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2135\"},\"group\":null,\"major_label_policy\":{\"id\":\"2136\"},\"ticker\":{\"id\":\"1490\"}},\"id\":\"1489\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1487\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1938\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1595\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1425\"}],\"center\":[{\"id\":\"1428\"},{\"id\":\"1432\"}],\"height\":200,\"left\":[{\"id\":\"1429\"}],\"renderers\":[{\"id\":\"1644\"},{\"id\":\"1650\"},{\"id\":\"1656\"}],\"title\":{\"id\":\"1415\"},\"toolbar\":{\"id\":\"1440\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1417\"},\"x_scale\":{\"id\":\"1421\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1423\"}},\"id\":\"1414\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"below\":[{\"id\":\"1457\"}],\"center\":[{\"id\":\"1460\"},{\"id\":\"1464\"}],\"height\":200,\"left\":[{\"id\":\"1461\"}],\"renderers\":[{\"id\":\"1724\"},{\"id\":\"1730\"},{\"id\":\"1736\"}],\"title\":{\"id\":\"1448\"},\"toolbar\":{\"id\":\"1472\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1450\"},\"x_scale\":{\"id\":\"1453\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1455\"}},\"id\":\"1447\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2220\"},\"selection_policy\":{\"id\":\"2219\"}},\"id\":\"1939\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1413\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1940\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1411\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1611\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1426\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1590\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1593\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1489\"}],\"center\":[{\"id\":\"1492\"},{\"id\":\"1496\"}],\"height\":200,\"left\":[{\"id\":\"1493\"}],\"renderers\":[{\"id\":\"1664\"},{\"id\":\"1670\"},{\"id\":\"1676\"}],\"title\":{\"id\":\"1480\"},\"toolbar\":{\"id\":\"1504\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1482\"},\"x_scale\":{\"id\":\"1485\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1487\"}},\"id\":\"1479\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1599\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1423\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1928\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1594\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1415\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"1600\"}},\"id\":\"1596\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1597\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis\":{\"id\":\"1425\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1428\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1598\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2124\"},\"group\":null,\"major_label_policy\":{\"id\":\"2125\"},\"ticker\":{\"id\":\"1426\"}},\"id\":\"1425\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1614\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1600\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1922\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2121\"},\"group\":null,\"major_label_policy\":{\"id\":\"2122\"},\"ticker\":{\"id\":\"1430\"},\"visible\":false},\"id\":\"1429\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1429\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1432\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1918\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2234\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0],\"y\":[0,0.0,0.1,0.2,0.30000000000000004,0.4,0.5,0.6000000000000001,0.7000000000000001,0.8,0.9,1.0,1.1,1.2000000000000002,1.3,1.4000000000000001,1.5,1.6,1.7000000000000002,1.8,1.9000000000000001,2.0,2.1,2.2,2.3000000000000003,2.4000000000000004,2.5,2.6,2.7,2.8000000000000003,2.9000000000000004,3.0,3.1,3.2,3.3000000000000003,3.4000000000000004,3.5,3.6,3.7,3.8000000000000003,3.9000000000000004,4.0,4.1000000000000005,4.2,4.3,4.4,4.5,4.6000000000000005,4.7,4.800000000000001,4.9,5.0,5.1000000000000005,5.2,5.300000000000001,5.4,5.5,5.6000000000000005,5.7,5.800000000000001,5.9,6.0,6.1000000000000005,6.2,6.300000000000001,6.4,6.5,6.6000000000000005,6.7,6.800000000000001,6.9,7.0,7.1000000000000005,7.2,7.300000000000001,7.4,7.5,7.6000000000000005,7.7,7.800000000000001,7.9,8.0,8.1,8.200000000000001,8.3,8.4,8.5,8.6,8.700000000000001,8.8,8.9,9.0,9.1,9.200000000000001,9.3,9.4,9.5,9.600000000000001,9.700000000000001,9.8,9.9,10.0,10.100000000000001,10.200000000000001,10.3,10.4,10.5,10.600000000000001,10.700000000000001,10.8,10.9,11.0,11.100000000000001,11.200000000000001,11.3,11.4,11.5,11.600000000000001,11.700000000000001,11.8,11.9,12.0,12.100000000000001,12.200000000000001,12.3,12.4,12.5,12.600000000000001,12.700000000000001,12.8,12.9,13.0,13.100000000000001,13.200000000000001,13.3,13.4,13.5,13.600000000000001,13.700000000000001,13.8,13.9,14.0,14.100000000000001,14.200000000000001,14.3,14.4,14.5,14.600000000000001,14.700000000000001,14.8,14.9,15.0,15.100000000000001,15.200000000000001,15.3,15.4,15.5,15.600000000000001,15.700000000000001,15.8,15.9,16.0,16.1,16.2,16.3,16.400000000000002,16.5,16.6,16.7,16.8,16.900000000000002,17.0,17.1,17.2,17.3,17.400000000000002,17.5,17.6,17.7,17.8,17.900000000000002,18.0,18.1,18.2,18.3,18.400000000000002,18.5,18.6,18.7,18.8,18.900000000000002,19.0,19.1,19.200000000000003,19.3,19.400000000000002,19.5,19.6,19.700000000000003,19.8,19.900000000000002,20.0,20.1,20.200000000000003,20.3,20.400000000000002,20.5,20.6,20.700000000000003,20.8,20.900000000000002,21.0,21.1,21.200000000000003,21.3,21.400000000000002,21.5,21.6,21.700000000000003,21.8,21.900000000000002,22.0,22.1,22.200000000000003,22.3,22.400000000000002,22.5,22.6,22.700000000000003,22.8,22.900000000000002,23.0,23.1,23.200000000000003,23.3,23.400000000000002,23.5,23.6,23.700000000000003,23.8,23.900000000000002,24.0,24.1,24.200000000000003,24.3,24.400000000000002,24.5,24.6,24.700000000000003,24.8,24.900000000000002,25.0,25.1,25.200000000000003,25.3,25.400000000000002,25.5,25.6,25.700000000000003,25.8,25.900000000000002,26.0,26.1,26.200000000000003,26.3,26.400000000000002,26.5,26.6,26.700000000000003,26.8,26.900000000000002,27.0,27.1,27.200000000000003,27.3,27.400000000000002,27.5,27.6,27.700000000000003,27.8,27.900000000000002,28.0,28.1,28.200000000000003,28.3,28.400000000000002,28.5,28.6,28.700000000000003,28.8,28.900000000000002,29.0,29.1,29.200000000000003,29.3,29.400000000000002,29.5,29.6,29.700000000000003,29.8,29.900000000000002,30.0,30.1,30.200000000000003,30.3,30.400000000000002,30.5,30.6,30.700000000000003,30.8,30.900000000000002,31.0,31.1,31.200000000000003,31.3,31.400000000000002,31.5,31.6,31.700000000000003,31.8,31.900000000000002,32.0,32.1,32.2,32.300000000000004,32.4,32.5,32.6,32.7,32.800000000000004,32.9,33.0,33.1,33.2,33.300000000000004,33.4,33.5,33.6,33.7,33.800000000000004,33.9,34.0,34.1,34.2,34.300000000000004,34.4,34.5,34.6,34.7,34.800000000000004,34.9,35.0,35.1,35.2,35.300000000000004,35.4,35.5,35.6,35.7,35.800000000000004,35.9,36.0,36.1,36.2,36.300000000000004,36.4,36.5,36.6,36.7,36.800000000000004,36.9,37.0,37.1,37.2,37.300000000000004,37.4,37.5,37.6,37.7,37.800000000000004,37.9,38.0,38.1,38.2,38.300000000000004,38.400000000000006,38.5,38.6,38.7,38.800000000000004,38.900000000000006,39.0,39.1,39.2,39.300000000000004,39.400000000000006,39.5,39.6,39.7,39.800000000000004,39.900000000000006,40.0,40.1,40.2,40.300000000000004,40.400000000000006,40.5,40.6,40.7,40.800000000000004,40.900000000000006,41.0,41.1,41.2,41.300000000000004,41.400000000000006,41.5,41.6,41.7,41.800000000000004,41.900000000000006,42.0,42.1,42.2,42.300000000000004,42.400000000000006,42.5,42.6,42.7,42.800000000000004,42.900000000000006,43.0,43.1,43.2,43.300000000000004,43.400000000000006,43.5,43.6,43.7,43.800000000000004,43.900000000000006,44.0,44.1,44.2,44.300000000000004,44.400000000000006,44.5,44.6,44.7,44.800000000000004,44.900000000000006,45.0,45.1,45.2,45.300000000000004,45.400000000000006,45.5,45.6,45.7,45.800000000000004,45.900000000000006,46.0,46.1,46.2,46.300000000000004,46.400000000000006,46.5,46.6,46.7,46.800000000000004,46.900000000000006,47.0,47.1,47.2,47.300000000000004,47.400000000000006,47.5,47.6,47.7,47.800000000000004,47.900000000000006,48.0,48.1,48.2,48.300000000000004,48.400000000000006,48.5,48.6,48.7,48.800000000000004,48.900000000000006,49.0,49.1,49.2,49.300000000000004,49.400000000000006,49.5,49.6,49.7,49.800000000000004,49.900000000000006,50.0,50.1,50.2,50.300000000000004,50.400000000000006,50.5,50.6,50.7,50.800000000000004,50.900000000000006,51.0,51.1,51.2,51.300000000000004,51.400000000000006,51.5,51.6,51.7,51.800000000000004,51.900000000000006,52.0,52.1,52.2,52.300000000000004,52.400000000000006,52.5,52.6,52.7,52.800000000000004,52.900000000000006,53.0,53.1,53.2,53.300000000000004,53.400000000000006,53.5,53.6,53.7,53.800000000000004,53.900000000000006,54.0,54.1,54.2,54.300000000000004,54.400000000000006,54.5,54.6,54.7,54.800000000000004,54.900000000000006,55.0,55.1,55.2,55.300000000000004,55.400000000000006,55.5,55.6,55.7,55.800000000000004,55.900000000000006,56.0,56.1,56.2,56.300000000000004,56.400000000000006,56.5,56.6,56.7,56.800000000000004,56.900000000000006,57.0,57.1,57.2,57.300000000000004,57.400000000000006,57.5,57.6,57.7,57.800000000000004,57.900000000000006,58.0,58.1,58.2,58.300000000000004,58.400000000000006,58.5,58.6,58.7,58.800000000000004,58.900000000000006,59.0,59.1,59.2,59.300000000000004,59.400000000000006,59.5,59.6,59.7,59.800000000000004,59.900000000000006,60.0,60.1,60.2,60.300000000000004,60.400000000000006,60.5,60.6,60.7,60.800000000000004,60.900000000000006,61.0,61.1,61.2,61.300000000000004,61.400000000000006,61.5,61.6,61.7,61.800000000000004,61.900000000000006,62.0,62.1,62.2,62.300000000000004,62.400000000000006,62.5,62.6,62.7,62.800000000000004,62.900000000000006,63.0,63.1,63.2,63.300000000000004,63.400000000000006,63.5,63.6,63.7,63.800000000000004,63.900000000000006,64.0,64.10000000000001,64.2,64.3,64.4,64.5,64.60000000000001,64.7,64.8,64.9,65.0,65.10000000000001,65.2,65.3,65.4,65.5,65.60000000000001,65.7,65.8,65.9,66.0,66.10000000000001,66.2,66.3,66.4,66.5,66.60000000000001,66.7,66.8,66.9,67.0,67.10000000000001,67.2,67.3,67.4,67.5,67.60000000000001,67.7,67.8,67.9,68.0,68.10000000000001,68.2,68.3,68.4,68.5,68.60000000000001,68.7,68.8,68.9,69.0,69.10000000000001,69.2,69.3,69.4,69.5,69.60000000000001,69.7,69.8,69.9,70.0,70.10000000000001,70.2,70.3,70.4,70.5,70.60000000000001,70.7,70.8,70.9,71.0,71.10000000000001,71.2,71.3,71.4,71.5,71.60000000000001,71.7,71.8,71.9,72.0,72.10000000000001,72.2,72.3,72.4,72.5,72.60000000000001,72.7,72.8,72.9,73.0,73.10000000000001,73.2,73.3,73.4,73.5,73.60000000000001,73.7,73.8,73.9,74.0,74.10000000000001,74.2,74.3,74.4,74.5,74.60000000000001,74.7,74.8,74.9,75.0,75.10000000000001,75.2,75.3,75.4,75.5,75.60000000000001,75.7,75.8,75.9,76.0,76.10000000000001,76.2,76.3,76.4,76.5,76.60000000000001,76.7,76.80000000000001,76.9,77.0,77.10000000000001,77.2,77.30000000000001,77.4,77.5,77.60000000000001,77.7,77.80000000000001,77.9,78.0,78.10000000000001,78.2,78.30000000000001,78.4,78.5,78.60000000000001,78.7,78.80000000000001,78.9,79.0,79.10000000000001,79.2,79.30000000000001,79.4,79.5,79.60000000000001,79.7,79.80000000000001,79.9,80.0,80.10000000000001,80.2,80.30000000000001,80.4,80.5,80.60000000000001,80.7,80.80000000000001,80.9,81.0,81.10000000000001,81.2,81.30000000000001,81.4,81.5,81.60000000000001,81.7,81.80000000000001,81.9,82.0,82.10000000000001,82.2,82.30000000000001,82.4,82.5,82.60000000000001,82.7,82.80000000000001,82.9,83.0,83.10000000000001,83.2,83.30000000000001,83.4,83.5,83.60000000000001,83.7,83.80000000000001,83.9,84.0,84.10000000000001,84.2,84.30000000000001,84.4,84.5,84.60000000000001,84.7,84.80000000000001,84.9,85.0,85.10000000000001,85.2,85.30000000000001,85.4,85.5,85.60000000000001,85.7,85.80000000000001,85.9,86.0,86.10000000000001,86.2,86.30000000000001,86.4,86.5,86.60000000000001,86.7,86.80000000000001,86.9,87.0,87.10000000000001,87.2,87.30000000000001,87.4,87.5,87.60000000000001,87.7,87.80000000000001,87.9,88.0,88.10000000000001,88.2,88.30000000000001,88.4,88.5,88.60000000000001,88.7,88.80000000000001,88.9,89.0,89.10000000000001,89.2,89.30000000000001,89.4,89.5,89.60000000000001,89.7,89.80000000000001,89.9,90.0,90.10000000000001,90.2,90.30000000000001,90.4,90.5,90.60000000000001,90.7,90.80000000000001,90.9,91.0,91.10000000000001,91.2,91.30000000000001,91.4,91.5,91.60000000000001,91.7,91.80000000000001,91.9,92.0,92.10000000000001,92.2,92.30000000000001,92.4,92.5,92.60000000000001,92.7,92.80000000000001,92.9,93.0,93.10000000000001,93.2,93.30000000000001,93.4,93.5,93.60000000000001,93.7,93.80000000000001,93.9,94.0,94.10000000000001,94.2,94.30000000000001,94.4,94.5,94.60000000000001,94.7,94.80000000000001,94.9,95.0,95.10000000000001,95.2,95.30000000000001,95.4,95.5,95.60000000000001,95.7,95.80000000000001,95.9,96.0,96.10000000000001,96.2,96.30000000000001,96.4,96.5,96.60000000000001,96.7,96.80000000000001,96.9,97.0,97.10000000000001,97.2,97.30000000000001,97.4,97.5,97.60000000000001,97.7,97.80000000000001,97.9,98.0,98.10000000000001,98.2,98.30000000000001,98.4,98.5,98.60000000000001,98.7,98.80000000000001,98.9,99.0,99.10000000000001,99.2,99.30000000000001,99.4,99.5,99.60000000000001,99.7,99.80000000000001,99.9,100.0,100.10000000000001,100.2,100.30000000000001,100.4,100.5,100.60000000000001,100.7,100.80000000000001,100.9,101.0,101.10000000000001,101.2,101.30000000000001,101.4,101.5,101.60000000000001,101.7,101.80000000000001,101.9,102.0,102.10000000000001,102.2,102.30000000000001,102.4,102.5,102.60000000000001,102.7,102.80000000000001,102.9,103.0,103.10000000000001,103.2,103.30000000000001,103.4,103.5,103.60000000000001,103.7,103.80000000000001,103.9,104.0,104.10000000000001,104.2,104.30000000000001,104.4,104.5,104.60000000000001,104.7,104.80000000000001,104.9,105.0,105.10000000000001,105.2,105.30000000000001,105.4,105.5,105.60000000000001,105.7,105.80000000000001,105.9,106.0,106.10000000000001,106.2,106.30000000000001,106.4,106.5,106.60000000000001,106.7,106.80000000000001,106.9,107.0,107.10000000000001,107.2,107.30000000000001,107.4,107.5,107.60000000000001,107.7,107.80000000000001,107.9,108.0,108.10000000000001,108.2,108.30000000000001,108.4,108.5,108.60000000000001,108.7,108.80000000000001,108.9,109.0,109.10000000000001,109.2,109.30000000000001,109.4,109.5,109.60000000000001,109.7,109.80000000000001,109.9,110.0,110.10000000000001,110.2,110.30000000000001,110.4,110.5,110.60000000000001,110.7,110.80000000000001,110.9,111.0,111.10000000000001,111.2,111.30000000000001,111.4,111.5,111.60000000000001,111.7,111.80000000000001,111.9,112.0,112.10000000000001,112.2,112.30000000000001,112.4,112.5,112.60000000000001,112.7,112.80000000000001,112.9,113.0,113.10000000000001,113.2,113.30000000000001,113.4,113.5,113.60000000000001,113.7,113.80000000000001,113.9,114.0,114.10000000000001,114.2,114.30000000000001,114.4,114.5,114.60000000000001,114.7,114.80000000000001,114.9,115.0,115.10000000000001,115.2,115.30000000000001,115.4,115.5,115.60000000000001,115.7,115.80000000000001,115.9,116.0,116.10000000000001,116.2,116.30000000000001,116.4,116.5,116.60000000000001,116.7,116.80000000000001,116.9,117.0,117.10000000000001,117.2,117.30000000000001,117.4,117.5,117.60000000000001,117.7,117.80000000000001,117.9,118.0,118.10000000000001,118.2,118.30000000000001,118.4,118.5,118.60000000000001,118.7,118.80000000000001,118.9,119.0,119.10000000000001,119.2,119.30000000000001,119.4,119.5,119.60000000000001,119.7,119.80000000000001,119.9,120.0,120.10000000000001,120.2,120.30000000000001,120.4,120.5,120.60000000000001,120.7,120.80000000000001,120.9,121.0,121.10000000000001,121.2,121.30000000000001,121.4,121.5,121.60000000000001,121.7,121.80000000000001,121.9,122.0,122.10000000000001,122.2,122.30000000000001,122.4,122.5,122.60000000000001,122.7,122.80000000000001,122.9,123.0,123.10000000000001,123.2,123.30000000000001,123.4,123.5,123.60000000000001,123.7,123.80000000000001,123.9,124.0,124.10000000000001,124.2,124.30000000000001,124.4,124.5,124.60000000000001,124.7,124.80000000000001,124.9,125.0,125.10000000000001,125.2,125.30000000000001,125.4,125.5,125.60000000000001,125.7,125.80000000000001,125.9,126.0,126.10000000000001,126.2,126.30000000000001,126.4,126.5,126.60000000000001,126.7,126.80000000000001,126.9,127.0,127.10000000000001,127.2,127.30000000000001,127.4,127.5,127.60000000000001,127.7,127.80000000000001,127.9,128.0,128.1,128.20000000000002,128.3,128.4,128.5,128.6,128.70000000000002,128.8,128.9,129.0,129.1,129.20000000000002,129.3,129.4,129.5,129.6,129.70000000000002,129.8,129.9,130.0,130.1,130.20000000000002,130.3,130.4,130.5,130.6,130.70000000000002,130.8,130.9,131.0,131.1,131.20000000000002,131.3,131.4,131.5,131.6,131.70000000000002,131.8,131.9,132.0,132.1,132.20000000000002,132.3,132.4,132.5,132.6,132.70000000000002,132.8,132.9,133.0,133.1,133.20000000000002,133.3,133.4,133.5,133.6,133.70000000000002,133.8,133.9,134.0,134.1,134.20000000000002,134.3,134.4,134.5,134.6,134.70000000000002,134.8,134.9,135.0,135.1,135.20000000000002,135.3,135.4,135.5,135.6,135.70000000000002,135.8,135.9,136.0,136.1,136.20000000000002,136.3,136.4,136.5,136.6,136.70000000000002,136.8,136.9,137.0,137.1,137.20000000000002,137.3,137.4,137.5,137.6,137.70000000000002,137.8,137.9,138.0,138.1,138.20000000000002,138.3,138.4,138.5,138.6,138.70000000000002,138.8,138.9,139.0,139.1,139.20000000000002,139.3,139.4,139.5,139.6,139.70000000000002,139.8,139.9,140.0,140.1,140.20000000000002,140.3,140.4,140.5,140.6,140.70000000000002,140.8,140.9,141.0,141.1,141.20000000000002,141.3,141.4,141.5,141.6,141.70000000000002,141.8,141.9,142.0,142.1,142.20000000000002,142.3,142.4,142.5,142.6,142.70000000000002,142.8,142.9,143.0,143.1,143.20000000000002,143.3,143.4,143.5,143.6,143.70000000000002,143.8,143.9,144.0,144.1,144.20000000000002,144.3,144.4,144.5,144.6,144.70000000000002,144.8,144.9,145.0,145.1,145.20000000000002,145.3,145.4,145.5,145.6,145.70000000000002,145.8,145.9,146.0,146.1,146.20000000000002,146.3,146.4,146.5,146.6,146.70000000000002,146.8,146.9,147.0,147.1,147.20000000000002,147.3,147.4,147.5,147.6,147.70000000000002,147.8,147.9,148.0,148.1,148.20000000000002,148.3,148.4,148.5,148.6,148.70000000000002,148.8,148.9,149.0,149.1,149.20000000000002,149.3,149.4,149.5,149.6,149.70000000000002,149.8,149.9,150.0,150.1,150.20000000000002,150.3,150.4,150.5,150.6,150.70000000000002,150.8,150.9,151.0,151.1,151.20000000000002,151.3,151.4,151.5,151.6,151.70000000000002,151.8,151.9,152.0,152.1,152.20000000000002,152.3,152.4,152.5,152.6,152.70000000000002,152.8,152.9,153.0,153.1,153.20000000000002,153.3,153.4,153.5,153.60000000000002,153.70000000000002,153.8,153.9,154.0,154.10000000000002,154.20000000000002,154.3,154.4,154.5,154.60000000000002,154.70000000000002,154.8,154.9,155.0,155.10000000000002,155.20000000000002,155.3,155.4,155.5,155.60000000000002,155.70000000000002,155.8,155.9,156.0,156.10000000000002,156.20000000000002,156.3,156.4,156.5,156.60000000000002,156.70000000000002,156.8,156.9,157.0,157.10000000000002,157.20000000000002,157.3,157.4,157.5,157.60000000000002,157.70000000000002,157.8,157.9,158.0,158.10000000000002,158.20000000000002,158.3,158.4,158.5,158.60000000000002,158.70000000000002,158.8,158.9,159.0,159.10000000000002,159.20000000000002,159.3,159.4,159.5,159.60000000000002,159.70000000000002,159.8,159.9,160.0,160.10000000000002,160.20000000000002,160.3,160.4,160.5,160.60000000000002,160.70000000000002,160.8,160.9,161.0,161.10000000000002,161.20000000000002,161.3,161.4,161.5,161.60000000000002,161.70000000000002,161.8,161.9,162.0,162.10000000000002,162.20000000000002,162.3,162.4,162.5,162.60000000000002,162.70000000000002,162.8,162.9,163.0,163.10000000000002,163.20000000000002,163.3,163.4,163.5,163.60000000000002,163.70000000000002,163.8,163.9,164.0,164.10000000000002,164.20000000000002,164.3,164.4,164.5,164.60000000000002,164.70000000000002,164.8,164.9,165.0,165.10000000000002,165.20000000000002,165.3,165.4,165.5,165.60000000000002,165.70000000000002,165.8,165.9,166.0,166.10000000000002,166.20000000000002,166.3,166.4,166.5,166.60000000000002,166.70000000000002,166.8,166.9,167.0,167.10000000000002,167.20000000000002,167.3,167.4,167.5,167.60000000000002,167.70000000000002,167.8,167.9,168.0,168.10000000000002,168.20000000000002,168.3,168.4,168.5,168.60000000000002,168.70000000000002,168.8,168.9,169.0,169.10000000000002,169.20000000000002,169.3,169.4,169.5,169.60000000000002,169.70000000000002,169.8,169.9,170.0,170.10000000000002,170.20000000000002,170.3,170.4,170.5,170.60000000000002,170.70000000000002,170.8,170.9,171.0,171.10000000000002,171.20000000000002,171.3,171.4,171.5,171.60000000000002,171.70000000000002,171.8,171.9,172.0,172.10000000000002,172.20000000000002,172.3,172.4,172.5,172.60000000000002,172.70000000000002,172.8,172.9,173.0,173.10000000000002,173.20000000000002,173.3,173.4,173.5,173.60000000000002,173.70000000000002,173.8,173.9,174.0,174.10000000000002,174.20000000000002,174.3,174.4,174.5,174.60000000000002,174.70000000000002,174.8,174.9,175.0,175.10000000000002,175.20000000000002,175.3,175.4,175.5,175.60000000000002,175.70000000000002,175.8,175.9,176.0,176.10000000000002,176.20000000000002,176.3,176.4,176.5,176.60000000000002,176.70000000000002,176.8,176.9,177.0,177.10000000000002,177.20000000000002,177.3,177.4,177.5,177.60000000000002,177.70000000000002,177.8,177.9,178.0,178.10000000000002,178.20000000000002,178.3,178.4,178.5,178.60000000000002,178.70000000000002,178.8,178.9,179.0,179.10000000000002,179.20000000000002,179.3,179.4,179.5,179.60000000000002,179.70000000000002,179.8,179.9,180.0,180.10000000000002,180.20000000000002,180.3,180.4,180.5,180.60000000000002,180.70000000000002,180.8,180.9,181.0,181.10000000000002,181.20000000000002,181.3,181.4,181.5,181.60000000000002,181.70000000000002,181.8,181.9,182.0,182.10000000000002,182.20000000000002,182.3,182.4,182.5,182.60000000000002,182.70000000000002,182.8,182.9,183.0,183.10000000000002,183.20000000000002,183.3,183.4,183.5,183.60000000000002,183.70000000000002,183.8,183.9,184.0,184.10000000000002,184.20000000000002,184.3,184.4,184.5,184.60000000000002,184.70000000000002,184.8,184.9,185.0,185.10000000000002,185.20000000000002,185.3,185.4,185.5,185.60000000000002,185.70000000000002,185.8,185.9,186.0,186.10000000000002,186.20000000000002,186.3,186.4,186.5,186.60000000000002,186.70000000000002,186.8,186.9,187.0,187.10000000000002,187.20000000000002,187.3,187.4,187.5,187.60000000000002,187.70000000000002,187.8,187.9,188.0,188.10000000000002,188.20000000000002,188.3,188.4,188.5,188.60000000000002,188.70000000000002,188.8,188.9,189.0,189.10000000000002,189.20000000000002,189.3,189.4,189.5,189.60000000000002,189.70000000000002,189.8,189.9,190.0,190.10000000000002,190.20000000000002,190.3,190.4,190.5,190.60000000000002,190.70000000000002,190.8,190.9,191.0,191.10000000000002,191.20000000000002,191.3,191.4,191.5,191.60000000000002,191.70000000000002,191.8,191.9,192.0,192.10000000000002,192.20000000000002,192.3,192.4,192.5,192.60000000000002,192.70000000000002,192.8,192.9,193.0,193.10000000000002,193.20000000000002,193.3,193.4,193.5,193.60000000000002,193.70000000000002,193.8,193.9,194.0,194.10000000000002,194.20000000000002,194.3,194.4,194.5,194.60000000000002,194.70000000000002,194.8,194.9,195.0,195.10000000000002,195.20000000000002,195.3,195.4,195.5,195.60000000000002,195.70000000000002,195.8,195.9,196.0,196.10000000000002,196.20000000000002,196.3,196.4,196.5,196.60000000000002,196.70000000000002,196.8,196.9,197.0,197.10000000000002,197.20000000000002,197.3,197.4,197.5,197.60000000000002,197.70000000000002,197.8,197.9,198.0,198.10000000000002,198.20000000000002,198.3,198.4,198.5,198.60000000000002,198.70000000000002,198.8,198.9,199.0,199.10000000000002,199.20000000000002,199.3,199.4,199.5,199.60000000000002,199.70000000000002,199.8,199.9,200.0,200]},\"selected\":{\"id\":\"2223\"},\"selection_policy\":{\"id\":\"2222\"}},\"id\":\"1915\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2235\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1438\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"PanTool\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2236\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1901\"},{\"id\":\"1902\"},{\"id\":\"1903\"},{\"id\":\"1904\"},{\"id\":\"1905\"},{\"id\":\"1906\"},{\"id\":\"1947\"}]},\"id\":\"1908\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"1439\"}},\"id\":\"1435\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1626\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1436\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1915\"}},\"id\":\"1920\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1916\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2237\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1917\",\"type\":\"Line\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1945\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[2001]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACamZmZmZm5P5qZmZmZmck/NDMzMzMz0z+amZmZmZnZPwAAAAAAAOA/NDMzMzMz4z9nZmZmZmbmP5qZmZmZmek/zczMzMzM7D8AAAAAAADwP5qZmZmZmfE/NDMzMzMz8z/NzMzMzMz0P2dmZmZmZvY/AAAAAAAA+D+amZmZmZn5PzQzMzMzM/s/zczMzMzM/D9nZmZmZmb+PwAAAAAAAABAzczMzMzMAECamZmZmZkBQGdmZmZmZgJANDMzMzMzA0AAAAAAAAAEQM3MzMzMzARAmpmZmZmZBUBnZmZmZmYGQDQzMzMzMwdAAAAAAAAACEDNzMzMzMwIQJqZmZmZmQlAZ2ZmZmZmCkA0MzMzMzMLQAAAAAAAAAxAzczMzMzMDECamZmZmZkNQGdmZmZmZg5ANDMzMzMzD0AAAAAAAAAQQGdmZmZmZhBAzczMzMzMEEAzMzMzMzMRQJqZmZmZmRFAAAAAAAAAEkBnZmZmZmYSQM3MzMzMzBJANDMzMzMzE0CamZmZmZkTQAAAAAAAABRAZ2ZmZmZmFEDNzMzMzMwUQDQzMzMzMxVAmpmZmZmZFUAAAAAAAAAWQGdmZmZmZhZAzczMzMzMFkA0MzMzMzMXQJqZmZmZmRdAAAAAAAAAGEBnZmZmZmYYQM3MzMzMzBhANDMzMzMzGUCamZmZmZkZQAAAAAAAABpAZ2ZmZmZmGkDNzMzMzMwaQDQzMzMzMxtAmpmZmZmZG0AAAAAAAAAcQGdmZmZmZhxAzczMzMzMHEA0MzMzMzMdQJqZmZmZmR1AAAAAAAAAHkBnZmZmZmYeQM3MzMzMzB5ANDMzMzMzH0CamZmZmZkfQAAAAAAAACBAMzMzMzMzIEBnZmZmZmYgQJqZmZmZmSBAzczMzMzMIEAAAAAAAAAhQDMzMzMzMyFAZ2ZmZmZmIUCamZmZmZkhQM3MzMzMzCFAAAAAAAAAIkAzMzMzMzMiQGdmZmZmZiJAmpmZmZmZIkDNzMzMzMwiQAAAAAAAACNANDMzMzMzI0BnZmZmZmYjQJqZmZmZmSNAzczMzMzMI0AAAAAAAAAkQDQzMzMzMyRAZ2ZmZmZmJECamZmZmZkkQM3MzMzMzCRAAAAAAAAAJUA0MzMzMzMlQGdmZmZmZiVAmpmZmZmZJUDNzMzMzMwlQAAAAAAAACZANDMzMzMzJkBnZmZmZmYmQJqZmZmZmSZAzczMzMzMJkAAAAAAAAAnQDQzMzMzMydAZ2ZmZmZmJ0CamZmZmZknQM3MzMzMzCdAAAAAAAAAKEA0MzMzMzMoQGdmZmZmZihAmpmZmZmZKEDNzMzMzMwoQAAAAAAAAClANDMzMzMzKUBnZmZmZmYpQJqZmZmZmSlAzczMzMzMKUAAAAAAAAAqQDQzMzMzMypAZ2ZmZmZmKkCamZmZmZkqQM3MzMzMzCpAAAAAAAAAK0A0MzMzMzMrQGdmZmZmZitAmpmZmZmZK0DNzMzMzMwrQAAAAAAAACxANDMzMzMzLEBnZmZmZmYsQJqZmZmZmSxAzczMzMzMLEAAAAAAAAAtQDQzMzMzMy1AZ2ZmZmZmLUCamZmZmZktQM3MzMzMzC1AAAAAAAAALkA0MzMzMzMuQGdmZmZmZi5AmpmZmZmZLkDNzMzMzMwuQAAAAAAAAC9ANDMzMzMzL0BnZmZmZmYvQJqZmZmZmS9AzczMzMzML0AAAAAAAAAwQJqZmZmZGTBAMzMzMzMzMEDNzMzMzEwwQGdmZmZmZjBAAAAAAACAMECamZmZmZkwQDMzMzMzszBAzczMzMzMMEBnZmZmZuYwQAAAAAAAADFAmpmZmZkZMUAzMzMzMzMxQM3MzMzMTDFAZ2ZmZmZmMUAAAAAAAIAxQJqZmZmZmTFAMzMzMzOzMUDNzMzMzMwxQGdmZmZm5jFAAAAAAAAAMkCamZmZmRkyQDMzMzMzMzJAzczMzMxMMkBnZmZmZmYyQAAAAAAAgDJAmpmZmZmZMkAzMzMzM7MyQM3MzMzMzDJAZ2ZmZmbmMkAAAAAAAAAzQJqZmZmZGTNANDMzMzMzM0DNzMzMzEwzQGdmZmZmZjNAAAAAAACAM0CamZmZmZkzQDQzMzMzszNAzczMzMzMM0BnZmZmZuYzQAAAAAAAADRAmpmZmZkZNEA0MzMzMzM0QM3MzMzMTDRAZ2ZmZmZmNEAAAAAAAIA0QJqZmZmZmTRANDMzMzOzNEDNzMzMzMw0QGdmZmZm5jRAAAAAAAAANUCamZmZmRk1QDQzMzMzMzVAzczMzMxMNUBnZmZmZmY1QAAAAAAAgDVAmpmZmZmZNUA0MzMzM7M1QM3MzMzMzDVAZ2ZmZmbmNUAAAAAAAAA2QJqZmZmZGTZANDMzMzMzNkDNzMzMzEw2QGdmZmZmZjZAAAAAAACANkCamZmZmZk2QDQzMzMzszZAzczMzMzMNkBnZmZmZuY2QAAAAAAAADdAmpmZmZkZN0A0MzMzMzM3QM3MzMzMTDdAZ2ZmZmZmN0AAAAAAAIA3QJqZmZmZmTdANDMzMzOzN0DNzMzMzMw3QGdmZmZm5jdAAAAAAAAAOECamZmZmRk4QDQzMzMzMzhAzczMzMxMOEBnZmZmZmY4QAAAAAAAgDhAmpmZmZmZOEA0MzMzM7M4QM3MzMzMzDhAZ2ZmZmbmOEAAAAAAAAA5QJqZmZmZGTlANDMzMzMzOUDNzMzMzEw5QGdmZmZmZjlAAAAAAACAOUCamZmZmZk5QDQzMzMzszlAzczMzMzMOUBnZmZmZuY5QAAAAAAAADpAmpmZmZkZOkA0MzMzMzM6QM3MzMzMTDpAZ2ZmZmZmOkAAAAAAAIA6QJqZmZmZmTpANDMzMzOzOkDNzMzMzMw6QGdmZmZm5jpAAAAAAAAAO0CamZmZmRk7QDQzMzMzMztAzczMzMxMO0BnZmZmZmY7QAAAAAAAgDtAmpmZmZmZO0A0MzMzM7M7QM3MzMzMzDtAZ2ZmZmbmO0AAAAAAAAA8QJqZmZmZGTxANDMzMzMzPEDNzMzMzEw8QGdmZmZmZjxAAAAAAACAPECamZmZmZk8QDQzMzMzszxAzczMzMzMPEBnZmZmZuY8QAAAAAAAAD1AmpmZmZkZPUA0MzMzMzM9QM3MzMzMTD1AZ2ZmZmZmPUAAAAAAAIA9QJqZmZmZmT1ANDMzMzOzPUDNzMzMzMw9QGdmZmZm5j1AAAAAAAAAPkCamZmZmRk+QDQzMzMzMz5AzczMzMxMPkBnZmZmZmY+QAAAAAAAgD5AmpmZmZmZPkA0MzMzM7M+QM3MzMzMzD5AZ2ZmZmbmPkAAAAAAAAA/QJqZmZmZGT9ANDMzMzMzP0DNzMzMzEw/QGdmZmZmZj9AAAAAAACAP0CamZmZmZk/QDQzMzMzsz9AzczMzMzMP0BnZmZmZuY/QAAAAAAAAEBAzczMzMwMQECamZmZmRlAQGdmZmZmJkBAMzMzMzMzQEAAAAAAAEBAQM3MzMzMTEBAmpmZmZlZQEBnZmZmZmZAQDMzMzMzc0BAAAAAAACAQEDNzMzMzIxAQJqZmZmZmUBAZ2ZmZmamQEAzMzMzM7NAQAAAAAAAwEBAzczMzMzMQECamZmZmdlAQGdmZmZm5kBAMzMzMzPzQEAAAAAAAABBQM3MzMzMDEFAmpmZmZkZQUBnZmZmZiZBQDMzMzMzM0FAAAAAAABAQUDNzMzMzExBQJqZmZmZWUFAZ2ZmZmZmQUAzMzMzM3NBQAAAAAAAgEFAzczMzMyMQUCamZmZmZlBQGdmZmZmpkFAMzMzMzOzQUAAAAAAAMBBQM3MzMzMzEFAmpmZmZnZQUBnZmZmZuZBQDMzMzMz80FAAAAAAAAAQkDNzMzMzAxCQJqZmZmZGUJAZ2ZmZmYmQkAzMzMzMzNCQAAAAAAAQEJAzczMzMxMQkCamZmZmVlCQGdmZmZmZkJAMzMzMzNzQkAAAAAAAIBCQM3MzMzMjEJAmpmZmZmZQkBnZmZmZqZCQDMzMzMzs0JAAAAAAADAQkDNzMzMzMxCQJqZmZmZ2UJAZ2ZmZmbmQkAzMzMzM/NCQAAAAAAAAENAzczMzMwMQ0CamZmZmRlDQGdmZmZmJkNANDMzMzMzQ0AAAAAAAEBDQM3MzMzMTENAmpmZmZlZQ0BnZmZmZmZDQDQzMzMzc0NAAAAAAACAQ0DNzMzMzIxDQJqZmZmZmUNAZ2ZmZmamQ0A0MzMzM7NDQAAAAAAAwENAzczMzMzMQ0CamZmZmdlDQGdmZmZm5kNANDMzMzPzQ0AAAAAAAABEQM3MzMzMDERAmpmZmZkZREBnZmZmZiZEQDQzMzMzM0RAAAAAAABAREDNzMzMzExEQJqZmZmZWURAZ2ZmZmZmREA0MzMzM3NEQAAAAAAAgERAzczMzMyMRECamZmZmZlEQGdmZmZmpkRANDMzMzOzREAAAAAAAMBEQM3MzMzMzERAmpmZmZnZREBnZmZmZuZEQDQzMzMz80RAAAAAAAAARUDNzMzMzAxFQJqZmZmZGUVAZ2ZmZmYmRUA0MzMzMzNFQAAAAAAAQEVAzczMzMxMRUCamZmZmVlFQGdmZmZmZkVANDMzMzNzRUAAAAAAAIBFQM3MzMzMjEVAmpmZmZmZRUBnZmZmZqZFQDQzMzMzs0VAAAAAAADARUDNzMzMzMxFQJqZmZmZ2UVAZ2ZmZmbmRUA0MzMzM/NFQAAAAAAAAEZAzczMzMwMRkCamZmZmRlGQGdmZmZmJkZANDMzMzMzRkAAAAAAAEBGQM3MzMzMTEZAmpmZmZlZRkBnZmZmZmZGQDQzMzMzc0ZAAAAAAACARkDNzMzMzIxGQJqZmZmZmUZAZ2ZmZmamRkA0MzMzM7NGQAAAAAAAwEZAzczMzMzMRkCamZmZmdlGQGdmZmZm5kZANDMzMzPzRkAAAAAAAABHQM3MzMzMDEdAmpmZmZkZR0BnZmZmZiZHQDQzMzMzM0dAAAAAAABAR0DNzMzMzExHQJqZmZmZWUdAZ2ZmZmZmR0A0MzMzM3NHQAAAAAAAgEdAzczMzMyMR0CamZmZmZlHQGdmZmZmpkdANDMzMzOzR0AAAAAAAMBHQM3MzMzMzEdAmpmZmZnZR0BnZmZmZuZHQDQzMzMz80dAAAAAAAAASEDNzMzMzAxIQJqZmZmZGUhAZ2ZmZmYmSEA0MzMzMzNIQAAAAAAAQEhAzczMzMxMSECamZmZmVlIQGdmZmZmZkhANDMzMzNzSEAAAAAAAIBIQM3MzMzMjEhAmpmZmZmZSEBnZmZmZqZIQDQzMzMzs0hAAAAAAADASEDNzMzMzMxIQJqZmZmZ2UhAZ2ZmZmbmSEA0MzMzM/NIQAAAAAAAAElAzczMzMwMSUCamZmZmRlJQGdmZmZmJklANDMzMzMzSUAAAAAAAEBJQM3MzMzMTElAmpmZmZlZSUBnZmZmZmZJQDQzMzMzc0lAAAAAAACASUDNzMzMzIxJQJqZmZmZmUlAZ2ZmZmamSUA0MzMzM7NJQAAAAAAAwElAzczMzMzMSUCamZmZmdlJQGdmZmZm5klANDMzMzPzSUAAAAAAAABKQM3MzMzMDEpAmpmZmZkZSkBnZmZmZiZKQDQzMzMzM0pAAAAAAABASkDNzMzMzExKQJqZmZmZWUpAZ2ZmZmZmSkA0MzMzM3NKQAAAAAAAgEpAzczMzMyMSkCamZmZmZlKQGdmZmZmpkpANDMzMzOzSkAAAAAAAMBKQM3MzMzMzEpAmpmZmZnZSkBnZmZmZuZKQDQzMzMz80pAAAAAAAAAS0DNzMzMzAxLQJqZmZmZGUtAZ2ZmZmYmS0A0MzMzMzNLQAAAAAAAQEtAzczMzMxMS0CamZmZmVlLQGdmZmZmZktANDMzMzNzS0AAAAAAAIBLQM3MzMzMjEtAmpmZmZmZS0BnZmZmZqZLQDQzMzMzs0tAAAAAAADAS0DNzMzMzMxLQJqZmZmZ2UtAZ2ZmZmbmS0A0MzMzM/NLQAAAAAAAAExAzczMzMwMTECamZmZmRlMQGdmZmZmJkxANDMzMzMzTEAAAAAAAEBMQM3MzMzMTExAmpmZmZlZTEBnZmZmZmZMQDQzMzMzc0xAAAAAAACATEDNzMzMzIxMQJqZmZmZmUxAZ2ZmZmamTEA0MzMzM7NMQAAAAAAAwExAzczMzMzMTECamZmZmdlMQGdmZmZm5kxANDMzMzPzTEAAAAAAAABNQM3MzMzMDE1AmpmZmZkZTUBnZmZmZiZNQDQzMzMzM01AAAAAAABATUDNzMzMzExNQJqZmZmZWU1AZ2ZmZmZmTUA0MzMzM3NNQAAAAAAAgE1AzczMzMyMTUCamZmZmZlNQGdmZmZmpk1ANDMzMzOzTUAAAAAAAMBNQM3MzMzMzE1AmpmZmZnZTUBnZmZmZuZNQDQzMzMz801AAAAAAAAATkDNzMzMzAxOQJqZmZmZGU5AZ2ZmZmYmTkA0MzMzMzNOQAAAAAAAQE5AzczMzMxMTkCamZmZmVlOQGdmZmZmZk5ANDMzMzNzTkAAAAAAAIBOQM3MzMzMjE5AmpmZmZmZTkBnZmZmZqZOQDQzMzMzs05AAAAAAADATkDNzMzMzMxOQJqZmZmZ2U5AZ2ZmZmbmTkA0MzMzM/NOQAAAAAAAAE9AzczMzMwMT0CamZmZmRlPQGdmZmZmJk9ANDMzMzMzT0AAAAAAAEBPQM3MzMzMTE9AmpmZmZlZT0BnZmZmZmZPQDQzMzMzc09AAAAAAACAT0DNzMzMzIxPQJqZmZmZmU9AZ2ZmZmamT0A0MzMzM7NPQAAAAAAAwE9AzczMzMzMT0CamZmZmdlPQGdmZmZm5k9ANDMzMzPzT0AAAAAAAABQQGdmZmZmBlBAzczMzMwMUEAzMzMzMxNQQJqZmZmZGVBAAAAAAAAgUEBnZmZmZiZQQM3MzMzMLFBAMzMzMzMzUECamZmZmTlQQAAAAAAAQFBAZ2ZmZmZGUEDNzMzMzExQQDMzMzMzU1BAmpmZmZlZUEAAAAAAAGBQQGdmZmZmZlBAzczMzMxsUEAzMzMzM3NQQJqZmZmZeVBAAAAAAACAUEBnZmZmZoZQQM3MzMzMjFBAMzMzMzOTUECamZmZmZlQQAAAAAAAoFBAZ2ZmZmamUEDNzMzMzKxQQDMzMzMzs1BAmpmZmZm5UEAAAAAAAMBQQGdmZmZmxlBAzczMzMzMUEAzMzMzM9NQQJqZmZmZ2VBAAAAAAADgUEBnZmZmZuZQQM3MzMzM7FBAMzMzMzPzUECamZmZmflQQAAAAAAAAFFAZ2ZmZmYGUUDNzMzMzAxRQDMzMzMzE1FAmpmZmZkZUUAAAAAAACBRQGdmZmZmJlFAzczMzMwsUUAzMzMzMzNRQJqZmZmZOVFAAAAAAABAUUBnZmZmZkZRQM3MzMzMTFFAMzMzMzNTUUCamZmZmVlRQAAAAAAAYFFAZ2ZmZmZmUUDNzMzMzGxRQDMzMzMzc1FAmpmZmZl5UUAAAAAAAIBRQGdmZmZmhlFAzczMzMyMUUAzMzMzM5NRQJqZmZmZmVFAAAAAAACgUUBnZmZmZqZRQM3MzMzMrFFAMzMzMzOzUUCamZmZmblRQAAAAAAAwFFAZ2ZmZmbGUUDNzMzMzMxRQDMzMzMz01FAmpmZmZnZUUAAAAAAAOBRQGdmZmZm5lFAzczMzMzsUUAzMzMzM/NRQJqZmZmZ+VFAAAAAAAAAUkBnZmZmZgZSQM3MzMzMDFJAMzMzMzMTUkCamZmZmRlSQAAAAAAAIFJAZ2ZmZmYmUkDNzMzMzCxSQDMzMzMzM1JAmpmZmZk5UkAAAAAAAEBSQGdmZmZmRlJAzczMzMxMUkAzMzMzM1NSQJqZmZmZWVJAAAAAAABgUkBnZmZmZmZSQM3MzMzMbFJAMzMzMzNzUkCamZmZmXlSQAAAAAAAgFJAZ2ZmZmaGUkDNzMzMzIxSQDMzMzMzk1JAmpmZmZmZUkAAAAAAAKBSQGdmZmZmplJAzczMzMysUkAzMzMzM7NSQJqZmZmZuVJAAAAAAADAUkBnZmZmZsZSQM3MzMzMzFJAMzMzMzPTUkCamZmZmdlSQAAAAAAA4FJAZ2ZmZmbmUkDNzMzMzOxSQDMzMzMz81JAmpmZmZn5UkAAAAAAAABTQGdmZmZmBlNAzczMzMwMU0AzMzMzMxNTQJqZmZmZGVNAAAAAAAAgU0BnZmZmZiZTQM3MzMzMLFNANDMzMzMzU0CamZmZmTlTQAAAAAAAQFNAZ2ZmZmZGU0DNzMzMzExTQDQzMzMzU1NAmpmZmZlZU0AAAAAAAGBTQGdmZmZmZlNAzczMzMxsU0A0MzMzM3NTQJqZmZmZeVNAAAAAAACAU0BnZmZmZoZTQM3MzMzMjFNANDMzMzOTU0CamZmZmZlTQAAAAAAAoFNAZ2ZmZmamU0DNzMzMzKxTQDQzMzMzs1NAmpmZmZm5U0AAAAAAAMBTQGdmZmZmxlNAzczMzMzMU0A0MzMzM9NTQJqZmZmZ2VNAAAAAAADgU0BnZmZmZuZTQM3MzMzM7FNANDMzMzPzU0CamZmZmflTQAAAAAAAAFRAZ2ZmZmYGVEDNzMzMzAxUQDQzMzMzE1RAmpmZmZkZVEAAAAAAACBUQGdmZmZmJlRAzczMzMwsVEA0MzMzMzNUQJqZmZmZOVRAAAAAAABAVEBnZmZmZkZUQM3MzMzMTFRANDMzMzNTVECamZmZmVlUQAAAAAAAYFRAZ2ZmZmZmVEDNzMzMzGxUQDQzMzMzc1RAmpmZmZl5VEAAAAAAAIBUQGdmZmZmhlRAzczMzMyMVEA0MzMzM5NUQJqZmZmZmVRAAAAAAACgVEBnZmZmZqZUQM3MzMzMrFRANDMzMzOzVECamZmZmblUQAAAAAAAwFRAZ2ZmZmbGVEDNzMzMzMxUQDQzMzMz01RAmpmZmZnZVEAAAAAAAOBUQGdmZmZm5lRAzczMzMzsVEA0MzMzM/NUQJqZmZmZ+VRAAAAAAAAAVUBnZmZmZgZVQM3MzMzMDFVANDMzMzMTVUCamZmZmRlVQAAAAAAAIFVAZ2ZmZmYmVUDNzMzMzCxVQDQzMzMzM1VAmpmZmZk5VUAAAAAAAEBVQGdmZmZmRlVAzczMzMxMVUA0MzMzM1NVQJqZmZmZWVVAAAAAAABgVUBnZmZmZmZVQM3MzMzMbFVANDMzMzNzVUCamZmZmXlVQAAAAAAAgFVAZ2ZmZmaGVUDNzMzMzIxVQDQzMzMzk1VAmpmZmZmZVUAAAAAAAKBVQGdmZmZmplVAzczMzMysVUA0MzMzM7NVQJqZmZmZuVVAAAAAAADAVUBnZmZmZsZVQM3MzMzMzFVANDMzMzPTVUCamZmZmdlVQAAAAAAA4FVAZ2ZmZmbmVUDNzMzMzOxVQDQzMzMz81VAmpmZmZn5VUAAAAAAAABWQGdmZmZmBlZAzczMzMwMVkA0MzMzMxNWQJqZmZmZGVZAAAAAAAAgVkBnZmZmZiZWQM3MzMzMLFZANDMzMzMzVkCamZmZmTlWQAAAAAAAQFZAZ2ZmZmZGVkDNzMzMzExWQDQzMzMzU1ZAmpmZmZlZVkAAAAAAAGBWQGdmZmZmZlZAzczMzMxsVkA0MzMzM3NWQJqZmZmZeVZAAAAAAACAVkBnZmZmZoZWQM3MzMzMjFZANDMzMzOTVkCamZmZmZlWQAAAAAAAoFZAZ2ZmZmamVkDNzMzMzKxWQDQzMzMzs1ZAmpmZmZm5VkAAAAAAAMBWQGdmZmZmxlZAzczMzMzMVkA0MzMzM9NWQJqZmZmZ2VZAAAAAAADgVkBnZmZmZuZWQM3MzMzM7FZANDMzMzPzVkCamZmZmflWQAAAAAAAAFdAZ2ZmZmYGV0DNzMzMzAxXQDQzMzMzE1dAmpmZmZkZV0AAAAAAACBXQGdmZmZmJldAzczMzMwsV0A0MzMzMzNXQJqZmZmZOVdAAAAAAABAV0BnZmZmZkZXQM3MzMzMTFdANDMzMzNTV0CamZmZmVlXQAAAAAAAYFdAZ2ZmZmZmV0DNzMzMzGxXQDQzMzMzc1dAmpmZmZl5V0AAAAAAAIBXQGdmZmZmhldAzczMzMyMV0A0MzMzM5NXQJqZmZmZmVdAAAAAAACgV0BnZmZmZqZXQM3MzMzMrFdANDMzMzOzV0CamZmZmblXQAAAAAAAwFdAZ2ZmZmbGV0DNzMzMzMxXQDQzMzMz01dAmpmZmZnZV0AAAAAAAOBXQGdmZmZm5ldAzczMzMzsV0A0MzMzM/NXQJqZmZmZ+VdAAAAAAAAAWEBnZmZmZgZYQM3MzMzMDFhANDMzMzMTWECamZmZmRlYQAAAAAAAIFhAZ2ZmZmYmWEDNzMzMzCxYQDQzMzMzM1hAmpmZmZk5WEAAAAAAAEBYQGdmZmZmRlhAzczMzMxMWEA0MzMzM1NYQJqZmZmZWVhAAAAAAABgWEBnZmZmZmZYQM3MzMzMbFhANDMzMzNzWECamZmZmXlYQAAAAAAAgFhAZ2ZmZmaGWEDNzMzMzIxYQDQzMzMzk1hAmpmZmZmZWEAAAAAAAKBYQGdmZmZmplhAzczMzMysWEA0MzMzM7NYQJqZmZmZuVhAAAAAAADAWEBnZmZmZsZYQM3MzMzMzFhANDMzMzPTWECamZmZmdlYQAAAAAAA4FhAZ2ZmZmbmWEDNzMzMzOxYQDQzMzMz81hAmpmZmZn5WEAAAAAAAABZQGdmZmZmBllAzczMzMwMWUA0MzMzMxNZQJqZmZmZGVlAAAAAAAAgWUBnZmZmZiZZQM3MzMzMLFlANDMzMzMzWUCamZmZmTlZQAAAAAAAQFlAZ2ZmZmZGWUDNzMzMzExZQDQzMzMzU1lAmpmZmZlZWUAAAAAAAGBZQGdmZmZmZllAzczMzMxsWUA0MzMzM3NZQJqZmZmZeVlAAAAAAACAWUBnZmZmZoZZQM3MzMzMjFlANDMzMzOTWUCamZmZmZlZQAAAAAAAoFlAZ2ZmZmamWUDNzMzMzKxZQDQzMzMzs1lAmpmZmZm5WUAAAAAAAMBZQGdmZmZmxllAzczMzMzMWUA0MzMzM9NZQJqZmZmZ2VlAAAAAAADgWUBnZmZmZuZZQM3MzMzM7FlANDMzMzPzWUCamZmZmflZQAAAAAAAAFpAZ2ZmZmYGWkDNzMzMzAxaQDQzMzMzE1pAmpmZmZkZWkAAAAAAACBaQGdmZmZmJlpAzczMzMwsWkA0MzMzMzNaQJqZmZmZOVpAAAAAAABAWkBnZmZmZkZaQM3MzMzMTFpANDMzMzNTWkCamZmZmVlaQAAAAAAAYFpAZ2ZmZmZmWkDNzMzMzGxaQDQzMzMzc1pAmpmZmZl5WkAAAAAAAIBaQGdmZmZmhlpAzczMzMyMWkA0MzMzM5NaQJqZmZmZmVpAAAAAAACgWkBnZmZmZqZaQM3MzMzMrFpANDMzMzOzWkCamZmZmblaQAAAAAAAwFpAZ2ZmZmbGWkDNzMzMzMxaQDQzMzMz01pAmpmZmZnZWkAAAAAAAOBaQGdmZmZm5lpAzczMzMzsWkA0MzMzM/NaQJqZmZmZ+VpAAAAAAAAAW0BnZmZmZgZbQM3MzMzMDFtANDMzMzMTW0CamZmZmRlbQAAAAAAAIFtAZ2ZmZmYmW0DNzMzMzCxbQDQzMzMzM1tAmpmZmZk5W0AAAAAAAEBbQGdmZmZmRltAzczMzMxMW0A0MzMzM1NbQJqZmZmZWVtAAAAAAABgW0BnZmZmZmZbQM3MzMzMbFtANDMzMzNzW0CamZmZmXlbQAAAAAAAgFtAZ2ZmZmaGW0DNzMzMzIxbQDQzMzMzk1tAmpmZmZmZW0AAAAAAAKBbQGdmZmZmpltAzczMzMysW0A0MzMzM7NbQJqZmZmZuVtAAAAAAADAW0BnZmZmZsZbQM3MzMzMzFtANDMzMzPTW0CamZmZmdlbQAAAAAAA4FtAZ2ZmZmbmW0DNzMzMzOxbQDQzMzMz81tAmpmZmZn5W0AAAAAAAABcQGdmZmZmBlxAzczMzMwMXEA0MzMzMxNcQJqZmZmZGVxAAAAAAAAgXEBnZmZmZiZcQM3MzMzMLFxANDMzMzMzXECamZmZmTlcQAAAAAAAQFxAZ2ZmZmZGXEDNzMzMzExcQDQzMzMzU1xAmpmZmZlZXEAAAAAAAGBcQGdmZmZmZlxAzczMzMxsXEA0MzMzM3NcQJqZmZmZeVxAAAAAAACAXEBnZmZmZoZcQM3MzMzMjFxANDMzMzOTXECamZmZmZlcQAAAAAAAoFxAZ2ZmZmamXEDNzMzMzKxcQDQzMzMzs1xAmpmZmZm5XEAAAAAAAMBcQGdmZmZmxlxAzczMzMzMXEA0MzMzM9NcQJqZmZmZ2VxAAAAAAADgXEBnZmZmZuZcQM3MzMzM7FxANDMzMzPzXECamZmZmflcQAAAAAAAAF1AZ2ZmZmYGXUDNzMzMzAxdQDQzMzMzE11AmpmZmZkZXUAAAAAAACBdQGdmZmZmJl1AzczMzMwsXUA0MzMzMzNdQJqZmZmZOV1AAAAAAABAXUBnZmZmZkZdQM3MzMzMTF1ANDMzMzNTXUCamZmZmVldQAAAAAAAYF1AZ2ZmZmZmXUDNzMzMzGxdQDQzMzMzc11AmpmZmZl5XUAAAAAAAIBdQGdmZmZmhl1AzczMzMyMXUA0MzMzM5NdQJqZmZmZmV1AAAAAAACgXUBnZmZmZqZdQM3MzMzMrF1ANDMzMzOzXUCamZmZmbldQAAAAAAAwF1AZ2ZmZmbGXUDNzMzMzMxdQDQzMzMz011AmpmZmZnZXUAAAAAAAOBdQGdmZmZm5l1AzczMzMzsXUA0MzMzM/NdQJqZmZmZ+V1AAAAAAAAAXkBnZmZmZgZeQM3MzMzMDF5ANDMzMzMTXkCamZmZmRleQAAAAAAAIF5AZ2ZmZmYmXkDNzMzMzCxeQDQzMzMzM15AmpmZmZk5XkAAAAAAAEBeQGdmZmZmRl5AzczMzMxMXkA0MzMzM1NeQJqZmZmZWV5AAAAAAABgXkBnZmZmZmZeQM3MzMzMbF5ANDMzMzNzXkCamZmZmXleQAAAAAAAgF5AZ2ZmZmaGXkDNzMzMzIxeQDQzMzMzk15AmpmZmZmZXkAAAAAAAKBeQGdmZmZmpl5AzczMzMysXkA0MzMzM7NeQJqZmZmZuV5AAAAAAADAXkBnZmZmZsZeQM3MzMzMzF5ANDMzMzPTXkCamZmZmdleQAAAAAAA4F5AZ2ZmZmbmXkDNzMzMzOxeQDQzMzMz815AmpmZmZn5XkAAAAAAAABfQGdmZmZmBl9AzczMzMwMX0A0MzMzMxNfQJqZmZmZGV9AAAAAAAAgX0BnZmZmZiZfQM3MzMzMLF9ANDMzMzMzX0CamZmZmTlfQAAAAAAAQF9AZ2ZmZmZGX0DNzMzMzExfQDQzMzMzU19AmpmZmZlZX0AAAAAAAGBfQGdmZmZmZl9AzczMzMxsX0A0MzMzM3NfQJqZmZmZeV9AAAAAAACAX0BnZmZmZoZfQM3MzMzMjF9ANDMzMzOTX0CamZmZmZlfQAAAAAAAoF9AZ2ZmZmamX0DNzMzMzKxfQDQzMzMzs19AmpmZmZm5X0AAAAAAAMBfQGdmZmZmxl9AzczMzMzMX0A0MzMzM9NfQJqZmZmZ2V9AAAAAAADgX0BnZmZmZuZfQM3MzMzM7F9ANDMzMzPzX0CamZmZmflfQAAAAAAAAGBAMzMzMzMDYEBnZmZmZgZgQJqZmZmZCWBAzczMzMwMYEAAAAAAABBgQDMzMzMzE2BAZ2ZmZmYWYECamZmZmRlgQM3MzMzMHGBAAAAAAAAgYEAzMzMzMyNgQGdmZmZmJmBAmpmZmZkpYEDNzMzMzCxgQAAAAAAAMGBAMzMzMzMzYEBnZmZmZjZgQJqZmZmZOWBAzczMzMw8YEAAAAAAAEBgQDMzMzMzQ2BAZ2ZmZmZGYECamZmZmUlgQM3MzMzMTGBAAAAAAABQYEAzMzMzM1NgQGdmZmZmVmBAmpmZmZlZYEDNzMzMzFxgQAAAAAAAYGBAMzMzMzNjYEBnZmZmZmZgQJqZmZmZaWBAzczMzMxsYEAAAAAAAHBgQDMzMzMzc2BAZ2ZmZmZ2YECamZmZmXlgQM3MzMzMfGBAAAAAAACAYEAzMzMzM4NgQGdmZmZmhmBAmpmZmZmJYEDNzMzMzIxgQAAAAAAAkGBAMzMzMzOTYEBnZmZmZpZgQJqZmZmZmWBAzczMzMycYEAAAAAAAKBgQDMzMzMzo2BAZ2ZmZmamYECamZmZmalgQM3MzMzMrGBAAAAAAACwYEAzMzMzM7NgQGdmZmZmtmBAmpmZmZm5YEDNzMzMzLxgQAAAAAAAwGBAMzMzMzPDYEBnZmZmZsZgQJqZmZmZyWBAzczMzMzMYEAAAAAAANBgQDMzMzMz02BAZ2ZmZmbWYECamZmZmdlgQM3MzMzM3GBAAAAAAADgYEAzMzMzM+NgQGdmZmZm5mBAmpmZmZnpYEDNzMzMzOxgQAAAAAAA8GBAMzMzMzPzYEBnZmZmZvZgQJqZmZmZ+WBAzczMzMz8YEAAAAAAAABhQDMzMzMzA2FAZ2ZmZmYGYUCamZmZmQlhQM3MzMzMDGFAAAAAAAAQYUAzMzMzMxNhQGdmZmZmFmFAmpmZmZkZYUDNzMzMzBxhQAAAAAAAIGFAMzMzMzMjYUBnZmZmZiZhQJqZmZmZKWFAzczMzMwsYUAAAAAAADBhQDMzMzMzM2FAZ2ZmZmY2YUCamZmZmTlhQM3MzMzMPGFAAAAAAABAYUAzMzMzM0NhQGdmZmZmRmFAmpmZmZlJYUDNzMzMzExhQAAAAAAAUGFAMzMzMzNTYUBnZmZmZlZhQJqZmZmZWWFAzczMzMxcYUAAAAAAAGBhQDMzMzMzY2FAZ2ZmZmZmYUCamZmZmWlhQM3MzMzMbGFAAAAAAABwYUAzMzMzM3NhQGdmZmZmdmFAmpmZmZl5YUDNzMzMzHxhQAAAAAAAgGFAMzMzMzODYUBnZmZmZoZhQJqZmZmZiWFAzczMzMyMYUAAAAAAAJBhQDMzMzMzk2FAZ2ZmZmaWYUCamZmZmZlhQM3MzMzMnGFAAAAAAACgYUAzMzMzM6NhQGdmZmZmpmFAmpmZmZmpYUDNzMzMzKxhQAAAAAAAsGFAMzMzMzOzYUBnZmZmZrZhQJqZmZmZuWFAzczMzMy8YUAAAAAAAMBhQDMzMzMzw2FAZ2ZmZmbGYUCamZmZmclhQM3MzMzMzGFAAAAAAADQYUAzMzMzM9NhQGdmZmZm1mFAmpmZmZnZYUDNzMzMzNxhQAAAAAAA4GFAMzMzMzPjYUBnZmZmZuZhQJqZmZmZ6WFAzczMzMzsYUAAAAAAAPBhQDMzMzMz82FAZ2ZmZmb2YUCamZmZmflhQM3MzMzM/GFAAAAAAAAAYkAzMzMzMwNiQGdmZmZmBmJAmpmZmZkJYkDNzMzMzAxiQAAAAAAAEGJAMzMzMzMTYkBnZmZmZhZiQJqZmZmZGWJAzczMzMwcYkAAAAAAACBiQDMzMzMzI2JAZ2ZmZmYmYkCamZmZmSliQM3MzMzMLGJAAAAAAAAwYkAzMzMzMzNiQGdmZmZmNmJAmpmZmZk5YkDNzMzMzDxiQAAAAAAAQGJAMzMzMzNDYkBnZmZmZkZiQJqZmZmZSWJAzczMzMxMYkAAAAAAAFBiQDMzMzMzU2JAZ2ZmZmZWYkCamZmZmVliQM3MzMzMXGJAAAAAAABgYkAzMzMzM2NiQGdmZmZmZmJAmpmZmZlpYkDNzMzMzGxiQAAAAAAAcGJAMzMzMzNzYkBnZmZmZnZiQJqZmZmZeWJAzczMzMx8YkAAAAAAAIBiQDMzMzMzg2JAZ2ZmZmaGYkCamZmZmYliQM3MzMzMjGJAAAAAAACQYkAzMzMzM5NiQGdmZmZmlmJAmpmZmZmZYkDNzMzMzJxiQAAAAAAAoGJAMzMzMzOjYkBnZmZmZqZiQJqZmZmZqWJAzczMzMysYkAAAAAAALBiQDMzMzMzs2JAZ2ZmZma2YkCamZmZmbliQM3MzMzMvGJAAAAAAADAYkAzMzMzM8NiQGdmZmZmxmJAmpmZmZnJYkDNzMzMzMxiQAAAAAAA0GJAMzMzMzPTYkBnZmZmZtZiQJqZmZmZ2WJAzczMzMzcYkAAAAAAAOBiQDMzMzMz42JAZ2ZmZmbmYkCamZmZmeliQM3MzMzM7GJAAAAAAADwYkAzMzMzM/NiQGdmZmZm9mJAmpmZmZn5YkDNzMzMzPxiQAAAAAAAAGNAMzMzMzMDY0BnZmZmZgZjQJqZmZmZCWNAzczMzMwMY0AAAAAAABBjQDMzMzMzE2NAZ2ZmZmYWY0CamZmZmRljQM3MzMzMHGNAAAAAAAAgY0AzMzMzMyNjQGdmZmZmJmNAmpmZmZkpY0DNzMzMzCxjQAAAAAAAMGNANDMzMzMzY0BnZmZmZjZjQJqZmZmZOWNAzczMzMw8Y0AAAAAAAEBjQDQzMzMzQ2NAZ2ZmZmZGY0CamZmZmUljQM3MzMzMTGNAAAAAAABQY0A0MzMzM1NjQGdmZmZmVmNAmpmZmZlZY0DNzMzMzFxjQAAAAAAAYGNANDMzMzNjY0BnZmZmZmZjQJqZmZmZaWNAzczMzMxsY0AAAAAAAHBjQDQzMzMzc2NAZ2ZmZmZ2Y0CamZmZmXljQM3MzMzMfGNAAAAAAACAY0A0MzMzM4NjQGdmZmZmhmNAmpmZmZmJY0DNzMzMzIxjQAAAAAAAkGNANDMzMzOTY0BnZmZmZpZjQJqZmZmZmWNAzczMzMycY0AAAAAAAKBjQDQzMzMzo2NAZ2ZmZmamY0CamZmZmaljQM3MzMzMrGNAAAAAAACwY0A0MzMzM7NjQGdmZmZmtmNAmpmZmZm5Y0DNzMzMzLxjQAAAAAAAwGNANDMzMzPDY0BnZmZmZsZjQJqZmZmZyWNAzczMzMzMY0AAAAAAANBjQDQzMzMz02NAZ2ZmZmbWY0CamZmZmdljQM3MzMzM3GNAAAAAAADgY0A0MzMzM+NjQGdmZmZm5mNAmpmZmZnpY0DNzMzMzOxjQAAAAAAA8GNANDMzMzPzY0BnZmZmZvZjQJqZmZmZ+WNAzczMzMz8Y0AAAAAAAABkQDQzMzMzA2RAZ2ZmZmYGZECamZmZmQlkQM3MzMzMDGRAAAAAAAAQZEA0MzMzMxNkQGdmZmZmFmRAmpmZmZkZZEDNzMzMzBxkQAAAAAAAIGRANDMzMzMjZEBnZmZmZiZkQJqZmZmZKWRAzczMzMwsZEAAAAAAADBkQDQzMzMzM2RAZ2ZmZmY2ZECamZmZmTlkQM3MzMzMPGRAAAAAAABAZEA0MzMzM0NkQGdmZmZmRmRAmpmZmZlJZEDNzMzMzExkQAAAAAAAUGRANDMzMzNTZEBnZmZmZlZkQJqZmZmZWWRAzczMzMxcZEAAAAAAAGBkQDQzMzMzY2RAZ2ZmZmZmZECamZmZmWlkQM3MzMzMbGRAAAAAAABwZEA0MzMzM3NkQGdmZmZmdmRAmpmZmZl5ZEDNzMzMzHxkQAAAAAAAgGRANDMzMzODZEBnZmZmZoZkQJqZmZmZiWRAzczMzMyMZEAAAAAAAJBkQDQzMzMzk2RAZ2ZmZmaWZECamZmZmZlkQM3MzMzMnGRAAAAAAACgZEA0MzMzM6NkQGdmZmZmpmRAmpmZmZmpZEDNzMzMzKxkQAAAAAAAsGRANDMzMzOzZEBnZmZmZrZkQJqZmZmZuWRAzczMzMy8ZEAAAAAAAMBkQDQzMzMzw2RAZ2ZmZmbGZECamZmZmclkQM3MzMzMzGRAAAAAAADQZEA0MzMzM9NkQGdmZmZm1mRAmpmZmZnZZEDNzMzMzNxkQAAAAAAA4GRANDMzMzPjZEBnZmZmZuZkQJqZmZmZ6WRAzczMzMzsZEAAAAAAAPBkQDQzMzMz82RAZ2ZmZmb2ZECamZmZmflkQM3MzMzM/GRAAAAAAAAAZUA0MzMzMwNlQGdmZmZmBmVAmpmZmZkJZUDNzMzMzAxlQAAAAAAAEGVANDMzMzMTZUBnZmZmZhZlQJqZmZmZGWVAzczMzMwcZUAAAAAAACBlQDQzMzMzI2VAZ2ZmZmYmZUCamZmZmSllQM3MzMzMLGVAAAAAAAAwZUA0MzMzMzNlQGdmZmZmNmVAmpmZmZk5ZUDNzMzMzDxlQAAAAAAAQGVANDMzMzNDZUBnZmZmZkZlQJqZmZmZSWVAzczMzMxMZUAAAAAAAFBlQDQzMzMzU2VAZ2ZmZmZWZUCamZmZmVllQM3MzMzMXGVAAAAAAABgZUA0MzMzM2NlQGdmZmZmZmVAmpmZmZlpZUDNzMzMzGxlQAAAAAAAcGVANDMzMzNzZUBnZmZmZnZlQJqZmZmZeWVAzczMzMx8ZUAAAAAAAIBlQDQzMzMzg2VAZ2ZmZmaGZUCamZmZmYllQM3MzMzMjGVAAAAAAACQZUA0MzMzM5NlQGdmZmZmlmVAmpmZmZmZZUDNzMzMzJxlQAAAAAAAoGVANDMzMzOjZUBnZmZmZqZlQJqZmZmZqWVAzczMzMysZUAAAAAAALBlQDQzMzMzs2VAZ2ZmZma2ZUCamZmZmbllQM3MzMzMvGVAAAAAAADAZUA0MzMzM8NlQGdmZmZmxmVAmpmZmZnJZUDNzMzMzMxlQAAAAAAA0GVANDMzMzPTZUBnZmZmZtZlQJqZmZmZ2WVAzczMzMzcZUAAAAAAAOBlQDQzMzMz42VAZ2ZmZmbmZUCamZmZmellQM3MzMzM7GVAAAAAAADwZUA0MzMzM/NlQGdmZmZm9mVAmpmZmZn5ZUDNzMzMzPxlQAAAAAAAAGZANDMzMzMDZkBnZmZmZgZmQJqZmZmZCWZAzczMzMwMZkAAAAAAABBmQDQzMzMzE2ZAZ2ZmZmYWZkCamZmZmRlmQM3MzMzMHGZAAAAAAAAgZkA0MzMzMyNmQGdmZmZmJmZAmpmZmZkpZkDNzMzMzCxmQAAAAAAAMGZANDMzMzMzZkBnZmZmZjZmQJqZmZmZOWZAzczMzMw8ZkAAAAAAAEBmQDQzMzMzQ2ZAZ2ZmZmZGZkCamZmZmUlmQM3MzMzMTGZAAAAAAABQZkA0MzMzM1NmQGdmZmZmVmZAmpmZmZlZZkDNzMzMzFxmQAAAAAAAYGZANDMzMzNjZkBnZmZmZmZmQJqZmZmZaWZAzczMzMxsZkAAAAAAAHBmQDQzMzMzc2ZAZ2ZmZmZ2ZkCamZmZmXlmQM3MzMzMfGZAAAAAAACAZkA0MzMzM4NmQGdmZmZmhmZAmpmZmZmJZkDNzMzMzIxmQAAAAAAAkGZANDMzMzOTZkBnZmZmZpZmQJqZmZmZmWZAzczMzMycZkAAAAAAAKBmQDQzMzMzo2ZAZ2ZmZmamZkCamZmZmalmQM3MzMzMrGZAAAAAAACwZkA0MzMzM7NmQGdmZmZmtmZAmpmZmZm5ZkDNzMzMzLxmQAAAAAAAwGZANDMzMzPDZkBnZmZmZsZmQJqZmZmZyWZAzczMzMzMZkAAAAAAANBmQDQzMzMz02ZAZ2ZmZmbWZkCamZmZmdlmQM3MzMzM3GZAAAAAAADgZkA0MzMzM+NmQGdmZmZm5mZAmpmZmZnpZkDNzMzMzOxmQAAAAAAA8GZANDMzMzPzZkBnZmZmZvZmQJqZmZmZ+WZAzczMzMz8ZkAAAAAAAABnQDQzMzMzA2dAZ2ZmZmYGZ0CamZmZmQlnQM3MzMzMDGdAAAAAAAAQZ0A0MzMzMxNnQGdmZmZmFmdAmpmZmZkZZ0DNzMzMzBxnQAAAAAAAIGdANDMzMzMjZ0BnZmZmZiZnQJqZmZmZKWdAzczMzMwsZ0AAAAAAADBnQDQzMzMzM2dAZ2ZmZmY2Z0CamZmZmTlnQM3MzMzMPGdAAAAAAABAZ0A0MzMzM0NnQGdmZmZmRmdAmpmZmZlJZ0DNzMzMzExnQAAAAAAAUGdANDMzMzNTZ0BnZmZmZlZnQJqZmZmZWWdAzczMzMxcZ0AAAAAAAGBnQDQzMzMzY2dAZ2ZmZmZmZ0CamZmZmWlnQM3MzMzMbGdAAAAAAABwZ0A0MzMzM3NnQGdmZmZmdmdAmpmZmZl5Z0DNzMzMzHxnQAAAAAAAgGdANDMzMzODZ0BnZmZmZoZnQJqZmZmZiWdAzczMzMyMZ0AAAAAAAJBnQDQzMzMzk2dAZ2ZmZmaWZ0CamZmZmZlnQM3MzMzMnGdAAAAAAACgZ0A0MzMzM6NnQGdmZmZmpmdAmpmZmZmpZ0DNzMzMzKxnQAAAAAAAsGdANDMzMzOzZ0BnZmZmZrZnQJqZmZmZuWdAzczMzMy8Z0AAAAAAAMBnQDQzMzMzw2dAZ2ZmZmbGZ0CamZmZmclnQM3MzMzMzGdAAAAAAADQZ0A0MzMzM9NnQGdmZmZm1mdAmpmZmZnZZ0DNzMzMzNxnQAAAAAAA4GdANDMzMzPjZ0BnZmZmZuZnQJqZmZmZ6WdAzczMzMzsZ0AAAAAAAPBnQDQzMzMz82dAZ2ZmZmb2Z0CamZmZmflnQM3MzMzM/GdAAAAAAAAAaEA0MzMzMwNoQGdmZmZmBmhAmpmZmZkJaEDNzMzMzAxoQAAAAAAAEGhANDMzMzMTaEBnZmZmZhZoQJqZmZmZGWhAzczMzMwcaEAAAAAAACBoQDQzMzMzI2hAZ2ZmZmYmaECamZmZmSloQM3MzMzMLGhAAAAAAAAwaEA0MzMzMzNoQGdmZmZmNmhAmpmZmZk5aEDNzMzMzDxoQAAAAAAAQGhANDMzMzNDaEBnZmZmZkZoQJqZmZmZSWhAzczMzMxMaEAAAAAAAFBoQDQzMzMzU2hAZ2ZmZmZWaECamZmZmVloQM3MzMzMXGhAAAAAAABgaEA0MzMzM2NoQGdmZmZmZmhAmpmZmZlpaEDNzMzMzGxoQAAAAAAAcGhANDMzMzNzaEBnZmZmZnZoQJqZmZmZeWhAzczMzMx8aEAAAAAAAIBoQDQzMzMzg2hAZ2ZmZmaGaECamZmZmYloQM3MzMzMjGhAAAAAAACQaEA0MzMzM5NoQGdmZmZmlmhAmpmZmZmZaEDNzMzMzJxoQAAAAAAAoGhANDMzMzOjaEBnZmZmZqZoQJqZmZmZqWhAzczMzMysaEAAAAAAALBoQDQzMzMzs2hAZ2ZmZma2aECamZmZmbloQM3MzMzMvGhAAAAAAADAaEA0MzMzM8NoQGdmZmZmxmhAmpmZmZnJaEDNzMzMzMxoQAAAAAAA0GhANDMzMzPTaEBnZmZmZtZoQJqZmZmZ2WhAzczMzMzcaEAAAAAAAOBoQDQzMzMz42hAZ2ZmZmbmaECamZmZmeloQM3MzMzM7GhAAAAAAADwaEA0MzMzM/NoQGdmZmZm9mhAmpmZmZn5aEDNzMzMzPxoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[2001]}},\"selected\":{\"id\":\"2216\"},\"selection_policy\":{\"id\":\"2215\"}},\"id\":\"1921\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1439\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1921\"},\"glyph\":{\"id\":\"1922\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1924\"},\"nonselection_glyph\":{\"id\":\"1923\"},\"view\":{\"id\":\"1926\"}},\"id\":\"1925\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1924\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1630\",\"type\":\"ResetTool\"},{\"attributes\":{\"below\":[{\"id\":\"1521\"}],\"center\":[{\"id\":\"1524\"},{\"id\":\"1528\"}],\"height\":200,\"left\":[{\"id\":\"1525\"}],\"renderers\":[{\"id\":\"1746\"},{\"id\":\"1752\"},{\"id\":\"1758\"}],\"title\":{\"id\":\"1512\"},\"toolbar\":{\"id\":\"1536\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1514\"},\"x_scale\":{\"id\":\"1517\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1519\"}},\"id\":\"1511\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1923\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1921\"}},\"id\":\"1926\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1631\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1951\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1629\",\"type\":\"SaveTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1465\"},{\"id\":\"1466\"},{\"id\":\"1467\"},{\"id\":\"1468\"},{\"id\":\"1469\"},{\"id\":\"1470\"},{\"id\":\"1740\"}]},\"id\":\"1472\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1949\"},\"glyph\":{\"id\":\"1950\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1952\"},\"nonselection_glyph\":{\"id\":\"1951\"},\"view\":{\"id\":\"1954\"}},\"id\":\"1953\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1618\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1621\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2218\"},\"selection_policy\":{\"id\":\"2217\"}},\"id\":\"1927\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1927\"},\"glyph\":{\"id\":\"1928\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1930\"},\"nonselection_glyph\":{\"id\":\"1929\"},\"view\":{\"id\":\"1932\"}},\"id\":\"1931\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1622\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1625\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1930\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1640\"},\"glyph\":{\"id\":\"1641\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1643\"},\"nonselection_glyph\":{\"id\":\"1642\"},\"view\":{\"id\":\"1645\"}},\"id\":\"1644\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1942\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2162\"},\"group\":null,\"major_label_policy\":{\"id\":\"2163\"},\"ticker\":{\"id\":\"1623\"}},\"id\":\"1622\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1927\"}},\"id\":\"1932\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1949\"}},\"id\":\"1954\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1929\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2201\"},\"selection_policy\":{\"id\":\"2200\"}},\"id\":\"1640\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2225\"},\"selection_policy\":{\"id\":\"2224\"}},\"id\":\"1949\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1619\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1939\"},\"glyph\":{\"id\":\"1940\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1942\"},\"nonselection_glyph\":{\"id\":\"1941\"},\"view\":{\"id\":\"1944\"}},\"id\":\"1943\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1433\"},{\"id\":\"1434\"},{\"id\":\"1435\"},{\"id\":\"1436\"},{\"id\":\"1437\"},{\"id\":\"1438\"},{\"id\":\"1658\"}]},\"id\":\"1440\",\"type\":\"Toolbar\"},{\"attributes\":{\"tools\":[{\"id\":\"1594\"},{\"id\":\"1595\"},{\"id\":\"1596\"},{\"id\":\"1597\"},{\"id\":\"1598\"},{\"id\":\"1599\"},{\"id\":\"1967\"}]},\"id\":\"1601\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1627\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1609\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1941\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2238\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1616\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1950\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1956\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1958\"},\"nonselection_glyph\":{\"id\":\"1957\"},\"view\":{\"id\":\"1960\"}},\"id\":\"1959\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1632\"}},\"id\":\"1628\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1453\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2165\"},\"group\":null,\"major_label_policy\":{\"id\":\"2166\"},\"ticker\":{\"id\":\"1619\"}},\"id\":\"1618\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1952\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1450\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1939\"}},\"id\":\"1944\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2239\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1769\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1517\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2056\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1771\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2152\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2112\"},\"group\":null,\"major_label_policy\":{\"id\":\"2113\"},\"ticker\":{\"id\":\"1776\"},\"visible\":false},\"id\":\"1775\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2109\"},\"group\":null,\"major_label_policy\":{\"id\":\"2110\"},\"ticker\":{\"id\":\"1780\"},\"visible\":false},\"id\":\"1779\",\"type\":\"LinearAxis\"},{\"attributes\":{\"below\":[{\"id\":\"1554\"}],\"center\":[{\"id\":\"1557\"},{\"id\":\"1561\"}],\"height\":200,\"left\":[{\"id\":\"1558\"}],\"renderers\":[{\"id\":\"1684\"},{\"id\":\"1690\"},{\"id\":\"1696\"}],\"title\":{\"id\":\"1544\"},\"toolbar\":{\"id\":\"1569\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1546\"},\"x_scale\":{\"id\":\"1550\"},\"y_range\":{\"id\":\"1548\"},\"y_scale\":{\"id\":\"1552\"}},\"id\":\"1543\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1119\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2083\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1120\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2153\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1784\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1775\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1778\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1514\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1765\",\"type\":\"Title\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1776\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1122\"},\"glyph\":{\"id\":\"1123\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1125\"},\"nonselection_glyph\":{\"id\":\"1124\"},\"view\":{\"id\":\"1127\"}},\"id\":\"1126\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1779\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1782\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2102\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1512\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1773\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1808\"}],\"center\":[{\"id\":\"1811\"},{\"id\":\"1815\"},{\"id\":\"1846\"}],\"height\":200,\"left\":[{\"id\":\"1812\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1840\"},{\"id\":\"1877\"}],\"title\":{\"id\":\"1798\"},\"toolbar\":{\"id\":\"1823\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1800\"},\"x_scale\":{\"id\":\"1804\"},\"y_range\":{\"id\":\"1802\"},\"y_scale\":{\"id\":\"1806\"}},\"id\":\"1797\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2103\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1746\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1762\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis\":{\"id\":\"1521\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1524\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1119\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1780\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2243\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1519\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2235\"},\"selection_policy\":{\"id\":\"2234\"}},\"id\":\"2154\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2057\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1788\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2129\"},\"group\":null,\"major_label_policy\":{\"id\":\"2130\"},\"ticker\":{\"id\":\"1760\"}},\"id\":\"1521\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1783\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1789\"}},\"id\":\"1785\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2127\"},\"group\":null,\"major_label_policy\":{\"id\":\"2128\"},\"ticker\":{\"id\":\"1526\"},\"visible\":false},\"id\":\"1525\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2058\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1786\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis\":{\"id\":\"1525\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1528\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2212\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2121\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2213\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1789\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2004\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2122\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1534\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1529\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1535\"}},\"id\":\"1531\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2005\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2124\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1850\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1532\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2244\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2007\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1848\"}},\"id\":\"1854\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1535\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2008\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2059\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1934\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{\"interval\":50},\"id\":\"1080\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1389\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1391\"},\"nonselection_glyph\":{\"id\":\"1390\"},\"view\":{\"id\":\"1393\"}},\"id\":\"1392\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1089\"}},\"id\":\"1094\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1848\"},\"glyph\":{\"id\":\"1850\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1852\"},\"nonselection_glyph\":{\"id\":\"1851\"},\"view\":{\"id\":\"1854\"}},\"id\":\"1853\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2060\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1088\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1817\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1089\"},\"glyph\":{\"id\":\"1090\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1092\"},\"nonselection_glyph\":{\"id\":\"1091\"},\"view\":{\"id\":\"1094\"}},\"id\":\"1093\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1086\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1122\"}},\"id\":\"1127\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2067\"},\"selection_policy\":{\"id\":\"2066\"}},\"id\":\"2009\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1802\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2156\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{\"axis\":{\"id\":\"1554\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1557\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2069\"},\"selection_policy\":{\"id\":\"2068\"}},\"id\":\"2010\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2152\"},\"group\":null,\"major_label_policy\":{\"id\":\"2153\"},\"ticker\":{\"id\":\"1809\"},\"visible\":false},\"id\":\"1808\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"2087\"},\"selection_policy\":{\"id\":\"2086\"}},\"id\":\"1089\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2157\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2071\"},\"selection_policy\":{\"id\":\"2070\"}},\"id\":\"2011\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"2089\"},\"selection_policy\":{\"id\":\"2088\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1092\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2159\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1548\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2170\"},\"selection_policy\":{\"id\":\"2169\"}},\"id\":\"1101\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1139\"}],\"center\":[{\"id\":\"1142\"},{\"id\":\"1146\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"},{\"id\":\"1237\"},{\"id\":\"1240\"}],\"height\":200,\"left\":[{\"id\":\"1143\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1165\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1222\"},{\"id\":\"1247\"},{\"id\":\"1253\"}],\"title\":{\"id\":\"1129\"},\"toolbar\":{\"id\":\"1154\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1131\"},\"x_scale\":{\"id\":\"1135\"},\"y_range\":{\"id\":\"1133\"},\"y_scale\":{\"id\":\"1137\"}},\"id\":\"1128\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2073\"},\"selection_policy\":{\"id\":\"2072\"}},\"id\":\"2012\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2160\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{\"tools\":[{\"id\":\"1783\"},{\"id\":\"1784\"},{\"id\":\"1785\"},{\"id\":\"1786\"},{\"id\":\"1787\"},{\"id\":\"1788\"}]},\"id\":\"1790\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1555\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2149\"},\"group\":null,\"major_label_policy\":{\"id\":\"2150\"},\"ticker\":{\"id\":\"1813\"},\"visible\":false},\"id\":\"1812\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1804\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1552\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2215\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2075\"},\"selection_policy\":{\"id\":\"2074\"}},\"id\":\"2013\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1586\"}],\"center\":[{\"id\":\"1589\"},{\"id\":\"1593\"}],\"height\":200,\"renderers\":[{\"id\":\"1919\"},{\"id\":\"1953\"},{\"id\":\"1959\"},{\"id\":\"1965\"}],\"right\":[{\"id\":\"1590\"}],\"title\":{\"id\":\"1577\"},\"toolbar\":{\"id\":\"1601\"},\"toolbar_location\":null,\"width\":240,\"x_range\":{\"id\":\"1579\"},\"x_scale\":{\"id\":\"1582\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1584\"}},\"id\":\"1576\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"2052\"},\"selection_policy\":{\"id\":\"2051\"}},\"id\":\"1161\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1808\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1811\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1798\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2216\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2172\"},\"selection_policy\":{\"id\":\"2171\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1809\",\"type\":\"BasicTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"1529\"},{\"id\":\"1530\"},{\"id\":\"1531\"},{\"id\":\"1532\"},{\"id\":\"1533\"},{\"id\":\"1534\"},{\"id\":\"1762\"}]},\"id\":\"1536\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1812\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1815\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1103\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2077\"},\"selection_policy\":{\"id\":\"2076\"}},\"id\":\"2014\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1544\",\"type\":\"Title\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1125\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1830\"},\"glyph\":{\"id\":\"1831\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1833\"},\"nonselection_glyph\":{\"id\":\"1832\"},\"view\":{\"id\":\"1835\"}},\"id\":\"1834\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1546\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1101\"}},\"id\":\"1106\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1806\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1110\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1104\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1935\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1565\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1101\"},\"glyph\":{\"id\":\"1102\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1104\"},\"nonselection_glyph\":{\"id\":\"1103\"},\"view\":{\"id\":\"1106\"}},\"id\":\"1105\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1550\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1813\",\"type\":\"BasicTicker\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1970\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2159\"},\"group\":null,\"major_label_policy\":{\"id\":\"2160\"},\"ticker\":{\"id\":\"1555\"}},\"id\":\"1554\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2129\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"1618\"}],\"center\":[{\"id\":\"1621\"},{\"id\":\"1625\"}],\"height\":200,\"renderers\":[{\"id\":\"1704\"},{\"id\":\"1710\"},{\"id\":\"1716\"}],\"right\":[{\"id\":\"1622\"}],\"title\":{\"id\":\"1609\"},\"toolbar\":{\"id\":\"1633\"},\"toolbar_location\":null,\"width\":240,\"x_range\":{\"id\":\"1611\"},\"x_scale\":{\"id\":\"1614\"},\"y_range\":{\"id\":\"1548\"},\"y_scale\":{\"id\":\"1616\"}},\"id\":\"1608\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2061\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"1107\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1821\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1563\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1971\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1109\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"2130\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1816\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1110\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2082\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1111\",\"type\":\"Arrow\"},{\"attributes\":{\"axis\":{\"id\":\"1558\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1561\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2062\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2156\"},\"group\":null,\"major_label_policy\":{\"id\":\"2157\"},\"ticker\":{\"id\":\"1559\"},\"visible\":false},\"id\":\"1558\",\"type\":\"LinearAxis\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{\"overlay\":{\"id\":\"1822\"}},\"id\":\"1818\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1819\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2105\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"ResetTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1562\"},{\"id\":\"1563\"},{\"id\":\"1564\"},{\"id\":\"1565\"},{\"id\":\"1566\"},{\"id\":\"1567\"},{\"id\":\"1698\"}]},\"id\":\"1569\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2174\"},\"selection_policy\":{\"id\":\"2173\"}},\"id\":\"1122\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1566\",\"type\":\"ResetTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1816\"},{\"id\":\"1817\"},{\"id\":\"1818\"},{\"id\":\"1819\"},{\"id\":\"1820\"},{\"id\":\"1821\"}]},\"id\":\"1823\",\"type\":\"Toolbar\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1559\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2106\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1562\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2218\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1822\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{\"overlay\":{\"id\":\"1568\"}},\"id\":\"1564\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"V_stress_diag\":{\"id\":\"1684\"},\"axial_strain_diag\":{\"id\":\"1724\"},\"bending_strain_diag\":{\"id\":\"1746\"},\"centroid\":{\"id\":\"1676\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1965\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1953\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1704\"},\"total_strain_diag\":{\"id\":\"1931\"},\"total_strain_pl_diag\":{\"id\":\"1925\"},\"total_stress_pl_diag\":{\"id\":\"1919\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2001) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"1970\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2224\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2225\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1956\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2173\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1957\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2182\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1958\",\"type\":\"Line\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1962\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2174\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1960\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2183\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2024\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2227\"},\"selection_policy\":{\"id\":\"2226\"}},\"id\":\"1961\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1964\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2025\",\"type\":\"AllLabels\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1953\"},{\"id\":\"1919\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1967\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1961\"},\"glyph\":{\"id\":\"1962\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1964\"},\"nonselection_glyph\":{\"id\":\"1963\"},\"view\":{\"id\":\"1966\"}},\"id\":\"1965\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1961\"}},\"id\":\"1966\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2027\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1963\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"V_stress_diag\":{\"id\":\"1684\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1724\"},\"bending_strain_diag\":{\"id\":\"1746\"},\"centroid\":{\"id\":\"1676\"},\"discr_stress\":201,\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1871\"},\"label_N_section\":{\"id\":\"1865\"},\"label_V_section\":{\"id\":\"1877\"},\"neutral_axis\":{\"id\":\"1965\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1848\"},\"section_M_head\":{\"id\":\"1859\"},\"section_N\":{\"id\":\"1843\"},\"section_V\":{\"id\":\"1846\"},\"sigma_stress_diag\":{\"id\":\"1953\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1704\"},\"total_strain_diag\":{\"id\":\"1931\"},\"total_strain_pl_diag\":{\"id\":\"1925\"},\"total_stress_pl_diag\":{\"id\":\"1919\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2001) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"1969\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2191\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2028\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1084\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1086\"},\"nonselection_glyph\":{\"id\":\"1085\"},\"view\":{\"id\":\"1088\"}},\"id\":\"1087\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2192\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2193\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2184\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2080\"},\"group\":null,\"major_label_policy\":{\"id\":\"2081\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1052\",\"type\":\"LinearAxis\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"V_stress_diag\":{\"id\":\"1684\"},\"axial_strain_diag\":{\"id\":\"1724\"},\"bending_strain_diag\":{\"id\":\"1746\"},\"centroid\":{\"id\":\"1676\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1965\"},\"s_b\":{\"id\":\"1003\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1953\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1704\"},\"total_strain_diag\":{\"id\":\"1931\"},\"total_strain_pl_diag\":{\"id\":\"1925\"},\"total_stress_pl_diag\":{\"id\":\"1919\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2001) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"1971\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2194\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1358\"},\"N_stress_diag\":{\"id\":\"1644\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1724\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1871\"},\"label_N_section\":{\"id\":\"1865\"},\"label_V_section\":{\"id\":\"1877\"},\"neutral_axis\":{\"id\":\"1965\"},\"s_M\":{\"id\":\"1242\"},\"s_section_M\":{\"id\":\"1848\"},\"section_M_head\":{\"id\":\"1859\"},\"section_N\":{\"id\":\"1843\"},\"section_V\":{\"id\":\"1846\"},\"sigma_stress_diag\":{\"id\":\"1953\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1704\"},\"total_strain_diag\":{\"id\":\"1931\"},\"total_strain_pl_diag\":{\"id\":\"1925\"},\"total_stress_pl_diag\":{\"id\":\"1919\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=101) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2001) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \"},\"id\":\"1972\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2185\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1253\"},\"div_P\":{\"id\":\"1259\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1871\"},\"label_N_section\":{\"id\":\"1865\"},\"label_V_section\":{\"id\":\"1877\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1848\"},\"section_M_head\":{\"id\":\"1859\"},\"section_N\":{\"id\":\"1843\"},\"section_V\":{\"id\":\"1846\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1704\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1973\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1386\"},\"M_stress_diag\":{\"id\":\"1664\"},\"V_diag\":{\"id\":\"1372\"},\"V_stress_diag\":{\"id\":\"1684\"},\"arr_head\":{\"id\":\"1253\"},\"bending_strain_diag\":{\"id\":\"1746\"},\"centroid\":{\"id\":\"1676\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1871\"},\"label_N_section\":{\"id\":\"1865\"},\"label_V_section\":{\"id\":\"1877\"},\"neutral_axis\":{\"id\":\"1965\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1848\"},\"section_M_head\":{\"id\":\"1859\"},\"section_N\":{\"id\":\"1843\"},\"section_V\":{\"id\":\"1846\"},\"sigma_stress_diag\":{\"id\":\"1953\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1704\"},\"total_strain_diag\":{\"id\":\"1931\"},\"total_strain_pl_diag\":{\"id\":\"1925\"},\"total_stress_pl_diag\":{\"id\":\"1919\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2001) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \"},\"id\":\"1974\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2226\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"args\":{\"source\":{\"id\":\"1007\"},\"total_strain_diag\":{\"id\":\"1931\"},\"total_strain_pl_diag\":{\"id\":\"1925\"},\"total_stress_pl_diag\":{\"id\":\"1919\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const fy = cb_obj.value\\n const L = db['L'][0]\\n\\n // update q\\n db['fy'][0] = fy\\n\\n // update\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2001) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \"},\"id\":\"1975\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2084\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2227\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1664\"},\"N_stress_diag\":{\"id\":\"1644\"},\"axial_strain_diag\":{\"id\":\"1724\"},\"bending_strain_diag\":{\"id\":\"1746\"},\"centroid\":{\"id\":\"1676\"},\"source\":{\"id\":\"1007\"},\"total_strain_diag\":{\"id\":\"1931\"},\"total_strain_pl_diag\":{\"id\":\"1925\"},\"total_stress_pl_diag\":{\"id\":\"1919\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const E = cb_obj.value\\n\\n // update E\\n db['E'][0] = E\\n\\n // update\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2001) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"1976\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2085\",\"type\":\"Selection\"},{\"attributes\":{\"width\":10},\"id\":\"1977\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2195\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1041\"},{\"id\":\"1977\"},{\"id\":\"1979\"}]},\"id\":\"1980\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2176\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1999\",\"type\":\"Title\"},{\"attributes\":{\"height\":30},\"id\":\"1978\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2196\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1978\"},{\"id\":\"1108\"},{\"id\":\"1109\"},{\"id\":\"1256\"},{\"id\":\"1255\"},{\"id\":\"1879\"},{\"id\":\"1880\"},{\"id\":\"1881\"},{\"id\":\"1882\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"},{\"id\":\"1260\"}]},\"id\":\"1979\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2177\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2186\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2127\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"1797\"},{\"id\":\"1986\"},{\"id\":\"1543\"},{\"id\":\"1987\"},{\"id\":\"1988\"},{\"id\":\"1989\"},{\"id\":\"1608\"}]},\"id\":\"1990\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2187\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1764\"},{\"id\":\"1447\"},{\"id\":\"1414\"},{\"id\":\"1511\"},{\"id\":\"1479\"},{\"id\":\"1883\"},{\"id\":\"1576\"}]},\"id\":\"1985\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2178\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1128\"},{\"id\":\"1980\"}]},\"id\":\"1981\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2086\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2001\",\"type\":\"Title\"},{\"attributes\":{\"height\":10},\"id\":\"1982\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2179\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1981\"},{\"id\":\"1983\"}]},\"id\":\"1984\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2030\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2087\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"1982\"},{\"id\":\"1262\"},{\"id\":\"1294\"},{\"id\":\"1324\"}]},\"id\":\"1983\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2031\",\"type\":\"AllLabels\"},{\"attributes\":{\"width\":200},\"id\":\"1989\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2197\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2033\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"width\":200},\"id\":\"1986\",\"type\":\"Spacer\"},{\"attributes\":{\"width\":200},\"id\":\"1988\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2198\",\"type\":\"Selection\"},{\"attributes\":{\"width\":200},\"id\":\"1987\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2034\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2188\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1985\"},{\"id\":\"1990\"}]},\"id\":\"1991\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2189\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1991\"}]},\"id\":\"1992\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1984\"},{\"id\":\"1992\"}]},\"id\":\"1993\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2229\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2088\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2230\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1993\"}]},\"id\":\"1994\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2089\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1052\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1055\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2205\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2206\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2097\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2098\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2099\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2100\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2167\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2168\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2207\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2143\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2208\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2144\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"fy\":[355],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"2054\"},\"selection_policy\":{\"id\":\"2053\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2146\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2085\"},\"selection_policy\":{\"id\":\"2084\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2147\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2056\"},\"selection_policy\":{\"id\":\"2055\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2169\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2196\"},\"selection_policy\":{\"id\":\"2195\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"2060\"},\"selection_policy\":{\"id\":\"2059\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2170\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1087\"},{\"id\":\"1093\"},{\"id\":\"1099\"},{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1186\"},{\"id\":\"1192\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"1052\"}],\"center\":[{\"id\":\"1055\"},{\"id\":\"1059\"},{\"id\":\"1111\"},{\"id\":\"1120\"}],\"left\":[{\"id\":\"1056\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1078\"},{\"id\":\"1105\"},{\"id\":\"1117\"},{\"id\":\"1126\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1067\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1048\"},\"y_range\":{\"id\":\"1046\"},\"y_scale\":{\"id\":\"1050\"}},\"id\":\"1041\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2017\"},\"group\":null,\"major_label_policy\":{\"id\":\"2018\"},\"ticker\":{\"id\":\"1024\"},\"visible\":false},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2171\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2172\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2210\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2020\"},\"group\":null,\"major_label_policy\":{\"id\":\"2021\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2211\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"2232\"},\"selection_policy\":{\"id\":\"2231\"}},\"id\":\"1873\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2149\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2150\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1333\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1332\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1335\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2072\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2073\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1863\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1858\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1220\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2100\"},\"selection_policy\":{\"id\":\"2099\"}},\"id\":\"1354\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2036\"},\"group\":null,\"major_label_policy\":{\"id\":\"2037\"},\"ticker\":{\"id\":\"1337\"}},\"id\":\"1336\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1336\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1339\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2074\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1856\",\"type\":\"Scatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2109\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2075\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1345\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2110\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1340\",\"type\":\"PanTool\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1346\"}},\"id\":\"1342\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2112\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2076\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2113\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1206\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2077\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1346\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1219\",\"type\":\"Patch\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1357\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1833\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1831\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1389\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1280\"},{\"id\":\"1281\"},{\"id\":\"1282\"},{\"id\":\"1283\"},{\"id\":\"1284\"},{\"id\":\"1285\"},{\"id\":\"1366\"}]},\"id\":\"1287\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1219\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1221\"},\"nonselection_glyph\":{\"id\":\"1220\"},\"view\":{\"id\":\"1223\"}},\"id\":\"1222\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2181\"},\"selection_policy\":{\"id\":\"2180\"}},\"id\":\"1830\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1223\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1482\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2009\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2192\"},\"selection_policy\":{\"id\":\"2191\"}},\"id\":\"2114\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1221\",\"type\":\"Patch\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1390\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1830\"}},\"id\":\"1835\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1832\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1236\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1862\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1239\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1836\"},\"glyph\":{\"id\":\"1837\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1839\"},\"nonselection_glyph\":{\"id\":\"1838\"},\"view\":{\"id\":\"1841\"}},\"id\":\"1840\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1239\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2014\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1240\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2187\"},\"selection_policy\":{\"id\":\"2186\"}},\"id\":\"1861\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2010\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1382\"}},\"id\":\"1387\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2230\"},\"selection_policy\":{\"id\":\"2229\"}},\"id\":\"1836\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1236\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2013\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1237\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1839\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2011\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1837\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1838\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1836\"}},\"id\":\"1841\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2064\"},\"selection_policy\":{\"id\":\"2063\"}},\"id\":\"1249\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2140\"},\"group\":null,\"major_label_policy\":{\"id\":\"2141\"},\"ticker\":{\"id\":\"1945\"}},\"id\":\"1893\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2062\"},\"selection_policy\":{\"id\":\"2061\"}},\"id\":\"1242\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1383\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2185\"},\"selection_policy\":{\"id\":\"2184\"}},\"id\":\"1855\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1842\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2114\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1843\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1242\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2183\"},\"selection_policy\":{\"id\":\"2182\"}},\"id\":\"1848\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1354\"},\"glyph\":{\"id\":\"1355\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1357\"},\"nonselection_glyph\":{\"id\":\"1356\"},\"view\":{\"id\":\"1359\"}},\"id\":\"1358\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1845\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1250\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1845\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2154\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1846\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1242\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1891\",\"type\":\"LinearScale\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1868\",\"type\":\"Text\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1257\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"2078\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1857\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1251\",\"type\":\"Scatter\"},{\"attributes\":{\"tools\":[{\"id\":\"1340\"},{\"id\":\"1341\"},{\"id\":\"1342\"},{\"id\":\"1343\"},{\"id\":\"1344\"},{\"id\":\"1345\"},{\"id\":\"1394\"}]},\"id\":\"1347\",\"type\":\"Toolbar\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1974\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1255\",\"type\":\"Slider\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1969\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1256\",\"type\":\"Slider\"},{\"attributes\":{\"source\":{\"id\":\"1354\"}},\"id\":\"1359\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1855\"},\"glyph\":{\"id\":\"1856\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1858\"},\"nonselection_glyph\":{\"id\":\"1857\"},\"view\":{\"id\":\"1860\"}},\"id\":\"1859\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1252\",\"type\":\"Scatter\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2079\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1249\"},\"glyph\":{\"id\":\"1250\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1252\"},\"nonselection_glyph\":{\"id\":\"1251\"},\"view\":{\"id\":\"1254\"}},\"id\":\"1253\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1855\"}},\"id\":\"1860\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1249\"}},\"id\":\"1254\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1370\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2080\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1973\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1258\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2189\"},\"selection_policy\":{\"id\":\"2188\"}},\"id\":\"1867\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1302\"}],\"center\":[{\"id\":\"1305\"},{\"id\":\"1309\"}],\"height\":160,\"left\":[{\"id\":\"1306\"}],\"renderers\":[{\"id\":\"1372\"},{\"id\":\"1378\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"1999\"},\"toolbar\":{\"id\":\"1317\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1298\"},\"y_range\":{\"id\":\"1296\"},\"y_scale\":{\"id\":\"1300\"}},\"id\":\"1294\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1864\",\"type\":\"Text\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1259\",\"type\":\"Div\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1873\"},\"glyph\":{\"id\":\"1874\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1876\"},\"nonselection_glyph\":{\"id\":\"1875\"},\"view\":{\"id\":\"1878\"}},\"id\":\"1877\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1368\"},\"glyph\":{\"id\":\"1369\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1371\"},\"nonselection_glyph\":{\"id\":\"1370\"},\"view\":{\"id\":\"1373\"}},\"id\":\"1372\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2081\",\"type\":\"AllLabels\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1261\",\"type\":\"Div\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1371\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1861\"},\"glyph\":{\"id\":\"1862\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1864\"},\"nonselection_glyph\":{\"id\":\"1863\"},\"view\":{\"id\":\"1866\"}},\"id\":\"1865\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2116\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1365\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1861\"}},\"id\":\"1866\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1268\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1867\"}},\"id\":\"1872\",\"type\":\"CDSView\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1972\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1260\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1869\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2117\",\"type\":\"AllLabels\"},{\"attributes\":{\"below\":[{\"id\":\"1272\"}],\"center\":[{\"id\":\"1275\"},{\"id\":\"1279\"}],\"height\":160,\"left\":[{\"id\":\"1276\"}],\"renderers\":[{\"id\":\"1358\"},{\"id\":\"1364\"},{\"id\":\"1400\"}],\"title\":{\"id\":\"1263\"},\"toolbar\":{\"id\":\"1287\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1268\"},\"y_range\":{\"id\":\"1266\"},\"y_scale\":{\"id\":\"1270\"}},\"id\":\"1262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"margin\":[0,5,0,5],\"text\":\"\\n <p style='font-size:12px'>\\n E<sub>wood</sub> = 8 GPa; E<sub>concrete</sub> = 26 GPa<br>\\n E<sub>steel</sub> = 200 GPa; E<sub>ceramic</sub> = 300 GPa</p>\\n \"},\"id\":\"1880\",\"type\":\"Div\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1332\"}],\"center\":[{\"id\":\"1335\"},{\"id\":\"1339\"}],\"height\":200,\"left\":[{\"id\":\"1336\"}],\"renderers\":[{\"id\":\"1386\"},{\"id\":\"1392\"},{\"id\":\"1412\"}],\"title\":{\"id\":\"2001\"},\"toolbar\":{\"id\":\"1347\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1328\"},\"y_range\":{\"id\":\"1326\"},\"y_scale\":{\"id\":\"1330\"}},\"id\":\"1324\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1361\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1363\"},\"nonselection_glyph\":{\"id\":\"1362\"},\"view\":{\"id\":\"1365\"}},\"id\":\"1364\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2118\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1875\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1266\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1358\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1366\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1867\"},\"glyph\":{\"id\":\"1868\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1870\"},\"nonselection_glyph\":{\"id\":\"1869\"},\"view\":{\"id\":\"1872\"}},\"id\":\"1871\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1272\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1275\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1375\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1377\"},\"nonselection_glyph\":{\"id\":\"1376\"},\"view\":{\"id\":\"1379\"}},\"id\":\"1378\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1873\"}},\"id\":\"1878\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1263\",\"type\":\"Title\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-12.0,-11.76,-11.52,-11.28,-11.04,-10.8,-10.56,-10.32,-10.08,-9.84,-9.6,-9.36,-9.120000000000001,-8.879999999999999,-8.64,-8.4,-8.16,-7.92,-7.68,-7.44,-7.2,-6.96,-6.720000000000001,-6.48,-6.24,-6.0,-5.76,-5.5200000000000005,-5.28,-5.04,-4.800000000000001,-4.5600000000000005,-4.32,-4.08,-3.84,-3.5999999999999996,-3.3599999999999994,-3.120000000000001,-2.880000000000001,-2.6400000000000006,-2.4000000000000004,-2.16,-1.92,-1.6799999999999997,-1.4400000000000013,-1.200000000000001,-0.9600000000000009,-0.7200000000000006,-0.4800000000000004,-0.2400000000000002,0.0,0.2400000000000002,0.4800000000000004,0.7199999999999989,0.9599999999999991,1.1999999999999993,1.4399999999999995,1.6799999999999997,1.92,2.16,2.3999999999999986,2.639999999999999,2.879999999999999,3.119999999999999,3.3599999999999994,3.5999999999999996,3.84,4.079999999999998,4.32,4.559999999999999,4.800000000000001,5.039999999999999,5.280000000000001,5.52,5.759999999999998,6.0,6.239999999999998,6.48,6.719999999999999,6.960000000000001,7.199999999999999,7.439999999999998,7.68,7.919999999999998,8.16,8.399999999999999,8.64,8.879999999999999,9.119999999999997,9.36,9.599999999999998,9.84,10.079999999999998,10.32,10.559999999999999,10.8,11.04,11.279999999999998,11.52,11.759999999999998,12.0,0]},\"selected\":{\"id\":\"2103\"},\"selection_policy\":{\"id\":\"2102\"}},\"id\":\"1368\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2177\"},\"selection_policy\":{\"id\":\"2176\"}},\"id\":\"2082\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1270\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2119\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1874\",\"type\":\"Text\"},{\"attributes\":{\"end\":1000,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1975\"}]},\"margin\":[0,5,0,5],\"start\":16,\"title\":\"Change the yield strength [MPa]\",\"value\":355},\"id\":\"1881\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1281\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1372\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1380\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2027\"},\"group\":null,\"major_label_policy\":{\"id\":\"2028\"},\"ticker\":{\"id\":\"1273\"},\"visible\":false},\"id\":\"1272\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1368\"}},\"id\":\"1373\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1886\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2179\"},\"selection_policy\":{\"id\":\"2178\"}},\"id\":\"2083\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1893\"}],\"center\":[{\"id\":\"1896\"},{\"id\":\"1900\"}],\"height\":200,\"left\":[{\"id\":\"1897\"}],\"renderers\":[{\"id\":\"1925\"},{\"id\":\"1931\"},{\"id\":\"1937\"},{\"id\":\"1943\"}],\"title\":{\"id\":\"1884\"},\"toolbar\":{\"id\":\"1908\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1886\"},\"x_scale\":{\"id\":\"1889\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1891\"}},\"id\":\"1883\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1273\",\"type\":\"BasicTicker\"},{\"attributes\":{\"margin\":[0,5,0,5],\"text\":\"\\n <p style='font-size:12px'>\\n f<sub>y,wood</sub> = 16 MPa; f<sub>y,concrete</sub> = 25 MPa<br>\\n f<sub>y,steel</sub> = 355 MPa; f<sub>y,glass</sub> = 1000 MPa</p>\\n \"},\"id\":\"1882\",\"type\":\"Div\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1379\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2024\"},\"group\":null,\"major_label_policy\":{\"id\":\"2025\"},\"ticker\":{\"id\":\"1277\"}},\"id\":\"1276\",\"type\":\"LinearAxis\"},{\"attributes\":{\"end\":300000.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1976\"}]},\"margin\":[5,5,0,5],\"start\":8000.0,\"step\":1000.0,\"title\":\"Change the elastic modulus [MPa]\",\"value\":200000.0},\"id\":\"1879\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1276\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1279\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1376\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1377\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1889\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1934\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1936\"},\"nonselection_glyph\":{\"id\":\"1935\"},\"view\":{\"id\":\"1938\"}},\"id\":\"1937\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1382\"},\"glyph\":{\"id\":\"1383\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1385\"},\"nonselection_glyph\":{\"id\":\"1384\"},\"view\":{\"id\":\"1387\"}},\"id\":\"1386\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1286\"}},\"id\":\"1282\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"PanTool\"}],\"root_ids\":[\"1995\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
+ " const render_items = [{\"docid\":\"c3f311ba-a0da-40e7-945f-9d5df57dacdd\",\"root_ids\":[\"1995\"],\"roots\":{\"1995\":\"b4d05515-c356-42ea-b8bb-80d4c028fd3a\"}}];\n",
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
+ "\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " let attempts = 0;\n",
+ " const timer = setInterval(function(root) {\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " clearInterval(timer);\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " attempts++;\n",
+ " if (attempts > 100) {\n",
+ " clearInterval(timer);\n",
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
+ " }\n",
+ " }\n",
+ " }, 10, root)\n",
+ " }\n",
+ "})(window);"
+ ],
+ "application/vnd.bokehjs_exec.v0+json": ""
+ },
+ "metadata": {
+ "application/vnd.bokehjs_exec.v0+json": {
+ "id": "1995"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hidden_code_nb_plastic.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, E_steel, fy, fy_steel, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Legend**\n",
+ "\n",
+ "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
+ "\n",
+ "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
+ "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
+ "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
+ "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
+ "* **Slider of the elastic modulus E:** move the slider to change the elastic modulus of the section.\n",
+ "* **Slider of the yield strength $f_y$:** move the slider to change the yield strength of the section.\n",
+ "* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
+ "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
+ "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
+ "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
+ "* **Button of the force P:** apply or remove the external force P.\n",
+ "* **Figures \"N V M Diagrams\":** plots that show the axial force N, shear force V and bending moment M diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
+ "* **10 small bottom figures:** plots that show the strains, stresses and right-hand free-body diagram section (with N, V and M). By hovering with the cursor over the desired position, a small window will show the height and the value of the stress or strain.\n",
+ "\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
+ "### Recommendations\n",
+ "\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B or Cmd+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
+ "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Simple Beam DEMOs/08-sb_deflection.ipynb b/Simple Beam DEMOs/08-sb_deflection.ipynb
new file mode 100644
index 0000000..77ff15c
--- /dev/null
+++ b/Simple Beam DEMOs/08-sb_deflection.ipynb
@@ -0,0 +1,575 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# **Simple beam - Deflection**\n",
+ "In this eigth notebook, the deflection of a simple supported beam is studied. The system, geometry and actions are taken from the previous DEMO \"04-sb_stress\"."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Goals**\n",
+ "\n",
+ "* Explain how the deflection of a simple beam works\n",
+ "* Identify the parameters directly influencing to the rigidity of the system\n",
+ "* Describe the effect of the Young modulus E and it's importance for the design of an element"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Tasks and exercises**\n",
+ "\n",
+ "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
+ "\n",
+ "1. Is it possible for the neutral axis to be located outside of the section?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " Yes, in the graphical tool it's possible to observe that when the bending stress are of the same magnitude of the axial stress (at the extremes with the starting configuration), the neautral axis is outside. This is possible only if an axial load is applied.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "2. Consider the starting configuration but with a square section (200 mm x 200 mm); change the height h and the width b and observe the deflection, axial, bending and shear stresses. How do these geometric parameters influence these values? \n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " First we note down the results with the square section. Secondly we change the width to 100 mm, then to 50 mm, we note the results and we reset the width to 200 mm. Then we change the height to 100 mm, to 400 mm and we note the results. By analysing the trends of the results with the changes of h and b we can conclude that:\n",
+ " <ul>\n",
+ " <li> Deflection: $ v \\propto 1/b \\cdot 1/h^3 $ </li>\n",
+ " <li> Normal stress: $ \\sigma_N \\propto 1/b \\cdot 1/h $ </li>\n",
+ " <li> Bending stress: $ \\sigma_M \\propto 1/b \\cdot 1/h^2 $ </li>\n",
+ " <li> Shear stress: $ \\tau_V \\propto 1/b \\cdot 1/h $ </li>\n",
+ " </ul>\n",
+ " It is clear to see that the height plays an essential role. For this reason, the form is of the I beam is optimal.\n",
+ " </details>\n",
+ "\n",
+ "<br>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Build the interactive visualisation tool**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " <div class=\"bk-root\">\n",
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
+ " </div>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ " const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " \n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
+ " \"<p>\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"</p>\\n\"+\n",
+ " \"<ul>\\n\"+\n",
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
+ " \"</ul>\\n\"+\n",
+ " \"<code>\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"</code>\\n\"+\n",
+ " \"</div>\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"1002\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " \n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ " \n",
+ "\n",
+ " const inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " \n",
+ " \n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " \n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " \n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ " if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ "\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Import the packages needed\n",
+ "import sys\n",
+ "sys.path.append('../HiddenCode')\n",
+ "import hidden_code_nb_deflection\n",
+ "import math\n",
+ "import numpy as np\n",
+ "from cienpy import simplebeam as sb\n",
+ "from cienpy import rectangular_section as beam_section\n",
+ "from cienpy import stress_strain_elastic as stst"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Define the geometry, the external actions, the mechanical property and compute the initial configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Choose the dimensions\n",
+ "L = 6 # [m]\n",
+ "h = 200 # [mm]\n",
+ "b = 100 # [mm]\n",
+ "q = 4; # [kN/m]\n",
+ "P = 10; # [kN]\n",
+ "\n",
+ "# Choose the material parameters\n",
+ "E_steel = 200e3 # [MPa] steel\n",
+ "fy_steel = 355 # [MPa] steel\n",
+ "E = E_steel\n",
+ "fy = fy_steel\n",
+ "\n",
+ "# compute the internal forces (at x=L)\n",
+ "discr_NVM = 101\n",
+ "x_discr = np.linspace(0, L, discr_NVM)\n",
+ "N_discr = sb.compute_N(x_discr, P)\n",
+ "V_discr = sb.compute_V(x_discr, q, L)\n",
+ "M_discr = sb.compute_M(x_discr, q, L)\n",
+ "N = N_discr[-1]\n",
+ "V = V_discr[-1]\n",
+ "M = M_discr[-1]\n",
+ "\n",
+ "# compute the parameters\n",
+ "A = beam_section.compute_area(b, h) # [mm2]\n",
+ "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
+ "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
+ "yG = beam_section.compute_centroid_y(h)\n",
+ "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
+ "\n",
+ "# compute the reactions\n",
+ "Rx = sb.compute_Rx(P)\n",
+ "Ry_l = sb.compute_Ry_l(q, L)\n",
+ "Ry_r = sb.compute_Ry_r(q, L)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the complex code to generate the **interactive visualisation tool**:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " <div class=\"bk-root\" id=\"4e250a96-0fc2-4305-9bd2-13fa7feefc9d\" data-root-id=\"1933\"></div>\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function embed_document(root) {\n",
+ " \n",
+ " const docs_json = {\"1ba41f57-afc1-4c1f-adbd-445e1b83b0a8\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1932\"}]},\"id\":\"1933\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1939\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2096\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1391\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1393\"},\"nonselection_glyph\":{\"id\":\"1392\"},\"view\":{\"id\":\"1395\"}},\"id\":\"1394\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2025\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2097\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1393\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2026\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2099\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2100\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1392\",\"type\":\"Circle\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1695\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2134\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1335\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2135\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2039\"},\"selection_policy\":{\"id\":\"2038\"}},\"id\":\"1348\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1666\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1322\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2066\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2027\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1977\"},\"group\":null,\"major_label_policy\":{\"id\":\"1978\"},\"ticker\":{\"id\":\"1327\"}},\"id\":\"1326\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2028\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2067\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1324\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2068\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1685\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1327\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1326\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1329\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2069\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2142\"},\"selection_policy\":{\"id\":\"2141\"}},\"id\":\"1768\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1974\"},\"group\":null,\"major_label_policy\":{\"id\":\"1975\"},\"ticker\":{\"id\":\"1331\"}},\"id\":\"1330\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2103\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1330\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1333\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1331\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2136\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1349\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2144\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1340\"}},\"id\":\"1336\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2137\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2029\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1338\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2030\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1340\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1348\"}},\"id\":\"1353\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2104\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1351\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1334\"},{\"id\":\"1335\"},{\"id\":\"1336\"},{\"id\":\"1337\"},{\"id\":\"1338\"},{\"id\":\"1339\"},{\"id\":\"1388\"}]},\"id\":\"1341\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1942\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2094\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2145\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1943\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1945\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1387\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1391\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2031\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1946\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1689\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1383\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1385\"},\"nonselection_glyph\":{\"id\":\"1384\"},\"view\":{\"id\":\"1387\"}},\"id\":\"1386\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2032\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2114\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2071\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2115\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2072\",\"type\":\"AllLabels\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1678\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1692\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2074\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1380\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1388\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1424\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2132\"},\"selection_policy\":{\"id\":\"2131\"}},\"id\":\"1746\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2004\"},\"selection_policy\":{\"id\":\"2003\"}},\"id\":\"1947\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2075\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1348\"},\"glyph\":{\"id\":\"1349\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1351\"},\"nonselection_glyph\":{\"id\":\"1350\"},\"view\":{\"id\":\"1353\"}},\"id\":\"1352\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2006\"},\"selection_policy\":{\"id\":\"2005\"}},\"id\":\"1948\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1743\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1350\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1542\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1688\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1488\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1546\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2141\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"width\":200},\"id\":\"1926\",\"type\":\"Spacer\"},{\"attributes\":{\"width\":200},\"id\":\"1927\",\"type\":\"Spacer\"},{\"attributes\":{\"below\":[{\"id\":\"1612\"}],\"center\":[{\"id\":\"1615\"},{\"id\":\"1619\"}],\"height\":200,\"renderers\":[{\"id\":\"1718\"},{\"id\":\"1724\"},{\"id\":\"1730\"}],\"right\":[{\"id\":\"1616\"}],\"title\":{\"id\":\"1603\"},\"toolbar\":{\"id\":\"1627\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1605\"},\"x_scale\":{\"id\":\"1608\"},\"y_range\":{\"id\":\"1542\"},\"y_scale\":{\"id\":\"1610\"}},\"id\":\"1602\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1540\",\"type\":\"DataRange1d\"},{\"attributes\":{\"children\":[{\"id\":\"1811\"},{\"id\":\"1925\"},{\"id\":\"1537\"},{\"id\":\"1926\"},{\"id\":\"1927\"},{\"id\":\"1602\"}]},\"id\":\"1928\",\"type\":\"Row\"},{\"attributes\":{\"below\":[{\"id\":\"1580\"}],\"center\":[{\"id\":\"1583\"},{\"id\":\"1587\"}],\"height\":200,\"renderers\":[{\"id\":\"1698\"},{\"id\":\"1704\"},{\"id\":\"1710\"}],\"right\":[{\"id\":\"1584\"}],\"title\":{\"id\":\"1571\"},\"toolbar\":{\"id\":\"1595\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1573\"},\"x_scale\":{\"id\":\"1576\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1578\"}},\"id\":\"1570\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1549\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1538\",\"type\":\"Title\"},{\"attributes\":{\"children\":[{\"id\":\"1778\"},{\"id\":\"1441\"},{\"id\":\"1408\"},{\"id\":\"1505\"},{\"id\":\"1473\"},{\"id\":\"1570\"}]},\"id\":\"1924\",\"type\":\"Row\"},{\"attributes\":{\"axis\":{\"id\":\"1548\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1551\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1998\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1544\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1686\"}},\"id\":\"1691\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2093\"},\"group\":null,\"major_label_policy\":{\"id\":\"2094\"},\"ticker\":{\"id\":\"1549\"}},\"id\":\"1548\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1999\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1460\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1557\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"children\":[{\"id\":\"1923\"},{\"id\":\"1930\"}]},\"id\":\"1931\",\"type\":\"Column\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2090\"},\"group\":null,\"major_label_policy\":{\"id\":\"2091\"},\"ticker\":{\"id\":\"1553\"},\"visible\":false},\"id\":\"1552\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1056\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1059\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1552\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1555\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1553\",\"type\":\"BasicTicker\"},{\"attributes\":{\"children\":[{\"id\":\"1931\"}]},\"id\":\"1932\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1561\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1556\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1738\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1754\",\"type\":\"HoverTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1562\"}},\"id\":\"1558\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1559\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis\":{\"id\":\"1451\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1454\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1560\",\"type\":\"ResetTool\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1752\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1447\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2000\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1562\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1641\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1643\"},\"nonselection_glyph\":{\"id\":\"1642\"},\"view\":{\"id\":\"1645\"}},\"id\":\"1644\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2001\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2150\"},\"selection_policy\":{\"id\":\"2149\"}},\"id\":\"1694\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1515\"}],\"center\":[{\"id\":\"1518\"},{\"id\":\"1522\"}],\"height\":200,\"left\":[{\"id\":\"1519\"}],\"renderers\":[{\"id\":\"1760\"},{\"id\":\"1766\"},{\"id\":\"1772\"}],\"title\":{\"id\":\"1506\"},\"toolbar\":{\"id\":\"1530\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1508\"},\"x_scale\":{\"id\":\"1511\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1513\"}},\"id\":\"1505\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1442\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1449\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2044\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2057\"},\"group\":null,\"major_label_policy\":{\"id\":\"2058\"},\"ticker\":{\"id\":\"1752\"}},\"id\":\"1451\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1697\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2045\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2055\"},\"group\":null,\"major_label_policy\":{\"id\":\"2056\"},\"ticker\":{\"id\":\"1456\"},\"visible\":false},\"id\":\"1455\",\"type\":\"LinearAxis\"},{\"attributes\":{\"tools\":[{\"id\":\"1588\"},{\"id\":\"1589\"},{\"id\":\"1590\"},{\"id\":\"1591\"},{\"id\":\"1592\"},{\"id\":\"1593\"},{\"id\":\"1712\"}]},\"id\":\"1595\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1455\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1458\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1433\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1456\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1702\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1594\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1459\"},{\"id\":\"1460\"},{\"id\":\"1461\"},{\"id\":\"1462\"},{\"id\":\"1463\"},{\"id\":\"1464\"},{\"id\":\"1754\"}]},\"id\":\"1466\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1592\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1459\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1465\"}},\"id\":\"1461\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1694\"}},\"id\":\"1699\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1463\",\"type\":\"ResetTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1594\"}},\"id\":\"1590\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1696\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1465\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1476\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1576\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1479\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1573\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1481\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"1556\"},{\"id\":\"1557\"},{\"id\":\"1558\"},{\"id\":\"1559\"},{\"id\":\"1560\"},{\"id\":\"1561\"},{\"id\":\"1692\"}]},\"id\":\"1563\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1701\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1487\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1490\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2105\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1571\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1578\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1491\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1484\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2071\"},\"group\":null,\"major_label_policy\":{\"id\":\"2072\"},\"ticker\":{\"id\":\"1488\"},\"visible\":false},\"id\":\"1487\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1593\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1591\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis\":{\"id\":\"1483\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1486\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1474\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2106\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1674\"}},\"id\":\"1679\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1937\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1676\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1677\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2140\"},\"selection_policy\":{\"id\":\"2139\"}},\"id\":\"1756\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2152\"},\"selection_policy\":{\"id\":\"2151\"}},\"id\":\"1706\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2142\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2074\"},\"group\":null,\"major_label_policy\":{\"id\":\"2075\"},\"ticker\":{\"id\":\"1484\"}},\"id\":\"1483\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2003\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1759\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2004\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1497\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1764\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1993\"},\"selection_policy\":{\"id\":\"1992\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1065\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1968\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1969\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1705\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1971\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1972\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1707\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2022\"},\"selection_policy\":{\"id\":\"2021\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"interval\":50},\"id\":\"1080\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"source\":{\"id\":\"1768\"}},\"id\":\"1773\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1589\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2017\"},\"group\":null,\"major_label_policy\":{\"id\":\"2018\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1052\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2034\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1066\"}},\"id\":\"1062\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1052\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1055\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2015\"},\"group\":null,\"major_label_policy\":{\"id\":\"2016\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1056\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1698\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1712\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Rect\"},{\"attributes\":{\"line_color\":\"gray\",\"line_width\":1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1588\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1706\"}},\"id\":\"1711\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1066\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1119\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1708\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2048\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1585\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1974\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1975\",\"type\":\"AllLabels\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2107\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1977\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2159\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1978\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2167\"},\"selection_policy\":{\"id\":\"2166\"}},\"id\":\"1714\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1642\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2117\"},\"selection_policy\":{\"id\":\"2116\"}},\"id\":\"1862\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1119\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2020\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1120\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2108\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1084\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1086\"},\"nonselection_glyph\":{\"id\":\"1085\"},\"view\":{\"id\":\"1088\"}},\"id\":\"1087\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2160\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"},{\"id\":\"1065\"}]},\"id\":\"1067\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1770\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1088\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1613\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2051\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1092\",\"type\":\"Patch\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1086\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2161\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1089\"},\"glyph\":{\"id\":\"1090\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1092\"},\"nonselection_glyph\":{\"id\":\"1091\"},\"view\":{\"id\":\"1094\"}},\"id\":\"1093\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-16.88749537379655,-16.88749537379655]},\"selected\":{\"id\":\"2024\"},\"selection_policy\":{\"id\":\"2023\"}},\"id\":\"1089\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1990\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2122\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1991\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1714\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2166\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2162\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2167\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2146\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2147\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1992\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2116\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1993\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1621\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1790\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2169\"},\"selection_policy\":{\"id\":\"2168\"}},\"id\":\"1726\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2117\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1994\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2168\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1760\"}],\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1776\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1995\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2169\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1996\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2149\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1997\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1617\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2150\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2129\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1802\",\"type\":\"HelpTool\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1718\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1732\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1625\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2123\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1620\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2130\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1626\"}},\"id\":\"1622\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1161\"}},\"id\":\"1166\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1864\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1856\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2053\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1857\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1865\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1866\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":40.0},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1862\"}},\"id\":\"1868\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2119\"},\"selection_policy\":{\"id\":\"2118\"}},\"id\":\"1869\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1161\"},\"glyph\":{\"id\":\"1162\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1164\"},\"nonselection_glyph\":{\"id\":\"1163\"},\"view\":{\"id\":\"1166\"}},\"id\":\"1165\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1869\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2111\"},\"selection_policy\":{\"id\":\"2110\"}},\"id\":\"2019\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[60.0]},\"selected\":{\"id\":\"2028\"},\"selection_policy\":{\"id\":\"2027\"}},\"id\":\"1167\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2121\"},\"selection_policy\":{\"id\":\"2120\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1524\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2160\"},\"selection_policy\":{\"id\":\"2159\"}},\"id\":\"2088\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1624\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1167\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":40.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2113\"},\"selection_policy\":{\"id\":\"2112\"}},\"id\":\"2020\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1814\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1869\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":40.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Rect\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2137\"},\"selection_policy\":{\"id\":\"2136\"}},\"id\":\"1646\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2126\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1167\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1803\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[40.0]},\"selected\":{\"id\":\"2030\"},\"selection_policy\":{\"id\":\"2029\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2127\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1816\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2123\"},\"selection_policy\":{\"id\":\"2122\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1818\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2055\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1960\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2086\"},\"group\":null,\"major_label_policy\":{\"id\":\"2087\"},\"ticker\":{\"id\":\"1823\"},\"visible\":false},\"id\":\"1822\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2083\"},\"group\":null,\"major_label_policy\":{\"id\":\"2084\"},\"ticker\":{\"id\":\"1827\"},\"visible\":false},\"id\":\"1826\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2056\",\"type\":\"AllLabels\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1626\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1831\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{\"axis\":{\"id\":\"1822\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1825\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1812\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2057\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[20.0]},\"selected\":{\"id\":\"2032\"},\"selection_policy\":{\"id\":\"2031\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"2157\"},\"selection_policy\":{\"id\":\"2156\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1826\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1829\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2058\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1823\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"LinearScale\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"margin\":[0,5,0,5],\"text\":\"\\n <p style='font-size:12px'>\\n E<sub>wood</sub> = 8 GPa; E<sub>concrete</sub> = 26 GPa<br>\\n E<sub>steel</sub> = 200 GPa; E<sub>ceramic</sub> = 300 GPa</p>\\n \"},\"id\":\"1908\",\"type\":\"Div\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1844\"},\"glyph\":{\"id\":\"1845\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1847\"},\"nonselection_glyph\":{\"id\":\"1846\"},\"view\":{\"id\":\"1849\"}},\"id\":\"1848\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1827\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1893\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1637\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1896\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2110\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAC4HoXrUbiuP7gehetRuL4/CtejcD0Kxz+4HoXrUbjOPzMzMzMzM9M/CtejcD0K1z/hehSuR+HaP7gehetRuN4/SOF6FK5H4T8zMzMzMzPjPx6F61G4HuU/CtejcD0K5z/2KFyPwvXoP+F6FK5H4eo/zMzMzMzM7D+4HoXrUbjuP1K4HoXrUfA/SOF6FK5H8T89CtejcD3yPzMzMzMzM/M/KVyPwvUo9D8ehetRuB71PxSuR+F6FPY/CtejcD0K9z8AAAAAAAD4P/YoXI/C9fg/61G4HoXr+T/hehSuR+H6P9ejcD0K1/s/zMzMzMzM/D/C9Shcj8L9P7gehetRuP4/rkfhehSu/z9SuB6F61EAQM3MzMzMzABASOF6FK5HAUDC9Shcj8IBQD0K16NwPQJAuB6F61G4AkAzMzMzMzMDQK5H4XoUrgNAKVyPwvUoBECkcD0K16MEQB6F61G4HgVAmZmZmZmZBUAUrkfhehQGQI/C9ShcjwZACtejcD0KB0CF61G4HoUHQAAAAAAAAAhAexSuR+F6CED2KFyPwvUIQHA9CtejcAlA61G4HoXrCUBmZmZmZmYKQOF6FK5H4QpAXI/C9ShcC0DXo3A9CtcLQFK4HoXrUQxAzMzMzMzMDEBH4XoUrkcNQML1KFyPwg1APQrXo3A9DkC4HoXrUbgOQDMzMzMzMw9ArkfhehSuD0AUrkfhehQQQFK4HoXrURBAj8L1KFyPEEDNzMzMzMwQQArXo3A9ChFASOF6FK5HEUCF61G4HoURQML1KFyPwhFAAAAAAAAAEkA9CtejcD0SQHsUrkfhehJAuB6F61G4EkD2KFyPwvUSQDMzMzMzMxNAcD0K16NwE0CuR+F6FK4TQOtRuB6F6xNAKVyPwvUoFEBmZmZmZmYUQKRwPQrXoxRA4XoUrkfhFEAehetRuB4VQFyPwvUoXBVAmZmZmZmZFUDXo3A9CtcVQBSuR+F6FBZAUrgehetRFkCPwvUoXI8WQM3MzMzMzBZACtejcD0KF0BH4XoUrkcXQIXrUbgehRdAwvUoXI/CF0AAAAAAAAAYQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[101]},\"y\":{\"__ndarray__\":\"AAAAAAAAAICJ7WUQXLvEvzHpOzQ2uNS/La/BmoEM378AN5DQxKvkvyTMtP0ry+m/A/cxVgPj7r8l32IB8Pjxv6tnxKkve/S/Gj/3X5P39r/MYmLzcW35v3UjGkcm3Pu/IiXgUQ9D/r+arxEPyFAAwDIOAOWHewHAYf2fw3yhAsDc9axNXsIDwAIauS/m3QTA3TUtINDzBcAlv0jf2QMHwD3VITfDDQjAMEGl+00RCcC9dZYKPg4KwEOPj0tZBAvA11MBsGfzC8AzMzMzM9sMwMFGQ9qHuw3Ak1EmtDOUDsBowKfZBmUPwNXUtLbpFhDAumbyzTZ3EMDCSrTNVdMQwKSKDdYyKxHA7YT8C7t+EcAB7WqZ3M0RwBTLLa2GGBLAOHwFe6leEsBPsp07NqASwBR0jSwf3RLAFB1XkFcVE8C4XWiu00gTwDg7GtOIdxPAow+xT22hE8DniVx6eMYTwLmtN66i5hPAr9NIS+UBFMAwqYG2OhgUwHkwv1meKRTAocDJoww2FMCOBVUIgz0UwP//////PxTAjQVVCIM9FMChwMmjDDYUwHowv1meKRTAMKmBtjoYFMCv00hL5QEUwLmtN66i5hPA54lcenjGE8CkD7FPbaETwDY7GtOIdxPAt11ortNIE8AWHVeQVxUTwBV0jSwf3RLAT7KdOzagEsA2fAV7qV4SwBXLLa2GGBLAAu1qmdzNEcDvhPwLu34RwKaKDdYyKxHAw0q0zVXTEMC6ZvLNNncQwNjUtLbpFhDAaMCn2QZlD8CPUSa0M5QOwMRGQ9qHuw3ANDMzMzPbDMDVUwGwZ/MLwEmPj0tZBAvAwXWWCj4OCsA0QaX7TREJwDjVITfDDQjAJr9I39kDB8DgNS0g0PMFwAMauS/m3QTA2fWsTV7CA8Bd/Z/DfKECwDIOAOWHewHAoK8RD8hQAMA5JeBRD0P+v38jGkcm3Pu/1mJi83Ft+b8dP/dfk/f2v7xnxKkve/S/Ld9iAfD48b8D9zFWA+PuvzDMtP0ry+m/BDeQ0MSr5L+Vr8GagQzfv17pOzQ2uNS/7O1lEFy7xL8AAAAAAAAAgA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[101]}},\"selected\":{\"id\":\"2034\"},\"selection_policy\":{\"id\":\"2033\"}},\"id\":\"1893\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1835\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1894\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1830\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1897\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Deflection\",\"@y mm\"]]},\"id\":\"1899\",\"type\":\"HoverTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1836\"}},\"id\":\"1832\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2111\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1924\"},{\"id\":\"1928\"}]},\"id\":\"1929\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1834\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis\":{\"id\":\"1519\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1522\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1893\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1584\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1587\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2090\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1895\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2112\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2119\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1836\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1902\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2091\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1903\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2113\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2093\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1902\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1904\"},\"nonselection_glyph\":{\"id\":\"1903\"},\"view\":{\"id\":\"1906\"}},\"id\":\"1905\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":300000.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1915\"}]},\"margin\":[5,5,0,5],\"start\":8000.0,\"step\":1000.0,\"title\":\"Change the elastic modulus [MPa]\",\"value\":200000.0},\"id\":\"1907\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"2041\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1200\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1906\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2021\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1904\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1520\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1200\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2022\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2042\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1995\"},\"selection_policy\":{\"id\":\"1994\"}},\"id\":\"1200\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1856\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1859\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1658\"},\"N_stress_diag\":{\"id\":\"1638\"},\"V_stress_diag\":{\"id\":\"1678\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1710\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_deflection_beam(db, beam_defl)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=101) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1910\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2131\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1221\",\"type\":\"VeeHead\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1658\"},\"N_stress_diag\":{\"id\":\"1638\"},\"V_stress_diag\":{\"id\":\"1678\"},\"arr_head\":{\"id\":\"1247\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"neutral_axis\":{\"id\":\"1710\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \"},\"id\":\"1909\",\"type\":\"CustomJS\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1968\"},\"group\":null,\"major_label_policy\":{\"id\":\"1969\"},\"ticker\":{\"id\":\"1301\"}},\"id\":\"1300\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1859\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2088\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1860\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2132\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1218\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1947\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1219\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1658\"},\"N_stress_diag\":{\"id\":\"1638\"},\"V_stress_diag\":{\"id\":\"1678\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1710\"},\"s_b\":{\"id\":\"1003\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_deflection_beam(db, beam_defl)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=101) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1911\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1218\",\"type\":\"VeeHead\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1352\"},\"N_stress_diag\":{\"id\":\"1638\"},\"arr_head\":{\"id\":\"1247\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"neutral_axis\":{\"id\":\"1710\"},\"s_M\":{\"id\":\"1236\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=101) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1912\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1247\"},\"div_P\":{\"id\":\"1253\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1913\",\"type\":\"CustomJS\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1658\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1672\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1951\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2060\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1528\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1221\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1948\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1222\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1380\"},\"M_stress_diag\":{\"id\":\"1658\"},\"V_diag\":{\"id\":\"1366\"},\"V_stress_diag\":{\"id\":\"1678\"},\"arr_head\":{\"id\":\"1247\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"neutral_axis\":{\"id\":\"1710\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1698\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1718\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_deflection_beam(db, beam_defl)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=101) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 101)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=101) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1914\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1952\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2023\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2163\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1949\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1658\"},\"N_stress_diag\":{\"id\":\"1638\"},\"axial_strain_diag\":{\"id\":\"1738\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1760\"},\"centroid\":{\"id\":\"1670\"},\"source\":{\"id\":\"1007\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const E = cb_obj.value\\n\\n // update E\\n db['E'][0] = E\\n\\n // update\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_deflection_beam(db, beam_defl)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=201) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=101) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1915\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2061\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1847\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1950\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{\"width\":10},\"id\":\"1916\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2024\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1301\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1845\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2063\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1238\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1523\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1243\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"1041\"},{\"id\":\"1916\"},{\"id\":\"1918\"}]},\"id\":\"1919\",\"type\":\"Row\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"1999\"},\"selection_policy\":{\"id\":\"1998\"}},\"id\":\"1236\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2115\"},\"selection_policy\":{\"id\":\"2114\"}},\"id\":\"1844\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"1920\"},{\"id\":\"1922\"}]},\"id\":\"1923\",\"type\":\"Row\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2064\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1236\"},\"glyph\":{\"id\":\"1238\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1240\"},\"nonselection_glyph\":{\"id\":\"1239\"},\"view\":{\"id\":\"1242\"}},\"id\":\"1241\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"height\":30},\"id\":\"1917\",\"type\":\"Spacer\"},{\"attributes\":{\"overlay\":{\"id\":\"1529\"}},\"id\":\"1525\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"children\":[{\"id\":\"1917\"},{\"id\":\"1108\"},{\"id\":\"1109\"},{\"id\":\"1250\"},{\"id\":\"1249\"},{\"id\":\"1907\"},{\"id\":\"1908\"},{\"id\":\"1251\"},{\"id\":\"1252\"},{\"id\":\"1253\"},{\"id\":\"1254\"}]},\"id\":\"1918\",\"type\":\"Column\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1239\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1830\"},{\"id\":\"1831\"},{\"id\":\"1832\"},{\"id\":\"1833\"},{\"id\":\"1834\"},{\"id\":\"1835\"}]},\"id\":\"1837\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"1844\"}},\"id\":\"1849\",\"type\":\"CDSView\"},{\"attributes\":{\"width\":200},\"id\":\"1925\",\"type\":\"Spacer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1240\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2001\"},\"selection_policy\":{\"id\":\"2000\"}},\"id\":\"1243\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1846\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1236\"}},\"id\":\"1242\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"1921\"},{\"id\":\"1256\"},{\"id\":\"1288\"},{\"id\":\"1318\"}]},\"id\":\"1922\",\"type\":\"Column\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2164\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1128\"},{\"id\":\"1919\"}]},\"id\":\"1920\",\"type\":\"Column\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{\"height\":10},\"id\":\"1921\",\"type\":\"Spacer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2155\"},\"selection_policy\":{\"id\":\"2154\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1527\",\"type\":\"ResetTool\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1909\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1250\",\"type\":\"Slider\"},{\"attributes\":{\"source\":{\"id\":\"1243\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1251\",\"type\":\"Div\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1914\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1249\",\"type\":\"Slider\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1913\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1252\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1296\"}],\"center\":[{\"id\":\"1299\"},{\"id\":\"1303\"}],\"height\":160,\"left\":[{\"id\":\"1300\"}],\"renderers\":[{\"id\":\"1366\"},{\"id\":\"1372\"},{\"id\":\"1400\"}],\"title\":{\"id\":\"1937\"},\"toolbar\":{\"id\":\"1311\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1292\"},\"y_range\":{\"id\":\"1290\"},\"y_scale\":{\"id\":\"1294\"}},\"id\":\"1288\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1253\",\"type\":\"Div\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1255\",\"type\":\"Div\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2162\"},\"selection_policy\":{\"id\":\"2161\"}},\"id\":\"1674\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1262\",\"type\":\"LinearScale\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1912\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1254\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1266\"}],\"center\":[{\"id\":\"1269\"},{\"id\":\"1273\"}],\"height\":160,\"left\":[{\"id\":\"1270\"}],\"renderers\":[{\"id\":\"1352\"},{\"id\":\"1358\"},{\"id\":\"1394\"}],\"title\":{\"id\":\"1257\"},\"toolbar\":{\"id\":\"1281\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1262\"},\"y_range\":{\"id\":\"1260\"},\"y_scale\":{\"id\":\"1264\"}},\"id\":\"1256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"below\":[{\"id\":\"1326\"}],\"center\":[{\"id\":\"1329\"},{\"id\":\"1333\"}],\"height\":200,\"left\":[{\"id\":\"1330\"}],\"renderers\":[{\"id\":\"1380\"},{\"id\":\"1386\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"1939\"},\"toolbar\":{\"id\":\"1341\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1322\"},\"y_range\":{\"id\":\"1320\"},\"y_scale\":{\"id\":\"1324\"}},\"id\":\"1318\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1355\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1357\"},\"nonselection_glyph\":{\"id\":\"1356\"},\"view\":{\"id\":\"1359\"}},\"id\":\"1358\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1260\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1266\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1269\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1257\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1264\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1529\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1275\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1965\"},\"group\":null,\"major_label_policy\":{\"id\":\"1966\"},\"ticker\":{\"id\":\"1267\"},\"visible\":false},\"id\":\"1266\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1267\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1641\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1962\"},\"group\":null,\"major_label_policy\":{\"id\":\"1963\"},\"ticker\":{\"id\":\"1271\"}},\"id\":\"1270\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1270\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1273\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1271\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1274\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1280\"}},\"id\":\"1276\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1278\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1280\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1971\"},\"group\":null,\"major_label_policy\":{\"id\":\"1972\"},\"ticker\":{\"id\":\"1297\"},\"visible\":false},\"id\":\"1296\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1310\"}},\"id\":\"1306\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2120\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1304\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1581\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1634\"}},\"id\":\"1639\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1296\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1299\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1308\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2121\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1290\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1292\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1635\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1496\",\"type\":\"HelpTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1274\"},{\"id\":\"1275\"},{\"id\":\"1276\"},{\"id\":\"1277\"},{\"id\":\"1278\"},{\"id\":\"1279\"},{\"id\":\"1360\"}]},\"id\":\"1281\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1294\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1297\",\"type\":\"BasicTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"1304\"},{\"id\":\"1305\"},{\"id\":\"1306\"},{\"id\":\"1307\"},{\"id\":\"1308\"},{\"id\":\"1309\"},{\"id\":\"1374\"}]},\"id\":\"1311\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1300\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1303\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1320\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1305\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1310\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-9.75]},\"selected\":{\"id\":\"2026\"},\"selection_policy\":{\"id\":\"2025\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1958\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1608\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1089\"}},\"id\":\"1094\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1959\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1362\"},\"glyph\":{\"id\":\"1363\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1365\"},\"nonselection_glyph\":{\"id\":\"1364\"},\"view\":{\"id\":\"1367\"}},\"id\":\"1366\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2033\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1734\"},\"glyph\":{\"id\":\"1735\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1737\"},\"nonselection_glyph\":{\"id\":\"1736\"},\"view\":{\"id\":\"1739\"}},\"id\":\"1738\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2005\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1357\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2104\"},\"selection_policy\":{\"id\":\"2103\"}},\"id\":\"1101\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1365\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAAO0AAAAAAAAA8QAAAAAAAAD1AAAAAAAAAPkAAAAAAAAA/QAAAAAAAAEBAAAAAAACAQEAAAAAAAABBQAAAAAAAgEFAAAAAAAAAQkAAAAAAAIBCQAAAAAAAAENAAAAAAACAQ0AAAAAAAABEQAAAAAAAgERAAAAAAAAARUAAAAAAAIBFQAAAAAAAAEZAAAAAAACARkAAAAAAAABHQAAAAAAAgEdAAAAAAAAASEAAAAAAAIBIQAAAAAAAAElAAAAAAACASUAAAAAAAABKQAAAAAAAgEpAAAAAAAAAS0AAAAAAAIBLQAAAAAAAAExAAAAAAACATEAAAAAAAABNQAAAAAAAgE1AAAAAAAAATkAAAAAAAIBOQAAAAAAAAE9AAAAAAACAT0AAAAAAAABQQAAAAAAAQFBAAAAAAACAUEAAAAAAAMBQQAAAAAAAAFFAAAAAAABAUUAAAAAAAIBRQAAAAAAAwFFAAAAAAAAAUkAAAAAAAEBSQAAAAAAAgFJAAAAAAADAUkAAAAAAAABTQAAAAAAAQFNAAAAAAACAU0AAAAAAAMBTQAAAAAAAAFRAAAAAAABAVEAAAAAAAIBUQAAAAAAAwFRAAAAAAAAAVUAAAAAAAEBVQAAAAAAAgFVAAAAAAADAVUAAAAAAAABWQAAAAAAAQFZAAAAAAACAVkAAAAAAAMBWQAAAAAAAAFdAAAAAAABAV0AAAAAAAIBXQAAAAAAAwFdAAAAAAAAAWEAAAAAAAEBYQAAAAAAAgFhAAAAAAADAWEAAAAAAAABZQAAAAAAAQFlAAAAAAACAWUAAAAAAAMBZQAAAAAAAAFpAAAAAAABAWkAAAAAAAIBaQAAAAAAAwFpAAAAAAAAAW0AAAAAAAEBbQAAAAAAAgFtAAAAAAADAW0AAAAAAAABcQAAAAAAAQFxAAAAAAACAXEAAAAAAAMBcQAAAAAAAAF1AAAAAAABAXUAAAAAAAIBdQAAAAAAAwF1AAAAAAAAAXkAAAAAAAEBeQAAAAAAAgF5AAAAAAADAXkAAAAAAAABfQAAAAAAAQF9AAAAAAACAX0AAAAAAAMBfQAAAAAAAAGBAAAAAAAAgYEAAAAAAAEBgQAAAAAAAYGBAAAAAAACAYEAAAAAAAKBgQAAAAAAAwGBAAAAAAADgYEAAAAAAAABhQAAAAAAAIGFAAAAAAABAYUAAAAAAAGBhQAAAAAAAgGFAAAAAAACgYUAAAAAAAMBhQAAAAAAA4GFAAAAAAAAAYkAAAAAAACBiQAAAAAAAQGJAAAAAAABgYkAAAAAAAIBiQAAAAAAAoGJAAAAAAADAYkAAAAAAAOBiQAAAAAAAAGNAAAAAAAAgY0AAAAAAAEBjQAAAAAAAYGNAAAAAAACAY0AAAAAAAKBjQAAAAAAAwGNAAAAAAADgY0AAAAAAAABkQAAAAAAAIGRAAAAAAABAZEAAAAAAAGBkQAAAAAAAgGRAAAAAAACgZEAAAAAAAMBkQAAAAAAA4GRAAAAAAAAAZUAAAAAAACBlQAAAAAAAQGVAAAAAAABgZUAAAAAAAIBlQAAAAAAAoGVAAAAAAADAZUAAAAAAAOBlQAAAAAAAAGZAAAAAAAAgZkAAAAAAAEBmQAAAAAAAYGZAAAAAAACAZkAAAAAAAKBmQAAAAAAAwGZAAAAAAADgZkAAAAAAAABnQAAAAAAAIGdAAAAAAABAZ0AAAAAAAGBnQAAAAAAAgGdAAAAAAACgZ0AAAAAAAMBnQAAAAAAA4GdAAAAAAAAAaEAAAAAAACBoQAAAAAAAQGhAAAAAAABgaEAAAAAAAIBoQAAAAAAAoGhAAAAAAADAaEAAAAAAAOBoQAAAAAAAAGlA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[201]}},\"selected\":{\"id\":\"2128\"},\"selection_policy\":{\"id\":\"2127\"}},\"id\":\"1734\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2135\"},\"selection_policy\":{\"id\":\"2134\"}},\"id\":\"1634\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1359\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2006\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1737\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2130\"},\"selection_policy\":{\"id\":\"2129\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1742\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1734\"}},\"id\":\"1739\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1656\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1612\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1615\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1103\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1736\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1352\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1360\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1756\"},\"glyph\":{\"id\":\"1757\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1759\"},\"nonselection_glyph\":{\"id\":\"1758\"},\"view\":{\"id\":\"1761\"}},\"id\":\"1760\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1603\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1369\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1371\"},\"nonselection_glyph\":{\"id\":\"1370\"},\"view\":{\"id\":\"1373\"}},\"id\":\"1372\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1634\"},\"glyph\":{\"id\":\"1635\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1637\"},\"nonselection_glyph\":{\"id\":\"1636\"},\"view\":{\"id\":\"1639\"}},\"id\":\"1638\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2007\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2037\"},\"selection_policy\":{\"id\":\"2036\"}},\"id\":\"1960\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-12.0,-11.76,-11.52,-11.28,-11.04,-10.8,-10.56,-10.32,-10.08,-9.84,-9.6,-9.36,-9.120000000000001,-8.879999999999999,-8.64,-8.4,-8.16,-7.92,-7.68,-7.44,-7.2,-6.96,-6.720000000000001,-6.48,-6.24,-6.0,-5.76,-5.5200000000000005,-5.28,-5.04,-4.800000000000001,-4.5600000000000005,-4.32,-4.08,-3.84,-3.5999999999999996,-3.3599999999999994,-3.120000000000001,-2.880000000000001,-2.6400000000000006,-2.4000000000000004,-2.16,-1.92,-1.6799999999999997,-1.4400000000000013,-1.200000000000001,-0.9600000000000009,-0.7200000000000006,-0.4800000000000004,-0.2400000000000002,0.0,0.2400000000000002,0.4800000000000004,0.7199999999999989,0.9599999999999991,1.1999999999999993,1.4399999999999995,1.6799999999999997,1.92,2.16,2.3999999999999986,2.639999999999999,2.879999999999999,3.119999999999999,3.3599999999999994,3.5999999999999996,3.84,4.079999999999998,4.32,4.559999999999999,4.800000000000001,5.039999999999999,5.280000000000001,5.52,5.759999999999998,6.0,6.239999999999998,6.48,6.719999999999999,6.960000000000001,7.199999999999999,7.439999999999998,7.68,7.919999999999998,8.16,8.399999999999999,8.64,8.879999999999999,9.119999999999997,9.36,9.599999999999998,9.84,10.079999999999998,10.32,10.559999999999999,10.8,11.04,11.279999999999998,11.52,11.759999999999998,12.0,0]},\"selected\":{\"id\":\"2042\"},\"selection_policy\":{\"id\":\"2041\"}},\"id\":\"1362\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1104\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2051\"},\"group\":null,\"major_label_policy\":{\"id\":\"2052\"},\"ticker\":{\"id\":\"1790\"},\"visible\":false},\"id\":\"1789\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2077\"},\"group\":null,\"major_label_policy\":{\"id\":\"2078\"},\"ticker\":{\"id\":\"1585\"}},\"id\":\"1584\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1101\"},\"glyph\":{\"id\":\"1102\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1104\"},\"nonselection_glyph\":{\"id\":\"1103\"},\"view\":{\"id\":\"1106\"}},\"id\":\"1105\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1370\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1610\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1362\"}},\"id\":\"1367\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2099\"},\"group\":null,\"major_label_policy\":{\"id\":\"2100\"},\"ticker\":{\"id\":\"1613\"}},\"id\":\"1612\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2008\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"1991\"},\"selection_policy\":{\"id\":\"1990\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1910\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1364\",\"type\":\"Line\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1911\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1109\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1605\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2096\"},\"group\":null,\"major_label_policy\":{\"id\":\"2097\"},\"ticker\":{\"id\":\"1617\"}},\"id\":\"1616\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1110\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2019\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1111\",\"type\":\"Arrow\"},{\"attributes\":{\"axis\":{\"id\":\"1616\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1619\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1745\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1371\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1513\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1666\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"1997\"},\"selection_policy\":{\"id\":\"1996\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2009\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1376\"},\"glyph\":{\"id\":\"1377\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1379\"},\"nonselection_glyph\":{\"id\":\"1378\"},\"view\":{\"id\":\"1381\"}},\"id\":\"1380\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1125\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1749\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1377\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1746\"},\"glyph\":{\"id\":\"1747\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1749\"},\"nonselection_glyph\":{\"id\":\"1748\"},\"view\":{\"id\":\"1751\"}},\"id\":\"1750\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1379\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2010\",\"type\":\"Selection\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1373\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2106\"},\"selection_policy\":{\"id\":\"2105\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1122\"}},\"id\":\"1127\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1122\"},\"glyph\":{\"id\":\"1123\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1125\"},\"nonselection_glyph\":{\"id\":\"1124\"},\"view\":{\"id\":\"1127\"}},\"id\":\"1126\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1511\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1748\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2108\"},\"selection_policy\":{\"id\":\"2107\"}},\"id\":\"1122\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1746\"}},\"id\":\"1751\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1682\",\"type\":\"Line\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1636\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1366\"}],\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1374\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2011\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"1989\"},\"selection_policy\":{\"id\":\"1988\"}},\"id\":\"1161\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1395\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1757\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1139\"}],\"center\":[{\"id\":\"1142\"},{\"id\":\"1146\"},{\"id\":\"1219\"},{\"id\":\"1222\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"}],\"height\":200,\"left\":[{\"id\":\"1143\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1165\"},{\"id\":\"1192\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1241\"},{\"id\":\"1247\"}],\"title\":{\"id\":\"1129\"},\"toolbar\":{\"id\":\"1154\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1131\"},\"x_scale\":{\"id\":\"1135\"},\"y_range\":{\"id\":\"1133\"},\"y_scale\":{\"id\":\"1137\"}},\"id\":\"1128\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"below\":[{\"id\":\"1548\"}],\"center\":[{\"id\":\"1551\"},{\"id\":\"1555\"}],\"height\":200,\"left\":[{\"id\":\"1552\"}],\"renderers\":[{\"id\":\"1678\"},{\"id\":\"1684\"},{\"id\":\"1690\"}],\"title\":{\"id\":\"1538\"},\"toolbar\":{\"id\":\"1563\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1540\"},\"x_scale\":{\"id\":\"1544\"},\"y_range\":{\"id\":\"1542\"},\"y_scale\":{\"id\":\"1546\"}},\"id\":\"1537\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06,0.12,0.18,0.24,0.3,0.36,0.42,0.48,0.54,0.6,0.6599999999999999,0.72,0.78,0.84,0.8999999999999999,0.96,1.02,1.08,1.14,1.2,1.26,1.3199999999999998,1.38,1.44,1.5,1.56,1.6199999999999999,1.68,1.74,1.7999999999999998,1.8599999999999999,1.92,1.98,2.04,2.1,2.16,2.2199999999999998,2.28,2.34,2.4,2.46,2.52,2.58,2.6399999999999997,2.6999999999999997,2.76,2.82,2.88,2.94,3.0,3.06,3.12,3.1799999999999997,3.2399999999999998,3.3,3.36,3.42,3.48,3.54,3.5999999999999996,3.6599999999999997,3.7199999999999998,3.78,3.84,3.9,3.96,4.02,4.08,4.14,4.2,4.26,4.32,4.38,4.4399999999999995,4.5,4.56,4.62,4.68,4.74,4.8,4.859999999999999,4.92,4.9799999999999995,5.04,5.1,5.16,5.22,5.279999999999999,5.34,5.3999999999999995,5.46,5.52,5.58,5.64,5.7,5.76,5.819999999999999,5.88,5.9399999999999995,6.0,6],\"y\":[0,-0.0,-0.7128,-1.4112,-2.0952,-2.7647999999999997,-3.42,-4.0607999999999995,-4.6872,-5.299199999999999,-5.896800000000001,-6.48,-7.048799999999999,-7.6032,-8.1432,-8.6688,-9.179999999999998,-9.6768,-10.1592,-10.6272,-11.0808,-11.52,-11.9448,-12.355199999999998,-12.751199999999999,-13.132800000000001,-13.5,-13.852799999999998,-14.191199999999998,-14.5152,-14.8248,-15.12,-15.4008,-15.6672,-15.919199999999998,-16.1568,-16.38,-16.5888,-16.7832,-16.9632,-17.1288,-17.28,-17.4168,-17.5392,-17.6472,-17.7408,-17.82,-17.8848,-17.9352,-17.9712,-17.9928,-18.0,-17.9928,-17.9712,-17.935200000000002,-17.8848,-17.82,-17.7408,-17.6472,-17.5392,-17.4168,-17.28,-17.128800000000002,-16.9632,-16.7832,-16.5888,-16.38,-16.1568,-15.919200000000002,-15.6672,-15.400800000000002,-15.12,-14.824800000000002,-14.515199999999998,-14.1912,-13.852800000000002,-13.5,-13.132800000000003,-12.751199999999999,-12.355200000000002,-11.944799999999999,-11.520000000000001,-11.080800000000004,-10.6272,-10.159200000000004,-9.6768,-9.180000000000003,-8.6688,-8.143200000000002,-7.6032000000000055,-7.048800000000002,-6.480000000000005,-5.896800000000001,-5.299200000000004,-4.687199999999999,-4.060800000000003,-3.419999999999998,-2.7648000000000024,-2.095200000000007,-1.4112000000000011,-0.7128000000000059,0.0,0]},\"selected\":{\"id\":\"2045\"},\"selection_policy\":{\"id\":\"2044\"}},\"id\":\"1376\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1686\"},\"glyph\":{\"id\":\"1687\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1689\"},\"nonselection_glyph\":{\"id\":\"1688\"},\"view\":{\"id\":\"1691\"}},\"id\":\"1690\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2012\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1451\"}],\"center\":[{\"id\":\"1454\"},{\"id\":\"1458\"}],\"height\":200,\"left\":[{\"id\":\"1455\"}],\"renderers\":[{\"id\":\"1738\"},{\"id\":\"1744\"},{\"id\":\"1750\"}],\"title\":{\"id\":\"1442\"},\"toolbar\":{\"id\":\"1466\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1444\"},\"x_scale\":{\"id\":\"1447\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1449\"}},\"id\":\"1441\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1694\"},\"glyph\":{\"id\":\"1695\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1697\"},\"nonselection_glyph\":{\"id\":\"1696\"},\"view\":{\"id\":\"1699\"}},\"id\":\"1698\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1376\"}},\"id\":\"1381\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1508\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1378\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1701\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1703\"},\"nonselection_glyph\":{\"id\":\"1702\"},\"view\":{\"id\":\"1705\"}},\"id\":\"1704\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1945\"},\"group\":null,\"major_label_policy\":{\"id\":\"1946\"},\"ticker\":{\"id\":\"1140\"},\"visible\":false},\"id\":\"1139\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1506\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1942\"},\"group\":null,\"major_label_policy\":{\"id\":\"1943\"},\"ticker\":{\"id\":\"1144\"},\"visible\":false},\"id\":\"1143\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2013\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1756\"}},\"id\":\"1761\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1515\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1518\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1758\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1383\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1767\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1763\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1139\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1142\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1781\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2014\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1674\"},\"glyph\":{\"id\":\"1675\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1677\"},\"nonselection_glyph\":{\"id\":\"1676\"},\"view\":{\"id\":\"1679\"}},\"id\":\"1678\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1129\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1962\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1143\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1146\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2068\"},\"group\":null,\"major_label_policy\":{\"id\":\"2069\"},\"ticker\":{\"id\":\"1774\"}},\"id\":\"1515\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1646\"}},\"id\":\"1651\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"1789\"}],\"center\":[{\"id\":\"1792\"},{\"id\":\"1796\"},{\"id\":\"1857\"}],\"height\":200,\"left\":[{\"id\":\"1793\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1848\"},{\"id\":\"1867\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"}],\"title\":{\"id\":\"1779\"},\"toolbar\":{\"id\":\"1804\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1781\"},\"x_scale\":{\"id\":\"1785\"},\"y_range\":{\"id\":\"1783\"},\"y_scale\":{\"id\":\"1787\"}},\"id\":\"1778\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1769\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1052\"}],\"center\":[{\"id\":\"1055\"},{\"id\":\"1059\"},{\"id\":\"1111\"},{\"id\":\"1120\"}],\"left\":[{\"id\":\"1056\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1078\"},{\"id\":\"1105\"},{\"id\":\"1117\"},{\"id\":\"1126\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1067\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1048\"},\"y_range\":{\"id\":\"1046\"},\"y_scale\":{\"id\":\"1050\"}},\"id\":\"1041\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1963\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2066\"},\"group\":null,\"major_label_policy\":{\"id\":\"2067\"},\"ticker\":{\"id\":\"1520\"},\"visible\":false},\"id\":\"1519\",\"type\":\"LinearAxis\"},{\"attributes\":{\"end\":90.0,\"start\":-40.0},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1965\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1785\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1783\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1966\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1153\"}},\"id\":\"1149\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2048\"},\"group\":null,\"major_label_policy\":{\"id\":\"2049\"},\"ticker\":{\"id\":\"1794\"},\"visible\":false},\"id\":\"1793\",\"type\":\"LinearAxis\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"},{\"id\":\"1899\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis\":{\"id\":\"1789\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1792\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1419\"}],\"center\":[{\"id\":\"1422\"},{\"id\":\"1426\"}],\"height\":200,\"left\":[{\"id\":\"1423\"}],\"renderers\":[{\"id\":\"1638\"},{\"id\":\"1644\"},{\"id\":\"1650\"}],\"title\":{\"id\":\"1409\"},\"toolbar\":{\"id\":\"1434\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1411\"},\"x_scale\":{\"id\":\"1415\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1417\"}},\"id\":\"1408\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1779\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1798\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1087\"},{\"id\":\"1093\"},{\"id\":\"1099\"},{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1186\"},{\"id\":\"1897\"},{\"id\":\"1905\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2049\",\"type\":\"AllLabels\"},{\"attributes\":{\"below\":[{\"id\":\"1483\"}],\"center\":[{\"id\":\"1486\"},{\"id\":\"1490\"}],\"height\":200,\"left\":[{\"id\":\"1487\"}],\"renderers\":[{\"id\":\"1658\"},{\"id\":\"1664\"},{\"id\":\"1670\"}],\"title\":{\"id\":\"1474\"},\"toolbar\":{\"id\":\"1498\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1476\"},\"x_scale\":{\"id\":\"1479\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1481\"}},\"id\":\"1473\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1793\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1796\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam with deflection under uniform load\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1706\"},\"glyph\":{\"id\":\"1707\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1709\"},\"nonselection_glyph\":{\"id\":\"1708\"},\"view\":{\"id\":\"1711\"}},\"id\":\"1710\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1153\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1822\"}],\"center\":[{\"id\":\"1825\"},{\"id\":\"1829\"},{\"id\":\"1860\"}],\"height\":200,\"left\":[{\"id\":\"1826\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1812\"},\"toolbar\":{\"id\":\"1837\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1814\"},\"x_scale\":{\"id\":\"1818\"},\"y_range\":{\"id\":\"1816\"},\"y_scale\":{\"id\":\"1820\"}},\"id\":\"1811\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1409\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2036\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1768\"},\"glyph\":{\"id\":\"1769\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1771\"},\"nonselection_glyph\":{\"id\":\"1770\"},\"view\":{\"id\":\"1773\"}},\"id\":\"1772\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2037\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1794\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Patch\"},{\"attributes\":{\"axis\":{\"id\":\"1419\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1422\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2052\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1714\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2038\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2063\"},\"group\":null,\"major_label_policy\":{\"id\":\"2064\"},\"ticker\":{\"id\":\"1420\"}},\"id\":\"1419\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1444\",\"type\":\"DataRange1d\"},{\"attributes\":{\"tools\":[{\"id\":\"1620\"},{\"id\":\"1621\"},{\"id\":\"1622\"},{\"id\":\"1623\"},{\"id\":\"1624\"},{\"id\":\"1625\"},{\"id\":\"1732\"}]},\"id\":\"1627\",\"type\":\"Toolbar\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2039\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1797\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1803\"}},\"id\":\"1799\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2060\"},\"group\":null,\"major_label_policy\":{\"id\":\"2061\"},\"ticker\":{\"id\":\"1424\"},\"visible\":false},\"id\":\"1423\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis\":{\"id\":\"1423\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1426\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1801\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1958\"},\"group\":null,\"major_label_policy\":{\"id\":\"1959\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1741\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1743\"},\"nonselection_glyph\":{\"id\":\"1742\"},\"view\":{\"id\":\"1745\"}},\"id\":\"1744\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1523\"},{\"id\":\"1524\"},{\"id\":\"1525\"},{\"id\":\"1526\"},{\"id\":\"1527\"},{\"id\":\"1528\"},{\"id\":\"1776\"}]},\"id\":\"1530\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1681\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1683\"},\"nonselection_glyph\":{\"id\":\"1682\"},\"view\":{\"id\":\"1685\"}},\"id\":\"1684\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2126\"},\"selection_policy\":{\"id\":\"2125\"}},\"id\":\"2053\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":1,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2015\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1643\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Deflection [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1955\"},\"group\":null,\"major_label_policy\":{\"id\":\"1956\"},\"ticker\":{\"id\":\"1024\"},\"visible\":true},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{\"tools\":[{\"id\":\"1797\"},{\"id\":\"1798\"},{\"id\":\"1799\"},{\"id\":\"1800\"},{\"id\":\"1801\"},{\"id\":\"1802\"}]},\"id\":\"1804\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1763\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1765\"},\"nonselection_glyph\":{\"id\":\"1764\"},\"view\":{\"id\":\"1767\"}},\"id\":\"1766\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1580\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1583\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1647\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2016\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1645\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2102\"},\"selection_policy\":{\"id\":\"2101\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1433\"}},\"id\":\"1429\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2080\"},\"group\":null,\"major_label_policy\":{\"id\":\"2081\"},\"ticker\":{\"id\":\"1581\"}},\"id\":\"1580\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1431\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2017\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1649\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1862\"},\"glyph\":{\"id\":\"1864\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1866\"},\"nonselection_glyph\":{\"id\":\"1865\"},\"view\":{\"id\":\"1868\"}},\"id\":\"1867\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"1638\"}],\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1652\",\"type\":\"HoverTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"},{\"id\":\"1152\"}]},\"id\":\"1154\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1646\"},\"glyph\":{\"id\":\"1647\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1649\"},\"nonselection_glyph\":{\"id\":\"1648\"},\"view\":{\"id\":\"1651\"}},\"id\":\"1650\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2018\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1726\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"1929\"}]},\"id\":\"1930\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1427\"},{\"id\":\"1428\"},{\"id\":\"1429\"},{\"id\":\"1430\"},{\"id\":\"1431\"},{\"id\":\"1432\"},{\"id\":\"1652\"}]},\"id\":\"1434\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1654\"},\"glyph\":{\"id\":\"1655\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1657\"},\"nonselection_glyph\":{\"id\":\"1656\"},\"view\":{\"id\":\"1659\"}},\"id\":\"1658\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1726\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1648\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2164\"},\"selection_policy\":{\"id\":\"2163\"}},\"id\":\"1686\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2008\"},\"selection_policy\":{\"id\":\"2007\"}},\"id\":\"1949\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2151\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2010\"},\"selection_policy\":{\"id\":\"2009\"}},\"id\":\"1950\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,200]},\"selected\":{\"id\":\"2145\"},\"selection_policy\":{\"id\":\"2144\"}},\"id\":\"1654\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2152\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2012\"},\"selection_policy\":{\"id\":\"2011\"}},\"id\":\"1951\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1657\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2014\"},\"selection_policy\":{\"id\":\"2013\"}},\"id\":\"1952\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2101\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1497\"}},\"id\":\"1493\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2077\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1654\"}},\"id\":\"1659\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2102\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2078\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2080\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2081\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1110\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1683\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2154\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1491\"},{\"id\":\"1492\"},{\"id\":\"1493\"},{\"id\":\"1494\"},{\"id\":\"1495\"},{\"id\":\"1496\"},{\"id\":\"1672\"}]},\"id\":\"1498\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2155\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"1107\",\"type\":\"Div\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1774\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"source\":{\"id\":\"1101\"}},\"id\":\"1106\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2156\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2147\"},\"selection_policy\":{\"id\":\"2146\"}},\"id\":\"1666\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1988\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2157\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1989\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2118\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2083\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2084\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1955\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2086\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1956\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1420\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2087\",\"type\":\"AllLabels\"}],\"root_ids\":[\"1933\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
+ " const render_items = [{\"docid\":\"1ba41f57-afc1-4c1f-adbd-445e1b83b0a8\",\"root_ids\":[\"1933\"],\"roots\":{\"1933\":\"4e250a96-0fc2-4305-9bd2-13fa7feefc9d\"}}];\n",
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
+ "\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " let attempts = 0;\n",
+ " const timer = setInterval(function(root) {\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " clearInterval(timer);\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " attempts++;\n",
+ " if (attempts > 100) {\n",
+ " clearInterval(timer);\n",
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
+ " }\n",
+ " }\n",
+ " }, 10, root)\n",
+ " }\n",
+ "})(window);"
+ ],
+ "application/vnd.bokehjs_exec.v0+json": ""
+ },
+ "metadata": {
+ "application/vnd.bokehjs_exec.v0+json": {
+ "id": "1933"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hidden_code_nb_deflection.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, E_steel, fy, fy_steel, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Legend**\n",
+ "\n",
+ "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
+ "\n",
+ "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
+ "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
+ "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
+ "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
+ "* **Slider of the elastic modulus E:** move the slider to change the elastic modulus of the section.\n",
+ "* **Figure \"Simple supported beam with deflection under uniform load\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q. In addition the beam can deform, showing the deflection graphically and quantitatively (by hoving over the beam with the cursor).\n",
+ "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
+ "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
+ "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
+ "* **Button of the force P:** apply or remove the external force P.\n",
+ "* **Figures \"N V M Diagrams\":** plots that show the axial force N, shear force V and bending moment M diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
+ "* **9 small bottom figures:** plots that show the strains, stresses and right-hand free-body diagram section (with N, V and M). By hovering with the cursor over the desired position, a small window will show the height and the value of the stress or strain.\n",
+ "\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
+ "### Recommendations\n",
+ "\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B or Cmd+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
+ "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Simple Beam DEMOs/09-sb_buckling.ipynb b/Simple Beam DEMOs/09-sb_buckling.ipynb
new file mode 100644
index 0000000..eff2ef2
--- /dev/null
+++ b/Simple Beam DEMOs/09-sb_buckling.ipynb
@@ -0,0 +1,592 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# **Simple beam - Buckling**\n",
+ "In this last notebook, the instability of a simple beam under constant axial load is studied. The system, geometry and actions are taken from the previous DEMO \"02-sb_actions\" except for the uniform load that is removed."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Goals**\n",
+ "\n",
+ "* Explore the concept of instability of an element\n",
+ "* Identify the major aspects of the buckling phenomena\n",
+ "* Describe the consequences of the instability in the design of an element"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Tasks and exercises**\n",
+ "\n",
+ "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
+ "\n",
+ "1. Why do the interactive visualization tool emphasizes on analysing the beam in the two planes x-y and x-z?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " In the analysis of an element under axial load that can buckle, it's essential to study individually the strong and weak axis instability, because one is independent of the other one.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n",
+ "\n",
+ "2. Consider the starting configuration with an axial force of 200 kN; the section is composed of a material with a yield strength $f_y$ = 50 MPa.\n",
+ "\n",
+ " 1. Does the section yield under the axial load?\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " No, because the axial load $P$ is 350 kN and the resisting axial force $N_{Ry}$ is computed below:\n",
+ " $$ N_{Ry} = Af_y = bhf_y = 250 kN $$\n",
+ " Given that the axial load is smaller that the resisting axial force, we can conlude that the section does not yield under axial load.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ " \n",
+ " 2. Can you assume that the element is designed correctly? If not, what would you change to avoid collapse of the beam?\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " As seen in the previous question, the section does not yield under axial load, but it's possible to observe in the tool that in the x-z plane, the beam buckles under the force P. The beam is unstable and will collapse under the slightest out-of-plane perturbation. It's essential to underline that the real elements that engineers design always have imprecisions (during constructions, during production, etc), thus the beam is not designed correctly.\n",
+ " <br>\n",
+ " There are different solutions to avoid the collapse:\n",
+ " <ul>\n",
+ " <li> Increase the height of the section beyond 300 mm (at least 440 mm) </li>\n",
+ " <li> Increase the width of the section to 80 mm </li>\n",
+ " <li> Decrease the length of the beam to 3.2 m </li>\n",
+ " <li> Add one brace in the middle of the beam </li>\n",
+ " </ul>\n",
+ " Note that increasing the resistance of the material has <strong>no positive impact</strong> in the instability.\n",
+ " </details>\n",
+ "\n",
+ " <br>\n",
+ "\n",
+ "3. Is it possible to compute analytically the amount of out-of-plane deflection due to buckling?\n",
+ "\n",
+ " <details>\n",
+ " <summary style=\"color: red\">Solution:</summary>\n",
+ " No, because the analitic shape of a buckled element is based on the following differential equation:\n",
+ " $$ \\frac{d^2v}{dx^2} + k^2v = 0 $$\n",
+ " With $v$ the deflection out-of-plane, $x$ the position across the element and $k = \\frac{N}{EI}$. The general solution of this equation is:\n",
+ " $$ y = C_1sinkx + C_2coskx $$\n",
+ " With $C_1$ and $C_2$ the constants of integration. It is not possible to compute the value of these constants; even so, this equation is important to extrapolate the mode shape of buckling.\n",
+ " </details>\n",
+ "\n",
+ "<br>\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Build the interactive visualisation tool**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " <div class=\"bk-root\">\n",
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
+ " </div>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ " const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " \n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
+ " \"<p>\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"</p>\\n\"+\n",
+ " \"<ul>\\n\"+\n",
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
+ " \"</ul>\\n\"+\n",
+ " \"<code>\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"</code>\\n\"+\n",
+ " \"</div>\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"1002\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " \n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ " \n",
+ "\n",
+ " const inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " \n",
+ " \n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " \n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " \n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ " if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ "\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Import the packages needed\n",
+ "import sys\n",
+ "sys.path.append('../HiddenCode')\n",
+ "import hidden_code_nb_buckling\n",
+ "import numpy as np\n",
+ "import math\n",
+ "from cienpy import simplebeam as sb\n",
+ "from cienpy import rectangular_section as beam_section\n",
+ "from cienpy import buckling"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Define the geometry, the external actions, the mechanical property and compute the initial configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Choose the dimensions\n",
+ "L = 6 # [m]\n",
+ "h = 100 # [mm]\n",
+ "b = 50 # [mm]\n",
+ "P = 10; # [kN]\n",
+ "\n",
+ "# Material parameter\n",
+ "E = 200e3 # MPa\n",
+ "\n",
+ "# compute the internal forces (at x=L)\n",
+ "discr_NVM = 101\n",
+ "x_discr = np.linspace(0, L, discr_NVM)\n",
+ "N = sb.compute_N(L, P)\n",
+ "\n",
+ "# compute the parameters\n",
+ "A = beam_section.compute_area(b, h) # [mm2]\n",
+ "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
+ "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
+ "\n",
+ "# compute the reactions\n",
+ "Rx = sb.compute_Rx(P)\n",
+ "\n",
+ "# compute buckling resistance\n",
+ "n_bracey = 0\n",
+ "n_bracez = 0\n",
+ "Ncrity = buckling.compute_N_buckling_y(E, Iy, L, n_bracey)\n",
+ "Ncritz = buckling.compute_N_buckling_z(E, Iz, L, n_bracez)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the complex code to generate the **interactive visualisation tool**:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " <div class=\"bk-root\" id=\"3841a4e9-dcab-4bd3-b1e0-b95fd367dcf4\" data-root-id=\"1356\"></div>\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function embed_document(root) {\n",
+ " \n",
+ " const docs_json = {\"e8780aad-6871-4f40-8880-fb642db884e1\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1355\"}]},\"id\":\"1356\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1188\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"1422\"},\"selection_policy\":{\"id\":\"1421\"}},\"id\":\"1188\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1188\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1194\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1369\"},\"start\":null,\"x_end\":{\"value\":-0.1},\"x_start\":{\"value\":-0.9},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1195\",\"type\":\"Arrow\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Text\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1198\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1212\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{\"text\":[\"x axis\"],\"x\":[-0.8],\"y\":[0.1]},\"selected\":{\"id\":\"1407\"},\"selection_policy\":{\"id\":\"1406\"}},\"id\":\"1197\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1197\"},\"glyph\":{\"id\":\"1198\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1200\"},\"nonselection_glyph\":{\"id\":\"1199\"},\"view\":{\"id\":\"1202\"}},\"id\":\"1201\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1199\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1200\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1197\"}},\"id\":\"1202\",\"type\":\"CDSView\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1225\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1203\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1203\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1370\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0.8},\"y_start\":{\"value\":0}},\"id\":\"1204\",\"type\":\"Arrow\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1206\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"y axis\"],\"x\":[0.1],\"y\":[0.2]},\"selected\":{\"id\":\"1409\"},\"selection_policy\":{\"id\":\"1408\"}},\"id\":\"1206\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1206\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1398\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"Number of braces in y direction:\"},\"id\":\"1232\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1399\",\"type\":\"Selection\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1216\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1212\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1378\"},\"start\":null,\"x_end\":{\"value\":-0.1},\"x_start\":{\"value\":-0.9},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1213\",\"type\":\"Arrow\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1217\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1215\"},\"glyph\":{\"id\":\"1216\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1218\"},\"nonselection_glyph\":{\"id\":\"1217\"},\"view\":{\"id\":\"1220\"}},\"id\":\"1219\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"x axis\"],\"x\":[-0.8],\"y\":[0.1]},\"selected\":{\"id\":\"1424\"},\"selection_policy\":{\"id\":\"1423\"}},\"id\":\"1215\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1218\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1215\"}},\"id\":\"1220\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1221\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1221\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1379\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0.8},\"y_start\":{\"value\":0}},\"id\":\"1222\",\"type\":\"Arrow\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1226\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1224\"},\"glyph\":{\"id\":\"1225\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1227\"},\"nonselection_glyph\":{\"id\":\"1226\"},\"view\":{\"id\":\"1229\"}},\"id\":\"1228\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"z axis\"],\"x\":[0.1],\"y\":[0.2]},\"selected\":{\"id\":\"1426\"},\"selection_policy\":{\"id\":\"1425\"}},\"id\":\"1224\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1227\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1224\"}},\"id\":\"1229\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1400\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1339\"}]},\"start\":1,\"step\":0.1,\"title\":\"Change the length of the beam [m]\",\"value\":6},\"id\":\"1231\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1242\",\"type\":\"LinearScale\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1341\"}]},\"labels\":[\"No brace\",\"One middle brace\",\"Two equally spaced braces\"]},\"id\":\"1233\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{},\"id\":\"1401\",\"type\":\"Selection\"},{\"attributes\":{\"end\":1000,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1340\"}]},\"start\":1,\"title\":\"Change the axial force P [kN]\",\"value\":10},\"id\":\"1230\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1244\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1246\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1249\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Beam instability in y direction\"},\"id\":\"1237\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1259\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1384\"},\"group\":null,\"major_label_policy\":{\"id\":\"1385\"},\"ticker\":{\"id\":\"1247\"}},\"id\":\"1246\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1247\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1381\"},\"group\":null,\"major_label_policy\":{\"id\":\"1382\"},\"ticker\":{\"id\":\"1251\"},\"visible\":false},\"id\":\"1250\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1250\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1253\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1251\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[],\"y\":[]},\"selected\":{\"id\":\"1442\"},\"selection_policy\":{\"id\":\"1441\"}},\"id\":\"1331\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1255\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1254\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1260\"}},\"id\":\"1256\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1257\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1402\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1258\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1403\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1260\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1254\"},{\"id\":\"1255\"},{\"id\":\"1256\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"}]},\"id\":\"1261\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1333\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1334\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1331\"},\"glyph\":{\"id\":\"1332\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1334\"},\"nonselection_glyph\":{\"id\":\"1333\"},\"view\":{\"id\":\"1336\"}},\"id\":\"1335\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1331\"}},\"id\":\"1336\",\"type\":\"CDSView\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1129\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1314\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1057\",\"type\":\"PanTool\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n N = -10 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = 228.46 kN<br>\\n N<sub>crit,z</sub> = 57.12 kN<br>\\n Instability: No\\n \",\"width\":170},\"id\":\"1324\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1058\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1145\"}],\"center\":[{\"id\":\"1148\"},{\"id\":\"1152\"},{\"id\":\"1186\"},{\"id\":\"1213\"},{\"id\":\"1222\"}],\"height\":200,\"left\":[{\"id\":\"1149\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1183\"},{\"id\":\"1192\"},{\"id\":\"1219\"},{\"id\":\"1228\"}],\"title\":{\"id\":\"1135\"},\"toolbar\":{\"id\":\"1160\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1141\"},\"y_range\":{\"id\":\"1139\"},\"y_scale\":{\"id\":\"1143\"}},\"id\":\"1134\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1321\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1062\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1128\"}},\"id\":\"1133\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1313\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"1405\"},\"selection_policy\":{\"id\":\"1404\"}},\"id\":\"1128\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1315\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1063\"}},\"id\":\"1059\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1319\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1128\"},\"glyph\":{\"id\":\"1129\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1131\"},\"nonselection_glyph\":{\"id\":\"1130\"},\"view\":{\"id\":\"1133\"}},\"id\":\"1132\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1317\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"ResetTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1130\",\"type\":\"Text\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1104\"},\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"section\":{\"id\":\"1102\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const h = cb_obj.value // value of the slider\\n const b = db['b'][0]\\n const L = db['L'][0]\\n const E = db['E'][0]\\n const n_bracey = db['n_bracey'][0]\\n const n_bracez = db['n_bracez'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const Iz = compute_inertia_z(b, h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = Iz\\n db['Ncrity'][0] = compute_N_buckling_y(E, Iy, L, n_bracey)\\n db['Ncritz'][0] = compute_N_buckling_z(E, Iz, L, n_bracez)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_div_buckling(db, div_buckling)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=101, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1338\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1318\"},\"glyph\":{\"id\":\"1319\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1321\"},\"nonselection_glyph\":{\"id\":\"1320\"},\"view\":{\"id\":\"1323\"}},\"id\":\"1322\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1439\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1131\",\"type\":\"Text\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1063\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1185\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1377\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1186\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1440\"},\"selection_policy\":{\"id\":\"1439\"}},\"id\":\"1318\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1375\"},\"group\":null,\"major_label_policy\":{\"id\":\"1376\"},\"ticker\":{\"id\":\"1146\"}},\"id\":\"1145\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1440\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam: x-z plane\"},\"id\":\"1135\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"1318\"}},\"id\":\"1323\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1158\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1320\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1081\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1146\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1145\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1148\",\"type\":\"Grid\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1122\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1372\"},\"group\":null,\"major_label_policy\":{\"id\":\"1373\"},\"ticker\":{\"id\":\"1150\"},\"visible\":false},\"id\":\"1149\",\"type\":\"LinearAxis\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1104\"},\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"section\":{\"id\":\"1102\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const L = db['L'][0]\\n const E = db['E'][0]\\n const n_bracey = db['n_bracey'][0]\\n const n_bracez = db['n_bracez'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const Iz = compute_inertia_z(b, h)\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = Iz\\n db['Ncrity'][0] = compute_N_buckling_y(E, Iy, L, n_bracey)\\n db['Ncritz'][0] = compute_N_buckling_z(E, Iz, L, n_bracez)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_div_buckling(db, div_buckling)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=101, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1337\",\"type\":\"CustomJS\"},{\"attributes\":{\"axis\":{\"id\":\"1149\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1152\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1083\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"axial_force_y\":{\"id\":\"1126\"},\"axial_force_z\":{\"id\":\"1186\"},\"div\":{\"id\":\"1104\"},\"div_buckling\":{\"id\":\"1324\"},\"label_P_force_y\":{\"id\":\"1132\"},\"label_P_force_z\":{\"id\":\"1192\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"point_brace_y\":{\"id\":\"1329\"},\"point_brace_z\":{\"id\":\"1335\"},\"s_b\":{\"id\":\"1003\"},\"source\":{\"id\":\"1004\"},\"support_r_y\":{\"id\":\"1096\"},\"support_r_z\":{\"id\":\"1183\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_b = s_b.data\\n const L = cb_obj.value // value of the slider\\n const E = db['E'][0]\\n const Iy = db['Iy'][0]\\n const Iz = db['Iz'][0]\\n const n_bracey = db['n_bracey'][0]\\n const n_bracez = db['n_bracez'][0]\\n\\n // apply the changes\\n data_b['x'][1] = L\\n db['L'][0] = L\\n db['Ncrity'][0] = compute_N_buckling_y(E, Iy, L, n_bracey)\\n db['Ncritz'][0] = compute_N_buckling_z(E, Iz, L, n_bracez)\\n\\n // update\\n update_div_geo(db, div)\\n update_div_buckling(db, div_buckling)\\n support_r_y.glyph.x = L\\n support_r_z.glyph.x = L\\n axial_force_y.x_start = L+1.0\\n axial_force_y.x_end = L\\n label_P_force_y.glyph.x = L+1.0/2\\n axial_force_z.x_start = L+1.0\\n axial_force_z.x_end = L\\n label_P_force_z.glyph.x = L+1.0/2\\n update_point_brace(point_brace_y, n_bracey)\\n update_point_brace(point_brace_z, n_bracez)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n s_b.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function update_point_brace(point_brace, n_brace) {\\n switch(n_brace) {\\n case 0:\\n var x_ = []\\n var y_ = []\\n break\\n case 1:\\n var x_ = [L/2]\\n var y_ = [0]\\n break\\n case 2:\\n var x_ = [L/3, 2*L/3]\\n var y_ = [0, 0]\\n break\\n default:\\n console.error(\\\"Number of braces \\\"+n_brace+\\\" exceeds the implemented limit (2)\\\")\\n }\\n const src_point = point_brace.data_source\\n src_point.data.x = x_\\n src_point.data.y = y_\\n src_point.change.emit()\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=101, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1339\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1088\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Patch\"},{\"attributes\":{\"args\":{\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n const db = source.data\\n const P = cb_obj.value // value of the slider\\n\\n // apply the changes\\n db['P'][0] = P\\n db['N'][0] = compute_N(P)\\n db['Rx'][0] = compute_Rx(P)\\n\\n // update\\n update_div_buckling(db, div_buckling)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=101, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1340\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":100},\"line_width\":{\"value\":3},\"width\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1099\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1154\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"args\":{\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"point_brace\":{\"id\":\"1329\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const n_brace = cb_obj.active\\n const E = db['E'][0]\\n const L = db['L'][0]\\n const I = db['Iy'][0]\\n\\n // apply the changes\\n db['n_bracey'][0] = n_brace\\n db['Ncrity'][0] = compute_N_buckling_y(E, I, L, n_brace)\\n\\n // update\\n update_div_buckling(db, div_buckling)\\n update_point_brace(point_brace, n_brace)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function update_point_brace(point_brace, n_brace) {\\n switch(n_brace) {\\n case 0:\\n var x_ = []\\n var y_ = []\\n break\\n case 1:\\n var x_ = [L/2]\\n var y_ = [0]\\n break\\n case 2:\\n var x_ = [L/3, 2*L/3]\\n var y_ = [0, 0]\\n break\\n default:\\n console.error(\\\"Number of braces \\\"+n_brace+\\\" exceeds the implemented limit (2)\\\")\\n }\\n const src_point = point_brace.data_source\\n src_point.data.x = x_\\n src_point.data.y = y_\\n src_point.change.emit()\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=101, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1341\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1153\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"1401\"},\"selection_policy\":{\"id\":\"1400\"}},\"id\":\"1086\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1159\"}},\"id\":\"1155\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"args\":{\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"point_brace\":{\"id\":\"1335\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const n_brace = cb_obj.active\\n const E = db['E'][0]\\n const L = db['L'][0]\\n const I = db['Iz'][0]\\n\\n // apply the changes\\n db['n_bracez'][0] = n_brace\\n db['Ncritz'][0] = compute_N_buckling_z(E, I, L, n_brace)\\n\\n // update\\n update_div_buckling(db, div_buckling)\\n update_point_brace(point_brace, n_brace)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function update_point_brace(point_brace, n_brace) {\\n switch(n_brace) {\\n case 0:\\n var x_ = []\\n var y_ = []\\n break\\n case 1:\\n var x_ = [L/2]\\n var y_ = [0]\\n break\\n case 2:\\n var x_ = [L/3, 2*L/3]\\n var y_ = [0, 0]\\n break\\n default:\\n console.error(\\\"Number of braces \\\"+n_brace+\\\" exceeds the implemented limit (2)\\\")\\n }\\n const src_point = point_brace.data_source\\n src_point.data.x = x_\\n src_point.data.y = y_\\n src_point.change.emit()\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=101, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1342\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1156\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1441\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"width\":10},\"id\":\"1343\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1157\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1442\",\"type\":\"Selection\"},{\"attributes\":{\"height\":10},\"id\":\"1346\",\"type\":\"Spacer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1159\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"height\":10},\"id\":\"1344\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"1104\"},{\"id\":\"1324\"}]},\"id\":\"1345\",\"type\":\"Row\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1082\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1240\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1085\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"1038\"},{\"id\":\"1343\"},{\"id\":\"1347\"}]},\"id\":\"1348\",\"type\":\"Row\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1342\"}]},\"labels\":[\"No brace\",\"One middle brace\",\"Two equally spaced braces\"]},\"id\":\"1235\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"children\":[{\"id\":\"1344\"},{\"id\":\"1105\"},{\"id\":\"1106\"},{\"id\":\"1230\"},{\"id\":\"1231\"},{\"id\":\"1345\"},{\"id\":\"1346\"},{\"id\":\"1232\"},{\"id\":\"1233\"},{\"id\":\"1234\"},{\"id\":\"1235\"}]},\"id\":\"1347\",\"type\":\"Column\"},{\"attributes\":{\"below\":[{\"id\":\"1246\"}],\"center\":[{\"id\":\"1249\"},{\"id\":\"1253\"}],\"height\":200,\"left\":[{\"id\":\"1250\"}],\"renderers\":[{\"id\":\"1272\"},{\"id\":\"1278\"},{\"id\":\"1329\"}],\"title\":{\"id\":\"1237\"},\"toolbar\":{\"id\":\"1261\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1242\"},\"y_range\":{\"id\":\"1240\"},\"y_scale\":{\"id\":\"1244\"}},\"id\":\"1236\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"tools\":[{\"id\":\"1057\"},{\"id\":\"1058\"},{\"id\":\"1059\"},{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"}]},\"id\":\"1064\",\"type\":\"Toolbar\"},{\"attributes\":{\"children\":[{\"id\":\"1348\"}]},\"id\":\"1349\",\"type\":\"Column\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1093\",\"type\":\"Circle\"},{\"attributes\":{\"width\":10},\"id\":\"1350\",\"type\":\"Spacer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1269\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1271\"},\"nonselection_glyph\":{\"id\":\"1270\"},\"view\":{\"id\":\"1273\"}},\"id\":\"1272\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1087\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1098\"}},\"id\":\"1103\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"1005\"},{\"id\":\"1134\"},{\"id\":\"1236\"},{\"id\":\"1280\"}]},\"id\":\"1352\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"1350\"}]},\"id\":\"1351\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1086\"},\"glyph\":{\"id\":\"1087\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1089\"},\"nonselection_glyph\":{\"id\":\"1088\"},\"view\":{\"id\":\"1091\"}},\"id\":\"1090\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1089\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1086\"}},\"id\":\"1091\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"1349\"},{\"id\":\"1351\"},{\"id\":\"1352\"}]},\"id\":\"1353\",\"type\":\"Row\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1447\"},\"selection_policy\":{\"id\":\"1446\"}},\"id\":\"1098\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"1403\"},\"selection_policy\":{\"id\":\"1402\"}},\"id\":\"1092\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"1353\"}]},\"id\":\"1354\",\"type\":\"Column\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1094\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1125\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1368\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1126\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1354\"}]},\"id\":\"1355\",\"type\":\"Row\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":100},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1100\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1095\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1185\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1107\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1092\"},\"glyph\":{\"id\":\"1093\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1095\"},\"nonselection_glyph\":{\"id\":\"1094\"},\"view\":{\"id\":\"1097\"}},\"id\":\"1096\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1092\"}},\"id\":\"1097\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":100},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1101\",\"type\":\"Rect\"},{\"attributes\":{\"text\":\"Number of braces in z direction:\"},\"id\":\"1234\",\"type\":\"Div\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1125\",\"type\":\"VeeHead\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 100 mm<br>\\n b = 50 mm<br>\\n L = 6 m<br>\\n A = 5.00e+03 mm<sup>2</sup><br>\\n Iy = 4.17e+06 mm<sup>4</sup><br>\\n Iz = 1.04e+06 mm<sup>4</sup>\",\"width\":170},\"id\":\"1104\",\"type\":\"Div\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1098\"},\"glyph\":{\"id\":\"1099\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1101\"},\"nonselection_glyph\":{\"id\":\"1100\"},\"view\":{\"id\":\"1103\"}},\"id\":\"1102\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1121\",\"type\":\"Text\"},{\"attributes\":{\"tools\":[{\"id\":\"1153\"},{\"id\":\"1154\"},{\"id\":\"1155\"},{\"id\":\"1156\"},{\"id\":\"1157\"},{\"id\":\"1158\"}]},\"id\":\"1160\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1444\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1119\"},\"glyph\":{\"id\":\"1120\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1122\"},\"nonselection_glyph\":{\"id\":\"1121\"},\"view\":{\"id\":\"1124\"}},\"id\":\"1123\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"end\":150,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1337\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":50},\"id\":\"1105\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Line\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1338\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":100},\"id\":\"1106\",\"type\":\"Slider\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1445\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1107\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1396\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1108\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1179\"},\"glyph\":{\"id\":\"1180\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1182\"},\"nonselection_glyph\":{\"id\":\"1181\"},\"view\":{\"id\":\"1184\"}},\"id\":\"1183\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1180\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1119\"}},\"id\":\"1124\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1110\"}},\"id\":\"1115\",\"type\":\"CDSView\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1120\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"1418\"},\"selection_policy\":{\"id\":\"1417\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1113\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"1451\"},\"selection_policy\":{\"id\":\"1450\"}},\"id\":\"1119\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Patch\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1112\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1182\",\"type\":\"Circle\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1111\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1194\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"1449\"},\"selection_policy\":{\"id\":\"1448\"}},\"id\":\"1110\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1110\"},\"glyph\":{\"id\":\"1111\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1113\"},\"nonselection_glyph\":{\"id\":\"1112\"},\"view\":{\"id\":\"1115\"}},\"id\":\"1114\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"1420\"},\"selection_policy\":{\"id\":\"1419\"}},\"id\":\"1179\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1116\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1181\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1116\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1397\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1117\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1179\"}},\"id\":\"1184\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1387\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1388\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1445\"},\"selection_policy\":{\"id\":\"1444\"}},\"id\":\"1071\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1277\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1390\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1412\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1391\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1270\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1290\"}],\"center\":[{\"id\":\"1293\"},{\"id\":\"1297\"}],\"height\":200,\"left\":[{\"id\":\"1294\"}],\"renderers\":[{\"id\":\"1316\"},{\"id\":\"1322\"},{\"id\":\"1335\"}],\"title\":{\"id\":\"1281\"},\"toolbar\":{\"id\":\"1305\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1286\"},\"y_range\":{\"id\":\"1284\"},\"y_scale\":{\"id\":\"1288\"}},\"id\":\"1280\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1414\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1271\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1332\",\"type\":\"Circle\"},{\"attributes\":{\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1269\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1071\"},\"glyph\":{\"id\":\"1072\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1074\"},\"nonselection_glyph\":{\"id\":\"1073\"},\"view\":{\"id\":\"1076\"}},\"id\":\"1075\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1275\",\"type\":\"Line\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1139\",\"type\":\"Range1d\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1273\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1071\"}},\"id\":\"1076\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1313\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1315\"},\"nonselection_glyph\":{\"id\":\"1314\"},\"view\":{\"id\":\"1317\"}},\"id\":\"1316\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1274\"},\"glyph\":{\"id\":\"1275\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1277\"},\"nonselection_glyph\":{\"id\":\"1276\"},\"view\":{\"id\":\"1279\"}},\"id\":\"1278\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1416\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1435\"},\"selection_policy\":{\"id\":\"1434\"}},\"id\":\"1274\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1274\"}},\"id\":\"1279\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1276\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1290\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1293\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1053\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1056\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1288\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"1024\"},{\"id\":\"1025\"},{\"id\":\"1026\"},{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"}]},\"id\":\"1031\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Beam instability in z direction\"},\"id\":\"1281\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1286\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1392\"},\"group\":null,\"major_label_policy\":{\"id\":\"1393\"},\"ticker\":{\"id\":\"1077\"}},\"id\":\"1053\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1390\"},\"group\":null,\"major_label_policy\":{\"id\":\"1391\"},\"ticker\":{\"id\":\"1291\"}},\"id\":\"1290\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1291\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1016\"}],\"center\":[{\"id\":\"1019\"},{\"id\":\"1023\"},{\"id\":\"1126\"},{\"id\":\"1195\"},{\"id\":\"1204\"}],\"height\":200,\"left\":[{\"id\":\"1020\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1084\"},{\"id\":\"1090\"},{\"id\":\"1096\"},{\"id\":\"1132\"},{\"id\":\"1201\"},{\"id\":\"1210\"}],\"title\":{\"id\":\"1006\"},\"toolbar\":{\"id\":\"1031\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1012\"},\"y_range\":{\"id\":\"1010\"},\"y_scale\":{\"id\":\"1014\"}},\"id\":\"1005\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1387\"},\"group\":null,\"major_label_policy\":{\"id\":\"1388\"},\"ticker\":{\"id\":\"1295\"},\"visible\":false},\"id\":\"1294\",\"type\":\"LinearAxis\"},{\"attributes\":{\"interval\":50},\"id\":\"1077\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1294\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1297\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1418\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1295\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1328\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1304\"}},\"id\":\"1300\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1301\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1392\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1304\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1393\",\"type\":\"AllLabels\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1010\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1399\"},\"selection_policy\":{\"id\":\"1398\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1394\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[],\"y\":[]},\"selected\":{\"id\":\"1437\"},\"selection_policy\":{\"id\":\"1436\"}},\"id\":\"1325\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"A\":[5000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[4166666.6666666665],\"Iz\":[1041666.6666666666],\"L\":[6],\"N\":[-10],\"Ncrity\":[228.46306484003142],\"Ncritz\":[57.115766210007855],\"P\":[10],\"Rx\":[10],\"SCALE\":[10],\"b\":[50],\"h\":[100],\"n_bracey\":[0],\"n_bracez\":[0],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0]},\"selected\":{\"id\":\"1458\"},\"selection_policy\":{\"id\":\"1457\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1395\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1394\"},\"group\":null,\"major_label_policy\":{\"id\":\"1395\"},\"ticker\":{\"id\":\"1077\"}},\"id\":\"1049\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1327\",\"type\":\"Circle\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1008\",\"type\":\"Range1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1081\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1083\"},\"nonselection_glyph\":{\"id\":\"1082\"},\"view\":{\"id\":\"1085\"}},\"id\":\"1084\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1012\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1325\"},\"glyph\":{\"id\":\"1326\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1328\"},\"nonselection_glyph\":{\"id\":\"1327\"},\"view\":{\"id\":\"1330\"}},\"id\":\"1329\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1420\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1049\"}],\"center\":[{\"id\":\"1052\"},{\"id\":\"1056\"},{\"id\":\"1108\"},{\"id\":\"1117\"}],\"left\":[{\"id\":\"1053\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1075\"},{\"id\":\"1102\"},{\"id\":\"1114\"},{\"id\":\"1123\"}],\"title\":{\"id\":\"1039\"},\"toolbar\":{\"id\":\"1064\"},\"toolbar_location\":null,\"width\":375,\"x_range\":{\"id\":\"1041\"},\"x_scale\":{\"id\":\"1045\"},\"y_range\":{\"id\":\"1043\"},\"y_scale\":{\"id\":\"1047\"}},\"id\":\"1038\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1141\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":240.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":150},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1073\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1029\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam: x-y plane\"},\"id\":\"1006\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"1325\"}},\"id\":\"1330\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1039\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1366\"},\"group\":null,\"major_label_policy\":{\"id\":\"1367\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1363\"},\"group\":null,\"major_label_policy\":{\"id\":\"1364\"},\"ticker\":{\"id\":\"1021\"},\"visible\":false},\"id\":\"1020\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1454\"},\"selection_policy\":{\"id\":\"1453\"}},\"id\":\"1396\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1020\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1023\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1456\"},\"selection_policy\":{\"id\":\"1455\"}},\"id\":\"1397\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1049\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1052\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"ResetTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1298\"},{\"id\":\"1299\"},{\"id\":\"1300\"},{\"id\":\"1301\"},{\"id\":\"1302\"},{\"id\":\"1303\"}]},\"id\":\"1305\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":240.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":150},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1072\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1030\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1041\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1326\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1030\"}},\"id\":\"1026\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1431\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1404\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1405\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1456\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1406\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1407\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1435\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1408\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1436\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1409\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1429\"},\"selection_policy\":{\"id\":\"1428\"}},\"id\":\"1377\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1446\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1431\"},\"selection_policy\":{\"id\":\"1430\"}},\"id\":\"1378\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1447\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1433\"},\"selection_policy\":{\"id\":\"1432\"}},\"id\":\"1379\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1448\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1449\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1381\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1450\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1382\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1451\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1384\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1385\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":240.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":150},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1074\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1453\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1454\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1457\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1458\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1363\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1422\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1364\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1366\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1367\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1423\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1412\"},\"selection_policy\":{\"id\":\"1411\"}},\"id\":\"1368\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1424\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1414\"},\"selection_policy\":{\"id\":\"1413\"}},\"id\":\"1369\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1416\"},\"selection_policy\":{\"id\":\"1415\"}},\"id\":\"1370\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1425\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1426\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1372\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1373\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1375\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1376\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1429\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"UnionRenderers\"}],\"root_ids\":[\"1356\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
+ " const render_items = [{\"docid\":\"e8780aad-6871-4f40-8880-fb642db884e1\",\"root_ids\":[\"1356\"],\"roots\":{\"1356\":\"3841a4e9-dcab-4bd3-b1e0-b95fd367dcf4\"}}];\n",
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
+ "\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " let attempts = 0;\n",
+ " const timer = setInterval(function(root) {\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " clearInterval(timer);\n",
+ " embed_document(root);\n",
+ " } else {\n",
+ " attempts++;\n",
+ " if (attempts > 100) {\n",
+ " clearInterval(timer);\n",
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
+ " }\n",
+ " }\n",
+ " }, 10, root)\n",
+ " }\n",
+ "})(window);"
+ ],
+ "application/vnd.bokehjs_exec.v0+json": ""
+ },
+ "metadata": {
+ "application/vnd.bokehjs_exec.v0+json": {
+ "id": "1356"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hidden_code_nb_buckling.main_code(L, h, b, A, Iy, Iz, P, E, N, Rx, discr_NVM, x_discr, n_bracey, n_bracez, Ncrity, Ncritz)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "## **Legend**\n",
+ "\n",
+ "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
+ "\n",
+ "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
+ "* **Slider of the height h:** move the slider to change the height h of the cross-section of the beam.\n",
+ "* **Slider of the axial force P:** move the slider to change the axial force P applied on the beam.\n",
+ "* **Slider of the length L:** move the slider to change the length L of the beam.\n",
+ "* **Textbox \"Geometrical and mechanical parameters:** small summary with the value of h, b, L, A (area), Iy (inertia with respect to the strong axis) and Iz (inertia with respect to the weak axis).\n",
+ "* **Textbox \"Forces and Instability:** small summary with the value of the reaction forces, the internal forces, external forces, critical buckling loads and the information on the instability of the element.\n",
+ "* **Radio buttons of the number of braces:** choose between zero, one and two braces (equally spaced) in the y or z direction.\n",
+ "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
+ "* **2 Figures \"Simple supported beam\":** in this figures, the initial system is presented with the static scheme, the length of the beam, the horizontal force P and the x and y/z axis.\n",
+ "* **2 Figures \"Beam instability\":** in this figures, if buckling occurs, the shape of the beam is presented. The red dots represent the position of the braces.\n",
+ "\n",
+ "### Help and Information on the functions\n",
+ "\n",
+ "In Jupyter Notebooks the user can learn more about a function by using the question mark after the target function. One question mark shows some useful information on the function and two question marks show in addition also the code of the function, revealing it's content.\n",
+ "For example, by creating a Code cell and pasting \"beam_section.compute_area?\" or \"beam_section.compute_area??\", it's possible to see how this feature works.\n",
+ "\n",
+ "### Recommendations\n",
+ "\n",
+ "If you have problem visualizing the entirety of the tool, you can maximize the window size by using Ctrl+B or Cmd+B to hide/show the left explorer panel and by using F11 to go to the full-page mode and back in the browser (NB: it could not work in the tab with NOTO; just use F11 in another tab and come back in the NOTO tab). If you're using a very sall display and it's not enough, you can zoom out the browser tab.\n",
+ "\n",
+ "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Simple Beam DEMOs/img/Weld1.png b/Simple Beam DEMOs/img/Weld1.png
new file mode 100644
index 0000000..655027a
Binary files /dev/null and b/Simple Beam DEMOs/img/Weld1.png differ
diff --git a/Simple Beam DEMOs/img/Weld2.png b/Simple Beam DEMOs/img/Weld2.png
new file mode 100644
index 0000000..736ce51
Binary files /dev/null and b/Simple Beam DEMOs/img/Weld2.png differ
diff --git a/Simple Beam DEMOs/sb_buckling.ipynb b/Simple Beam DEMOs/sb_buckling.ipynb
deleted file mode 100644
index f8111e4..0000000
--- a/Simple Beam DEMOs/sb_buckling.ipynb
+++ /dev/null
@@ -1,479 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Simple beam - Buckling\n",
- "In this last notebook, the instability of a simple beam under constant axial load is studied. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- " <div class=\"bk-root\">\n",
- " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
- " <span id=\"1002\">Loading BokehJS ...</span>\n",
- " </div>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "\n",
- "(function(root) {\n",
- " function now() {\n",
- " return new Date();\n",
- " }\n",
- "\n",
- " const force = true;\n",
- "\n",
- " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
- " root._bokeh_onload_callbacks = [];\n",
- " root._bokeh_is_loading = undefined;\n",
- " }\n",
- "\n",
- " const JS_MIME_TYPE = 'application/javascript';\n",
- " const HTML_MIME_TYPE = 'text/html';\n",
- " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
- " const CLASS_NAME = 'output_bokeh rendered_html';\n",
- "\n",
- " /**\n",
- " * Render data to the DOM node\n",
- " */\n",
- " function render(props, node) {\n",
- " const script = document.createElement(\"script\");\n",
- " node.appendChild(script);\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when an output is cleared or removed\n",
- " */\n",
- " function handleClearOutput(event, handle) {\n",
- " const cell = handle.cell;\n",
- "\n",
- " const id = cell.output_area._bokeh_element_id;\n",
- " const server_id = cell.output_area._bokeh_server_id;\n",
- " // Clean up Bokeh references\n",
- " if (id != null && id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- "\n",
- " if (server_id !== undefined) {\n",
- " // Clean up Bokeh references\n",
- " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
- " cell.notebook.kernel.execute(cmd_clean, {\n",
- " iopub: {\n",
- " output: function(msg) {\n",
- " const id = msg.content.text.trim();\n",
- " if (id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- " }\n",
- " }\n",
- " });\n",
- " // Destroy server and session\n",
- " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
- " cell.notebook.kernel.execute(cmd_destroy);\n",
- " }\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when a new output is added\n",
- " */\n",
- " function handleAddOutput(event, handle) {\n",
- " const output_area = handle.output_area;\n",
- " const output = handle.output;\n",
- "\n",
- " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
- " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
- " return\n",
- " }\n",
- "\n",
- " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
- "\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
- " // store reference to embed id on output_area\n",
- " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
- " }\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
- " const bk_div = document.createElement(\"div\");\n",
- " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
- " const script_attrs = bk_div.children[0].attributes;\n",
- " for (let i = 0; i < script_attrs.length; i++) {\n",
- " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
- " }\n",
- " // store reference to server id on output_area\n",
- " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
- " }\n",
- " }\n",
- "\n",
- " function register_renderer(events, OutputArea) {\n",
- "\n",
- " function append_mime(data, metadata, element) {\n",
- " // create a DOM node to render to\n",
- " const toinsert = this.create_output_subarea(\n",
- " metadata,\n",
- " CLASS_NAME,\n",
- " EXEC_MIME_TYPE\n",
- " );\n",
- " this.keyboard_manager.register_events(toinsert);\n",
- " // Render to node\n",
- " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
- " render(props, toinsert[toinsert.length - 1]);\n",
- " element.append(toinsert);\n",
- " return toinsert\n",
- " }\n",
- "\n",
- " /* Handle when an output is cleared or removed */\n",
- " events.on('clear_output.CodeCell', handleClearOutput);\n",
- " events.on('delete.Cell', handleClearOutput);\n",
- "\n",
- " /* Handle when a new output is added */\n",
- " events.on('output_added.OutputArea', handleAddOutput);\n",
- "\n",
- " /**\n",
- " * Register the mime type and append_mime function with output_area\n",
- " */\n",
- " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
- " /* Is output safe? */\n",
- " safe: true,\n",
- " /* Index of renderer in `output_area.display_order` */\n",
- " index: 0\n",
- " });\n",
- " }\n",
- "\n",
- " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
- " if (root.Jupyter !== undefined) {\n",
- " const events = require('base/js/events');\n",
- " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
- "\n",
- " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
- " register_renderer(events, OutputArea);\n",
- " }\n",
- " }\n",
- "\n",
- " \n",
- " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
- " root._bokeh_timeout = Date.now() + 5000;\n",
- " root._bokeh_failed_load = false;\n",
- " }\n",
- "\n",
- " const NB_LOAD_WARNING = {'data': {'text/html':\n",
- " \"<div style='background-color: #fdd'>\\n\"+\n",
- " \"<p>\\n\"+\n",
- " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
- " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
- " \"</p>\\n\"+\n",
- " \"<ul>\\n\"+\n",
- " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
- " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
- " \"</ul>\\n\"+\n",
- " \"<code>\\n\"+\n",
- " \"from bokeh.resources import INLINE\\n\"+\n",
- " \"output_notebook(resources=INLINE)\\n\"+\n",
- " \"</code>\\n\"+\n",
- " \"</div>\"}};\n",
- "\n",
- " function display_loaded() {\n",
- " const el = document.getElementById(\"1002\");\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS is loading...\";\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
- " }\n",
- " } else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(display_loaded, 100)\n",
- " }\n",
- " }\n",
- "\n",
- "\n",
- " function run_callbacks() {\n",
- " try {\n",
- " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
- " if (callback != null)\n",
- " callback();\n",
- " });\n",
- " } finally {\n",
- " delete root._bokeh_onload_callbacks\n",
- " }\n",
- " console.debug(\"Bokeh: all callbacks have finished\");\n",
- " }\n",
- "\n",
- " function load_libs(css_urls, js_urls, callback) {\n",
- " if (css_urls == null) css_urls = [];\n",
- " if (js_urls == null) js_urls = [];\n",
- "\n",
- " root._bokeh_onload_callbacks.push(callback);\n",
- " if (root._bokeh_is_loading > 0) {\n",
- " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
- " return null;\n",
- " }\n",
- " if (js_urls == null || js_urls.length === 0) {\n",
- " run_callbacks();\n",
- " return null;\n",
- " }\n",
- " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
- " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
- "\n",
- " function on_load() {\n",
- " root._bokeh_is_loading--;\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
- " run_callbacks()\n",
- " }\n",
- " }\n",
- "\n",
- " function on_error(url) {\n",
- " console.error(\"failed to load \" + url);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < css_urls.length; i++) {\n",
- " const url = css_urls[i];\n",
- " const element = document.createElement(\"link\");\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.rel = \"stylesheet\";\n",
- " element.type = \"text/css\";\n",
- " element.href = url;\n",
- " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < js_urls.length; i++) {\n",
- " const url = js_urls[i];\n",
- " const element = document.createElement('script');\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.async = false;\n",
- " element.src = url;\n",
- " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
- " document.head.appendChild(element);\n",
- " }\n",
- " };\n",
- "\n",
- " function inject_raw_css(css) {\n",
- " const element = document.createElement(\"style\");\n",
- " element.appendChild(document.createTextNode(css));\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " \n",
- " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
- " const css_urls = [];\n",
- " \n",
- "\n",
- " const inline_js = [\n",
- " function(Bokeh) {\n",
- " Bokeh.set_log_level(\"info\");\n",
- " },\n",
- " function(Bokeh) {\n",
- " \n",
- " \n",
- " }\n",
- " ];\n",
- "\n",
- " function run_inline_js() {\n",
- " \n",
- " if (root.Bokeh !== undefined || force === true) {\n",
- " \n",
- " for (let i = 0; i < inline_js.length; i++) {\n",
- " inline_js[i].call(root, root.Bokeh);\n",
- " }\n",
- " if (force === true) {\n",
- " display_loaded();\n",
- " }} else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(run_inline_js, 100);\n",
- " } else if (!root._bokeh_failed_load) {\n",
- " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
- " root._bokeh_failed_load = true;\n",
- " } else if (force !== true) {\n",
- " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
- " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
- " }\n",
- "\n",
- " }\n",
- "\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
- " run_inline_js();\n",
- " } else {\n",
- " load_libs(css_urls, js_urls, function() {\n",
- " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
- " run_inline_js();\n",
- " });\n",
- " }\n",
- "}(window));"
- ],
- "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Import the packages needed\n",
- "import sys\n",
- "sys.path.append('../HiddenCode')\n",
- "import hidden_code_nb_buckling\n",
- "import numpy as np\n",
- "import math\n",
- "from cienpy import simplebeam as sb\n",
- "from cienpy import rectangular_section as beam_section\n",
- "from cienpy import buckling"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the geometry and uniform load. Note that given the graphical nature of the notebook, extreme cases can cause the figures to not be displayed."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Choose the dimensions\n",
- "L = 6 # [m]\n",
- "h = 100 # [mm]\n",
- "b = 50 # [mm]\n",
- "P = 10; # [kN]\n",
- "\n",
- "# Material parameter\n",
- "E = 200e3 # MPa\n",
- "\n",
- "# compute the internal forces (at x=L)\n",
- "discr_NVM = 100\n",
- "x_discr = np.linspace(0, L, discr_NVM)\n",
- "N = sb.compute_N(L, P)\n",
- "\n",
- "# compute the parameters\n",
- "A = beam_section.compute_area(b, h) # [mm2]\n",
- "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
- "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
- "\n",
- "# compute the reactions\n",
- "Rx = sb.compute_Rx(P)\n",
- "\n",
- "# compute buckling resistance\n",
- "n_bracey = 0\n",
- "n_bracez = 0\n",
- "Ncrity = buckling.compute_N_buckling_y(E, Iy, L, n_bracey)\n",
- "Ncritz = buckling.compute_N_buckling_z(E, Iz, L, n_bracez)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run the complex code for the interactive visualisation:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- " <div class=\"bk-root\" id=\"a743359c-c5c2-462d-9c0c-f95ef4d9ace0\" data-root-id=\"1356\"></div>\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "(function(root) {\n",
- " function embed_document(root) {\n",
- " \n",
- " const docs_json = {\"c8f06a0a-e584-4717-aa52-b032f08dea83\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1355\"}]},\"id\":\"1356\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1372\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1373\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1375\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1376\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1429\"},\"selection_policy\":{\"id\":\"1428\"}},\"id\":\"1377\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1431\"},\"selection_policy\":{\"id\":\"1430\"}},\"id\":\"1378\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1433\"},\"selection_policy\":{\"id\":\"1432\"}},\"id\":\"1379\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1381\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1382\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1384\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1385\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1185\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1377\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1186\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1110\"}},\"id\":\"1115\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1444\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Patch\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1112\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1180\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1119\"}},\"id\":\"1124\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1445\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1110\"},\"glyph\":{\"id\":\"1111\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1113\"},\"nonselection_glyph\":{\"id\":\"1112\"},\"view\":{\"id\":\"1115\"}},\"id\":\"1114\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"1449\"},\"selection_policy\":{\"id\":\"1448\"}},\"id\":\"1110\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"1418\"},\"selection_policy\":{\"id\":\"1417\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1113\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1116\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1116\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1397\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1117\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"1422\"},\"selection_policy\":{\"id\":\"1421\"}},\"id\":\"1188\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Patch\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1120\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1188\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1128\"}},\"id\":\"1133\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"1420\"},\"selection_policy\":{\"id\":\"1419\"}},\"id\":\"1179\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1121\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1181\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1119\"},\"glyph\":{\"id\":\"1120\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1122\"},\"nonselection_glyph\":{\"id\":\"1121\"},\"view\":{\"id\":\"1124\"}},\"id\":\"1123\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1182\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"1451\"},\"selection_policy\":{\"id\":\"1450\"}},\"id\":\"1119\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1363\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1194\",\"type\":\"VeeHead\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1122\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1125\",\"type\":\"VeeHead\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1125\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1368\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1126\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1179\"},\"glyph\":{\"id\":\"1180\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1182\"},\"nonselection_glyph\":{\"id\":\"1181\"},\"view\":{\"id\":\"1184\"}},\"id\":\"1183\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1129\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1364\",\"type\":\"AllLabels\"},{\"attributes\":{\"below\":[{\"id\":\"1145\"}],\"center\":[{\"id\":\"1148\"},{\"id\":\"1152\"},{\"id\":\"1186\"},{\"id\":\"1213\"},{\"id\":\"1222\"}],\"height\":200,\"left\":[{\"id\":\"1149\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1183\"},{\"id\":\"1192\"},{\"id\":\"1219\"},{\"id\":\"1228\"}],\"title\":{\"id\":\"1135\"},\"toolbar\":{\"id\":\"1160\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1141\"},\"y_range\":{\"id\":\"1139\"},\"y_scale\":{\"id\":\"1143\"}},\"id\":\"1134\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1194\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1369\"},\"start\":null,\"x_end\":{\"value\":-0.1},\"x_start\":{\"value\":-0.9},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1195\",\"type\":\"Arrow\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1139\",\"type\":\"Range1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1188\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"1405\"},\"selection_policy\":{\"id\":\"1404\"}},\"id\":\"1128\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1366\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1179\"}},\"id\":\"1184\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1446\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1128\"},\"glyph\":{\"id\":\"1129\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1131\"},\"nonselection_glyph\":{\"id\":\"1130\"},\"view\":{\"id\":\"1133\"}},\"id\":\"1132\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1206\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1367\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1185\",\"type\":\"VeeHead\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1130\",\"type\":\"Text\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1198\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1447\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1131\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1197\"}},\"id\":\"1202\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"x axis\"],\"x\":[-0.8],\"y\":[0.1]},\"selected\":{\"id\":\"1407\"},\"selection_policy\":{\"id\":\"1406\"}},\"id\":\"1197\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1197\"},\"glyph\":{\"id\":\"1198\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1200\"},\"nonselection_glyph\":{\"id\":\"1199\"},\"view\":{\"id\":\"1202\"}},\"id\":\"1201\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1145\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1148\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam: x-z plane\"},\"id\":\"1135\",\"type\":\"Title\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1199\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1158\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1375\"},\"group\":null,\"major_label_policy\":{\"id\":\"1376\"},\"ticker\":{\"id\":\"1146\"}},\"id\":\"1145\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1200\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1203\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1203\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1370\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0.8},\"y_start\":{\"value\":0}},\"id\":\"1204\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1412\"},\"selection_policy\":{\"id\":\"1411\"}},\"id\":\"1368\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1215\"}},\"id\":\"1220\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1146\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1372\"},\"group\":null,\"major_label_policy\":{\"id\":\"1373\"},\"ticker\":{\"id\":\"1150\"},\"visible\":false},\"id\":\"1149\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1149\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1152\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1206\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1414\"},\"selection_policy\":{\"id\":\"1413\"}},\"id\":\"1369\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"text\":[\"y axis\"],\"x\":[0.1],\"y\":[0.2]},\"selected\":{\"id\":\"1409\"},\"selection_policy\":{\"id\":\"1408\"}},\"id\":\"1206\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Text\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1416\"},\"selection_policy\":{\"id\":\"1415\"}},\"id\":\"1370\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1224\"}},\"id\":\"1229\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1154\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1216\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1153\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1159\"}},\"id\":\"1155\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1448\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1156\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1212\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1212\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1378\"},\"start\":null,\"x_end\":{\"value\":-0.1},\"x_start\":{\"value\":-0.9},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1213\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1157\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1449\",\"type\":\"Selection\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1217\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1215\"},\"glyph\":{\"id\":\"1216\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1218\"},\"nonselection_glyph\":{\"id\":\"1217\"},\"view\":{\"id\":\"1220\"}},\"id\":\"1219\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"x axis\"],\"x\":[-0.8],\"y\":[0.1]},\"selected\":{\"id\":\"1424\"},\"selection_policy\":{\"id\":\"1423\"}},\"id\":\"1215\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1159\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1218\",\"type\":\"Text\"},{\"attributes\":{\"text\":\"Number of braces in z direction:\"},\"id\":\"1234\",\"type\":\"Div\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":4.114506654314834}},\"id\":\"1221\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1221\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":0.5877866649021191},\"source\":{\"id\":\"1379\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0.8},\"y_start\":{\"value\":0}},\"id\":\"1222\",\"type\":\"Arrow\"},{\"attributes\":{\"below\":[{\"id\":\"1246\"}],\"center\":[{\"id\":\"1249\"},{\"id\":\"1253\"}],\"height\":200,\"left\":[{\"id\":\"1250\"}],\"renderers\":[{\"id\":\"1272\"},{\"id\":\"1278\"},{\"id\":\"1329\"}],\"title\":{\"id\":\"1237\"},\"toolbar\":{\"id\":\"1261\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1242\"},\"y_range\":{\"id\":\"1240\"},\"y_scale\":{\"id\":\"1244\"}},\"id\":\"1236\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1225\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1226\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1224\"},\"glyph\":{\"id\":\"1225\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1227\"},\"nonselection_glyph\":{\"id\":\"1226\"},\"view\":{\"id\":\"1229\"}},\"id\":\"1228\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1240\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"text\":[\"z axis\"],\"x\":[0.1],\"y\":[0.2]},\"selected\":{\"id\":\"1426\"},\"selection_policy\":{\"id\":\"1425\"}},\"id\":\"1224\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1227\",\"type\":\"Text\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1342\"}]},\"labels\":[\"No brace\",\"One middle brace\",\"Two equally spaced braces\"]},\"id\":\"1235\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1341\"}]},\"labels\":[\"No brace\",\"One middle brace\",\"Two equally spaced braces\"]},\"id\":\"1233\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{},\"id\":\"1450\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1339\"}]},\"start\":1,\"step\":0.1,\"title\":\"Change the length of the beam [m]\",\"value\":6},\"id\":\"1231\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1269\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1271\"},\"nonselection_glyph\":{\"id\":\"1270\"},\"view\":{\"id\":\"1273\"}},\"id\":\"1272\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text\":\"Number of braces in y direction:\"},\"id\":\"1232\",\"type\":\"Div\"},{\"attributes\":{\"end\":1000,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1340\"}]},\"start\":1,\"title\":\"Change the axial force P [kN]\",\"value\":10},\"id\":\"1230\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1451\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1244\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1246\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1249\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Beam instability in y direction\"},\"id\":\"1237\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1242\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1259\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1457\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1384\"},\"group\":null,\"major_label_policy\":{\"id\":\"1385\"},\"ticker\":{\"id\":\"1247\"}},\"id\":\"1246\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1247\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1458\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1381\"},\"group\":null,\"major_label_policy\":{\"id\":\"1382\"},\"ticker\":{\"id\":\"1251\"},\"visible\":false},\"id\":\"1250\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1250\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1253\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1251\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1326\",\"type\":\"Circle\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1254\"},{\"id\":\"1255\"},{\"id\":\"1256\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"}]},\"id\":\"1261\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1255\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1254\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1260\"}},\"id\":\"1256\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1257\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1258\",\"type\":\"ResetTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1153\"},{\"id\":\"1154\"},{\"id\":\"1155\"},{\"id\":\"1156\"},{\"id\":\"1157\"},{\"id\":\"1158\"}]},\"id\":\"1160\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":240.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":150},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1072\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1399\"},\"selection_policy\":{\"id\":\"1398\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1088\",\"type\":\"Patch\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1010\",\"type\":\"Range1d\"},{\"attributes\":{\"below\":[{\"id\":\"1016\"}],\"center\":[{\"id\":\"1019\"},{\"id\":\"1023\"},{\"id\":\"1126\"},{\"id\":\"1195\"},{\"id\":\"1204\"}],\"height\":200,\"left\":[{\"id\":\"1020\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1084\"},{\"id\":\"1090\"},{\"id\":\"1096\"},{\"id\":\"1132\"},{\"id\":\"1201\"},{\"id\":\"1210\"}],\"title\":{\"id\":\"1006\"},\"toolbar\":{\"id\":\"1031\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1012\"},\"y_range\":{\"id\":\"1010\"},\"y_scale\":{\"id\":\"1014\"}},\"id\":\"1005\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"A\":[5000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[4166666.6666666665],\"Iz\":[1041666.6666666666],\"L\":[6],\"N\":[-10],\"Ncrity\":[228.46306484003142],\"Ncritz\":[57.115766210007855],\"P\":[10],\"Rx\":[10],\"SCALE\":[10],\"b\":[50],\"h\":[100],\"n_bracey\":[0],\"n_bracez\":[0],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0]},\"selected\":{\"id\":\"1458\"},\"selection_policy\":{\"id\":\"1457\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1012\",\"type\":\"LinearScale\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1008\",\"type\":\"Range1d\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1363\"},\"group\":null,\"major_label_policy\":{\"id\":\"1364\"},\"ticker\":{\"id\":\"1021\"},\"visible\":false},\"id\":\"1020\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam: x-y plane\"},\"id\":\"1006\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1041\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1366\"},\"group\":null,\"major_label_policy\":{\"id\":\"1367\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1020\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1023\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1454\"},\"selection_policy\":{\"id\":\"1453\"}},\"id\":\"1396\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1456\"},\"selection_policy\":{\"id\":\"1455\"}},\"id\":\"1397\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1412\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1439\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1440\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1414\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1398\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1416\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1399\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1441\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1442\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1418\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1400\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1401\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1420\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1394\"},\"group\":null,\"major_label_policy\":{\"id\":\"1395\"},\"ticker\":{\"id\":\"1077\"}},\"id\":\"1049\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1260\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1445\"},\"selection_policy\":{\"id\":\"1444\"}},\"id\":\"1071\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1334\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1058\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1039\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1049\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1052\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1053\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1056\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1325\"}},\"id\":\"1330\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1429\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1392\"},\"group\":null,\"major_label_policy\":{\"id\":\"1393\"},\"ticker\":{\"id\":\"1077\"}},\"id\":\"1053\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":[],\"y\":[]},\"selected\":{\"id\":\"1442\"},\"selection_policy\":{\"id\":\"1441\"}},\"id\":\"1331\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1141\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1332\",\"type\":\"Circle\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 100 mm<br>\\n b = 50 mm<br>\\n L = 6 m<br>\\n A = 5.00e+03 mm<sup>2</sup><br>\\n Iy = 4.17e+06 mm<sup>4</sup><br>\\n Iz = 1.04e+06 mm<sup>4</sup>\",\"width\":170},\"id\":\"1104\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1453\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1081\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1333\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1454\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1431\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1062\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1057\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1063\"}},\"id\":\"1059\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1456\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1063\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1086\"}},\"id\":\"1091\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1269\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1270\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1082\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1277\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1271\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1085\",\"type\":\"CDSView\"},{\"attributes\":{\"interval\":50},\"id\":\"1077\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1274\"},\"glyph\":{\"id\":\"1275\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1277\"},\"nonselection_glyph\":{\"id\":\"1276\"},\"view\":{\"id\":\"1279\"}},\"id\":\"1278\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1325\"},\"glyph\":{\"id\":\"1326\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1328\"},\"nonselection_glyph\":{\"id\":\"1327\"},\"view\":{\"id\":\"1330\"}},\"id\":\"1329\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1273\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1081\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1083\"},\"nonselection_glyph\":{\"id\":\"1082\"},\"view\":{\"id\":\"1085\"}},\"id\":\"1084\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1291\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1290\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1293\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1290\"}],\"center\":[{\"id\":\"1293\"},{\"id\":\"1297\"}],\"height\":200,\"left\":[{\"id\":\"1294\"}],\"renderers\":[{\"id\":\"1316\"},{\"id\":\"1322\"},{\"id\":\"1335\"}],\"title\":{\"id\":\"1281\"},\"toolbar\":{\"id\":\"1305\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1008\"},\"x_scale\":{\"id\":\"1286\"},\"y_range\":{\"id\":\"1284\"},\"y_scale\":{\"id\":\"1288\"}},\"id\":\"1280\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1087\",\"type\":\"Patch\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1275\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1435\"},\"selection_policy\":{\"id\":\"1434\"}},\"id\":\"1274\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1435\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1276\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1274\"}},\"id\":\"1279\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Beam instability in z direction\"},\"id\":\"1281\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1083\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1288\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1286\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1313\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1315\"},\"nonselection_glyph\":{\"id\":\"1314\"},\"view\":{\"id\":\"1317\"}},\"id\":\"1316\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1390\"},\"group\":null,\"major_label_policy\":{\"id\":\"1391\"},\"ticker\":{\"id\":\"1291\"}},\"id\":\"1290\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1327\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1436\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1057\"},{\"id\":\"1058\"},{\"id\":\"1059\"},{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"}]},\"id\":\"1064\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[],\"y\":[]},\"selected\":{\"id\":\"1437\"},\"selection_policy\":{\"id\":\"1436\"}},\"id\":\"1325\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":100},\"line_width\":{\"value\":3},\"width\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1099\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1387\"},\"group\":null,\"major_label_policy\":{\"id\":\"1388\"},\"ticker\":{\"id\":\"1295\"},\"visible\":false},\"id\":\"1294\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1294\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1297\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1094\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1295\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1098\"},\"glyph\":{\"id\":\"1099\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1101\"},\"nonselection_glyph\":{\"id\":\"1100\"},\"view\":{\"id\":\"1103\"}},\"id\":\"1102\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"1401\"},\"selection_policy\":{\"id\":\"1400\"}},\"id\":\"1086\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1086\"},\"glyph\":{\"id\":\"1087\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1089\"},\"nonselection_glyph\":{\"id\":\"1088\"},\"view\":{\"id\":\"1091\"}},\"id\":\"1090\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1447\"},\"selection_policy\":{\"id\":\"1446\"}},\"id\":\"1098\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"1403\"},\"selection_policy\":{\"id\":\"1402\"}},\"id\":\"1092\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1093\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1304\"}},\"id\":\"1300\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1107\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1396\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1108\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1095\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1301\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":100},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1100\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1107\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1092\"},\"glyph\":{\"id\":\"1093\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1095\"},\"nonselection_glyph\":{\"id\":\"1094\"},\"view\":{\"id\":\"1097\"}},\"id\":\"1096\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1304\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1092\"}},\"id\":\"1097\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1298\"},{\"id\":\"1299\"},{\"id\":\"1300\"},{\"id\":\"1301\"},{\"id\":\"1302\"},{\"id\":\"1303\"}]},\"id\":\"1305\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":100},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1101\",\"type\":\"Rect\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1338\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":100},\"id\":\"1106\",\"type\":\"Slider\"},{\"attributes\":{\"end\":150,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1337\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":50},\"id\":\"1105\",\"type\":\"Slider\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1111\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1328\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1098\"}},\"id\":\"1103\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1024\"},{\"id\":\"1025\"},{\"id\":\"1026\"},{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"}]},\"id\":\"1031\",\"type\":\"Toolbar\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1030\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1071\"}},\"id\":\"1076\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1071\"},\"glyph\":{\"id\":\"1072\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1074\"},\"nonselection_glyph\":{\"id\":\"1073\"},\"view\":{\"id\":\"1076\"}},\"id\":\"1075\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1314\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1321\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1315\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1387\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1104\"},\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"section\":{\"id\":\"1102\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const h = cb_obj.value // value of the slider\\n const b = db['b'][0]\\n const L = db['L'][0]\\n const E = db['E'][0]\\n const n_bracey = db['n_bracey'][0]\\n const n_bracez = db['n_bracez'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const Iz = compute_inertia_z(b, h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = Iz\\n db['Ncrity'][0] = compute_N_buckling_y(E, Iy, L, n_bracey)\\n db['Ncritz'][0] = compute_N_buckling_z(E, Iz, L, n_bracez)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_div_buckling(db, div_buckling)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=100, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1338\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_color\":\"gray\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1313\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1318\"},\"glyph\":{\"id\":\"1319\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1321\"},\"nonselection_glyph\":{\"id\":\"1320\"},\"view\":{\"id\":\"1323\"}},\"id\":\"1322\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1388\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1317\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1390\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1104\"},\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"section\":{\"id\":\"1102\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const L = db['L'][0]\\n const E = db['E'][0]\\n const n_bracey = db['n_bracey'][0]\\n const n_bracez = db['n_bracez'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const Iz = compute_inertia_z(b, h)\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = Iz\\n db['Ncrity'][0] = compute_N_buckling_y(E, Iy, L, n_bracey)\\n db['Ncritz'][0] = compute_N_buckling_z(E, Iz, L, n_bracez)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_div_buckling(db, div_buckling)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=100, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1337\",\"type\":\"CustomJS\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n N = -10 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = 228.46 kN<br>\\n N<sub>crit,z</sub> = 57.12 kN<br>\\n Instability: No\\n \",\"width\":170},\"id\":\"1324\",\"type\":\"Div\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1319\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1440\"},\"selection_policy\":{\"id\":\"1439\"}},\"id\":\"1318\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1391\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1318\"}},\"id\":\"1323\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1320\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1331\"}},\"id\":\"1336\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1331\"},\"glyph\":{\"id\":\"1332\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1334\"},\"nonselection_glyph\":{\"id\":\"1333\"},\"view\":{\"id\":\"1336\"}},\"id\":\"1335\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"axial_force_y\":{\"id\":\"1126\"},\"axial_force_z\":{\"id\":\"1186\"},\"div\":{\"id\":\"1104\"},\"div_buckling\":{\"id\":\"1324\"},\"label_P_force_y\":{\"id\":\"1132\"},\"label_P_force_z\":{\"id\":\"1192\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"point_brace_y\":{\"id\":\"1329\"},\"point_brace_z\":{\"id\":\"1335\"},\"s_b\":{\"id\":\"1003\"},\"source\":{\"id\":\"1004\"},\"support_r_y\":{\"id\":\"1096\"},\"support_r_z\":{\"id\":\"1183\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_b = s_b.data\\n const L = cb_obj.value // value of the slider\\n const E = db['E'][0]\\n const Iy = db['Iy'][0]\\n const Iz = db['Iz'][0]\\n const n_bracey = db['n_bracey'][0]\\n const n_bracez = db['n_bracez'][0]\\n\\n // apply the changes\\n data_b['x'][1] = L\\n db['L'][0] = L\\n db['Ncrity'][0] = compute_N_buckling_y(E, Iy, L, n_bracey)\\n db['Ncritz'][0] = compute_N_buckling_z(E, Iz, L, n_bracez)\\n\\n // update\\n update_div_geo(db, div)\\n update_div_buckling(db, div_buckling)\\n support_r_y.glyph.x = L\\n support_r_z.glyph.x = L\\n axial_force_y.x_start = L+1.0\\n axial_force_y.x_end = L\\n label_P_force_y.glyph.x = L+1.0/2\\n axial_force_z.x_start = L+1.0\\n axial_force_z.x_end = L\\n label_P_force_z.glyph.x = L+1.0/2\\n update_point_brace(point_brace_y, n_bracey)\\n update_point_brace(point_brace_z, n_bracez)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n s_b.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function update_point_brace(point_brace, n_brace) {\\n switch(n_brace) {\\n case 0:\\n var x_ = []\\n var y_ = []\\n break\\n case 1:\\n var x_ = [L/2]\\n var y_ = [0]\\n break\\n case 2:\\n var x_ = [L/3, 2*L/3]\\n var y_ = [0, 0]\\n break\\n default:\\n console.error(\\\"Number of braces \\\"+n_brace+\\\" exceeds the implemented limit (2)\\\")\\n }\\n const src_point = point_brace.data_source\\n src_point.data.x = x_\\n src_point.data.y = y_\\n src_point.change.emit()\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=100, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1339\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n const db = source.data\\n const P = cb_obj.value // value of the slider\\n\\n // apply the changes\\n db['P'][0] = P\\n db['N'][0] = compute_N(P)\\n db['Rx'][0] = compute_Rx(P)\\n\\n // update\\n update_div_buckling(db, div_buckling)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=100, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1340\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"point_brace\":{\"id\":\"1329\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const n_brace = cb_obj.active\\n const E = db['E'][0]\\n const L = db['L'][0]\\n const I = db['Iy'][0]\\n\\n // apply the changes\\n db['n_bracey'][0] = n_brace\\n db['Ncrity'][0] = compute_N_buckling_y(E, I, L, n_brace)\\n\\n // update\\n update_div_buckling(db, div_buckling)\\n update_point_brace(point_brace, n_brace)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function update_point_brace(point_brace, n_brace) {\\n switch(n_brace) {\\n case 0:\\n var x_ = []\\n var y_ = []\\n break\\n case 1:\\n var x_ = [L/2]\\n var y_ = [0]\\n break\\n case 2:\\n var x_ = [L/3, 2*L/3]\\n var y_ = [0, 0]\\n break\\n default:\\n console.error(\\\"Number of braces \\\"+n_brace+\\\" exceeds the implemented limit (2)\\\")\\n }\\n const src_point = point_brace.data_source\\n src_point.data.x = x_\\n src_point.data.y = y_\\n src_point.change.emit()\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=100, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1341\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"div_buckling\":{\"id\":\"1324\"},\"mode_shape_y\":{\"id\":\"1278\"},\"mode_shape_z\":{\"id\":\"1322\"},\"point_brace\":{\"id\":\"1335\"},\"source\":{\"id\":\"1004\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const n_brace = cb_obj.active\\n const E = db['E'][0]\\n const L = db['L'][0]\\n const I = db['Iz'][0]\\n\\n // apply the changes\\n db['n_bracez'][0] = n_brace\\n db['Ncritz'][0] = compute_N_buckling_z(E, I, L, n_brace)\\n\\n // update\\n update_div_buckling(db, div_buckling)\\n update_point_brace(point_brace, n_brace)\\n update_mode_shape_N_buckling(db, mode_shape_y, mode_shape_z)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_buckling(data, div) {\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const N = data['N'][0]\\n const Ncrity = Math.round(data['Ncrity'][0]*10)/10\\n const Ncritz = Math.round(data['Ncritz'][0]*10)/10\\n if ((-N<Ncrity) && (-N<Ncritz)) {\\n var str_insta = \\\"No\\\"\\n } else {\\n var str_insta = \\\"Yes\\\"\\n }\\n div.text = `\\n <p style='font-size:14px'><b>Forces and Instability:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n N = `+N+` kN<br>\\n V = 0 kN<br>\\n M = 0 kNm<br>\\n N<sub>crit,y</sub> = `+Ncrity+` kN<br>\\n N<sub>crit,z</sub> = `+Ncritz+` kN<br>\\n Instability: `+str_insta+`\\n ` \\n }\\n \\n \\n function compute_N_buckling_y(E, Iy, L, n_bracey) {\\n return ((n_bracey+1)*Math.PI)**2*E*Iy/L**2/1e9\\n }\\n \\n \\n function compute_N_buckling_z(E, Iz, L, n_bracez) {\\n return ((n_bracez+1)*Math.PI)**2*E*Iz/L**2/1e9\\n }\\n \\n \\n function update_point_brace(point_brace, n_brace) {\\n switch(n_brace) {\\n case 0:\\n var x_ = []\\n var y_ = []\\n break\\n case 1:\\n var x_ = [L/2]\\n var y_ = [0]\\n break\\n case 2:\\n var x_ = [L/3, 2*L/3]\\n var y_ = [0, 0]\\n break\\n default:\\n console.error(\\\"Number of braces \\\"+n_brace+\\\" exceeds the implemented limit (2)\\\")\\n }\\n const src_point = point_brace.data_source\\n src_point.data.x = x_\\n src_point.data.y = y_\\n src_point.change.emit()\\n }\\n \\n \\n function compute_mode_shape_N_buckling(x, L, n_brace, C=1) {\\n return C*Math.sin((n_brace+1)*Math.PI*x/L)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_mode_shape_N_buckling(data, glyph_ms_y, glyph_ms_z, discr=100, C=1) {\\n const L = data['L'][0]\\n const n_bracey = data['n_bracey'][0]\\n const n_bracez = data['n_bracez'][0]\\n const N = -data['N'][0]\\n const Ncrity = data['Ncrity'][0]\\n const Ncritz = data['Ncritz'][0]\\n const x_discr = linspace(0, L, discr)\\n let mode_shape_y = new Array(discr)\\n let mode_shape_z = new Array(discr)\\n \\n // compute the arrays\\n if (N >= Ncrity) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_y[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracey, C)\\n }\\n } else {\\n mode_shape_y = new Array(discr).fill(0)\\n }\\n if (N >= Ncritz) {\\n for (var i = 0; i < discr; i++) {\\n mode_shape_z[i] = compute_mode_shape_N_buckling(x_discr[i], L, n_bracez, C)\\n }\\n } else {\\n mode_shape_z = new Array(discr).fill(0)\\n }\\n debugger\\n // update the mode shape\\n const src_ms_y = glyph_ms_y.data_source\\n src_ms_y.data.x = x_discr\\n src_ms_y.data.y = mode_shape_y\\n src_ms_y.change.emit()\\n const src_ms_z = glyph_ms_z.data_source\\n src_ms_z.data.x = x_discr\\n src_ms_z.data.y = mode_shape_z\\n src_ms_z.change.emit()\\n }\\n \\n \"},\"id\":\"1342\",\"type\":\"CustomJS\"},{\"attributes\":{\"width\":10},\"id\":\"1343\",\"type\":\"Spacer\"},{\"attributes\":{\"height\":10},\"id\":\"1346\",\"type\":\"Spacer\"},{\"attributes\":{\"height\":10},\"id\":\"1344\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"1104\"},{\"id\":\"1324\"}]},\"id\":\"1345\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1038\"},{\"id\":\"1343\"},{\"id\":\"1347\"}]},\"id\":\"1348\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1344\"},{\"id\":\"1105\"},{\"id\":\"1106\"},{\"id\":\"1230\"},{\"id\":\"1231\"},{\"id\":\"1345\"},{\"id\":\"1346\"},{\"id\":\"1232\"},{\"id\":\"1233\"},{\"id\":\"1234\"},{\"id\":\"1235\"}]},\"id\":\"1347\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"1348\"}]},\"id\":\"1349\",\"type\":\"Column\"},{\"attributes\":{\"width\":10},\"id\":\"1350\",\"type\":\"Spacer\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1089\",\"type\":\"Patch\"},{\"attributes\":{\"children\":[{\"id\":\"1005\"},{\"id\":\"1134\"},{\"id\":\"1236\"},{\"id\":\"1280\"}]},\"id\":\"1352\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"1350\"}]},\"id\":\"1351\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"1349\"},{\"id\":\"1351\"},{\"id\":\"1352\"}]},\"id\":\"1353\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1392\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"1353\"}]},\"id\":\"1354\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1393\",\"type\":\"AllLabels\"},{\"attributes\":{\"children\":[{\"id\":\"1354\"}]},\"id\":\"1355\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1394\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1395\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1402\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1403\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1422\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1404\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1405\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1423\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1049\"}],\"center\":[{\"id\":\"1052\"},{\"id\":\"1056\"},{\"id\":\"1108\"},{\"id\":\"1117\"}],\"left\":[{\"id\":\"1053\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1075\"},{\"id\":\"1102\"},{\"id\":\"1114\"},{\"id\":\"1123\"}],\"title\":{\"id\":\"1039\"},\"toolbar\":{\"id\":\"1064\"},\"toolbar_location\":null,\"width\":375,\"x_range\":{\"id\":\"1041\"},\"x_scale\":{\"id\":\"1045\"},\"y_range\":{\"id\":\"1043\"},\"y_scale\":{\"id\":\"1047\"}},\"id\":\"1038\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1424\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1406\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1407\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1425\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1426\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1408\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1409\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1029\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":240.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":150},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1074\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":240.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":150},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1073\",\"type\":\"Rect\"},{\"attributes\":{\"overlay\":{\"id\":\"1030\"}},\"id\":\"1026\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"SaveTool\"}],\"root_ids\":[\"1356\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
- " const render_items = [{\"docid\":\"c8f06a0a-e584-4717-aa52-b032f08dea83\",\"root_ids\":[\"1356\"],\"roots\":{\"1356\":\"a743359c-c5c2-462d-9c0c-f95ef4d9ace0\"}}];\n",
- " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
- "\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " embed_document(root);\n",
- " } else {\n",
- " let attempts = 0;\n",
- " const timer = setInterval(function(root) {\n",
- " if (root.Bokeh !== undefined) {\n",
- " clearInterval(timer);\n",
- " embed_document(root);\n",
- " } else {\n",
- " attempts++;\n",
- " if (attempts > 100) {\n",
- " clearInterval(timer);\n",
- " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
- " }\n",
- " }\n",
- " }, 10, root)\n",
- " }\n",
- "})(window);"
- ],
- "application/vnd.bokehjs_exec.v0+json": ""
- },
- "metadata": {
- "application/vnd.bokehjs_exec.v0+json": {
- "id": "1356"
- }
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "hidden_code_nb_buckling.main_code(L, h, b, A, Iy, Iz, P, E, N, Rx, discr_NVM, x_discr, n_bracey, n_bracez, Ncrity, Ncritz)"
- ]
- }
- ],
- "metadata": {
- "interpreter": {
- "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
- },
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/Simple Beam DEMOs/sb_deflection.ipynb b/Simple Beam DEMOs/sb_deflection.ipynb
deleted file mode 100644
index 7d0e12f..0000000
--- a/Simple Beam DEMOs/sb_deflection.ipynb
+++ /dev/null
@@ -1,486 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Simple beam - Deflection\n",
- "In this eigth notebook, the deflection of a simple supported beam is studied."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- " <div class=\"bk-root\">\n",
- " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
- " <span id=\"1002\">Loading BokehJS ...</span>\n",
- " </div>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "\n",
- "(function(root) {\n",
- " function now() {\n",
- " return new Date();\n",
- " }\n",
- "\n",
- " const force = true;\n",
- "\n",
- " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
- " root._bokeh_onload_callbacks = [];\n",
- " root._bokeh_is_loading = undefined;\n",
- " }\n",
- "\n",
- " const JS_MIME_TYPE = 'application/javascript';\n",
- " const HTML_MIME_TYPE = 'text/html';\n",
- " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
- " const CLASS_NAME = 'output_bokeh rendered_html';\n",
- "\n",
- " /**\n",
- " * Render data to the DOM node\n",
- " */\n",
- " function render(props, node) {\n",
- " const script = document.createElement(\"script\");\n",
- " node.appendChild(script);\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when an output is cleared or removed\n",
- " */\n",
- " function handleClearOutput(event, handle) {\n",
- " const cell = handle.cell;\n",
- "\n",
- " const id = cell.output_area._bokeh_element_id;\n",
- " const server_id = cell.output_area._bokeh_server_id;\n",
- " // Clean up Bokeh references\n",
- " if (id != null && id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- "\n",
- " if (server_id !== undefined) {\n",
- " // Clean up Bokeh references\n",
- " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
- " cell.notebook.kernel.execute(cmd_clean, {\n",
- " iopub: {\n",
- " output: function(msg) {\n",
- " const id = msg.content.text.trim();\n",
- " if (id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- " }\n",
- " }\n",
- " });\n",
- " // Destroy server and session\n",
- " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
- " cell.notebook.kernel.execute(cmd_destroy);\n",
- " }\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when a new output is added\n",
- " */\n",
- " function handleAddOutput(event, handle) {\n",
- " const output_area = handle.output_area;\n",
- " const output = handle.output;\n",
- "\n",
- " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
- " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
- " return\n",
- " }\n",
- "\n",
- " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
- "\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
- " // store reference to embed id on output_area\n",
- " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
- " }\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
- " const bk_div = document.createElement(\"div\");\n",
- " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
- " const script_attrs = bk_div.children[0].attributes;\n",
- " for (let i = 0; i < script_attrs.length; i++) {\n",
- " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
- " }\n",
- " // store reference to server id on output_area\n",
- " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
- " }\n",
- " }\n",
- "\n",
- " function register_renderer(events, OutputArea) {\n",
- "\n",
- " function append_mime(data, metadata, element) {\n",
- " // create a DOM node to render to\n",
- " const toinsert = this.create_output_subarea(\n",
- " metadata,\n",
- " CLASS_NAME,\n",
- " EXEC_MIME_TYPE\n",
- " );\n",
- " this.keyboard_manager.register_events(toinsert);\n",
- " // Render to node\n",
- " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
- " render(props, toinsert[toinsert.length - 1]);\n",
- " element.append(toinsert);\n",
- " return toinsert\n",
- " }\n",
- "\n",
- " /* Handle when an output is cleared or removed */\n",
- " events.on('clear_output.CodeCell', handleClearOutput);\n",
- " events.on('delete.Cell', handleClearOutput);\n",
- "\n",
- " /* Handle when a new output is added */\n",
- " events.on('output_added.OutputArea', handleAddOutput);\n",
- "\n",
- " /**\n",
- " * Register the mime type and append_mime function with output_area\n",
- " */\n",
- " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
- " /* Is output safe? */\n",
- " safe: true,\n",
- " /* Index of renderer in `output_area.display_order` */\n",
- " index: 0\n",
- " });\n",
- " }\n",
- "\n",
- " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
- " if (root.Jupyter !== undefined) {\n",
- " const events = require('base/js/events');\n",
- " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
- "\n",
- " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
- " register_renderer(events, OutputArea);\n",
- " }\n",
- " }\n",
- "\n",
- " \n",
- " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
- " root._bokeh_timeout = Date.now() + 5000;\n",
- " root._bokeh_failed_load = false;\n",
- " }\n",
- "\n",
- " const NB_LOAD_WARNING = {'data': {'text/html':\n",
- " \"<div style='background-color: #fdd'>\\n\"+\n",
- " \"<p>\\n\"+\n",
- " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
- " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
- " \"</p>\\n\"+\n",
- " \"<ul>\\n\"+\n",
- " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
- " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
- " \"</ul>\\n\"+\n",
- " \"<code>\\n\"+\n",
- " \"from bokeh.resources import INLINE\\n\"+\n",
- " \"output_notebook(resources=INLINE)\\n\"+\n",
- " \"</code>\\n\"+\n",
- " \"</div>\"}};\n",
- "\n",
- " function display_loaded() {\n",
- " const el = document.getElementById(\"1002\");\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS is loading...\";\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
- " }\n",
- " } else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(display_loaded, 100)\n",
- " }\n",
- " }\n",
- "\n",
- "\n",
- " function run_callbacks() {\n",
- " try {\n",
- " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
- " if (callback != null)\n",
- " callback();\n",
- " });\n",
- " } finally {\n",
- " delete root._bokeh_onload_callbacks\n",
- " }\n",
- " console.debug(\"Bokeh: all callbacks have finished\");\n",
- " }\n",
- "\n",
- " function load_libs(css_urls, js_urls, callback) {\n",
- " if (css_urls == null) css_urls = [];\n",
- " if (js_urls == null) js_urls = [];\n",
- "\n",
- " root._bokeh_onload_callbacks.push(callback);\n",
- " if (root._bokeh_is_loading > 0) {\n",
- " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
- " return null;\n",
- " }\n",
- " if (js_urls == null || js_urls.length === 0) {\n",
- " run_callbacks();\n",
- " return null;\n",
- " }\n",
- " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
- " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
- "\n",
- " function on_load() {\n",
- " root._bokeh_is_loading--;\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
- " run_callbacks()\n",
- " }\n",
- " }\n",
- "\n",
- " function on_error(url) {\n",
- " console.error(\"failed to load \" + url);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < css_urls.length; i++) {\n",
- " const url = css_urls[i];\n",
- " const element = document.createElement(\"link\");\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.rel = \"stylesheet\";\n",
- " element.type = \"text/css\";\n",
- " element.href = url;\n",
- " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < js_urls.length; i++) {\n",
- " const url = js_urls[i];\n",
- " const element = document.createElement('script');\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.async = false;\n",
- " element.src = url;\n",
- " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
- " document.head.appendChild(element);\n",
- " }\n",
- " };\n",
- "\n",
- " function inject_raw_css(css) {\n",
- " const element = document.createElement(\"style\");\n",
- " element.appendChild(document.createTextNode(css));\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " \n",
- " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
- " const css_urls = [];\n",
- " \n",
- "\n",
- " const inline_js = [\n",
- " function(Bokeh) {\n",
- " Bokeh.set_log_level(\"info\");\n",
- " },\n",
- " function(Bokeh) {\n",
- " \n",
- " \n",
- " }\n",
- " ];\n",
- "\n",
- " function run_inline_js() {\n",
- " \n",
- " if (root.Bokeh !== undefined || force === true) {\n",
- " \n",
- " for (let i = 0; i < inline_js.length; i++) {\n",
- " inline_js[i].call(root, root.Bokeh);\n",
- " }\n",
- " if (force === true) {\n",
- " display_loaded();\n",
- " }} else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(run_inline_js, 100);\n",
- " } else if (!root._bokeh_failed_load) {\n",
- " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
- " root._bokeh_failed_load = true;\n",
- " } else if (force !== true) {\n",
- " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
- " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
- " }\n",
- "\n",
- " }\n",
- "\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
- " run_inline_js();\n",
- " } else {\n",
- " load_libs(css_urls, js_urls, function() {\n",
- " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
- " run_inline_js();\n",
- " });\n",
- " }\n",
- "}(window));"
- ],
- "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Import the packages needed\n",
- "import sys\n",
- "sys.path.append('../HiddenCode')\n",
- "import hidden_code_nb_deflection\n",
- "import math\n",
- "import numpy as np\n",
- "from cienpy import simplebeam as sb\n",
- "from cienpy import rectangular_section as beam_section\n",
- "from cienpy import stress_strain_elastic as stst"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the geometry and uniform load. Note that given the graphical nature of the notebook, extreme cases can cause the figures to not be displayed."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Choose the dimensions\n",
- "L = 6 # [m]\n",
- "h = 200 # [mm]\n",
- "b = 100 # [mm]\n",
- "q = 4; # [kN/m]\n",
- "P = 10; # [kN]\n",
- "\n",
- "# Choose the material parameters\n",
- "E_steel = 200e3 # [MPa] steel\n",
- "fy_steel = 355 # [MPa] steel\n",
- "E = E_steel\n",
- "fy = fy_steel\n",
- "\n",
- "# compute the internal forces (at x=L)\n",
- "discr_NVM = 100\n",
- "x_discr = np.linspace(0, L, discr_NVM)\n",
- "N_discr = sb.compute_N(x_discr, P)\n",
- "V_discr = sb.compute_V(x_discr, q, L)\n",
- "M_discr = sb.compute_M(x_discr, q, L)\n",
- "N = N_discr[-1]\n",
- "V = V_discr[-1]\n",
- "M = M_discr[-1]\n",
- "\n",
- "# compute the parameters\n",
- "A = beam_section.compute_area(b, h) # [mm2]\n",
- "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
- "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
- "yG = beam_section.compute_centroid_y(h)\n",
- "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
- "\n",
- "# compute the reactions\n",
- "Rx = sb.compute_Rx(P)\n",
- "Ry_l = sb.compute_Ry_l(q, L)\n",
- "Ry_r = sb.compute_Ry_r(q, L)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run the complex code for the interactive visualisation:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- " <div class=\"bk-root\" id=\"55e49958-3dc8-447c-a262-d25d686921ca\" data-root-id=\"1931\"></div>\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "(function(root) {\n",
- " function embed_document(root) {\n",
- " \n",
- " const docs_json = {\"09fd65be-e224-4536-94d0-4f4c5f93935a\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1930\"}]},\"id\":\"1931\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1953\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1781\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2137\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1954\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2114\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2138\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1720\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1956\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2126\"},\"selection_policy\":{\"id\":\"2125\"}},\"id\":\"1738\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2115\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1957\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1770\"},\"glyph\":{\"id\":\"1771\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1773\"},\"nonselection_glyph\":{\"id\":\"1772\"},\"view\":{\"id\":\"1775\"}},\"id\":\"1774\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2167\"},\"selection_policy\":{\"id\":\"2166\"}},\"id\":\"1732\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1733\",\"type\":\"Line\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1776\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1745\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1747\"},\"nonselection_glyph\":{\"id\":\"1746\"},\"view\":{\"id\":\"1749\"}},\"id\":\"1748\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1732\"},\"glyph\":{\"id\":\"1733\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1735\"},\"nonselection_glyph\":{\"id\":\"1734\"},\"view\":{\"id\":\"1737\"}},\"id\":\"1736\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2035\"},\"selection_policy\":{\"id\":\"2034\"}},\"id\":\"1958\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1734\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1738\"},\"glyph\":{\"id\":\"1739\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1741\"},\"nonselection_glyph\":{\"id\":\"1740\"},\"view\":{\"id\":\"1743\"}},\"id\":\"1742\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2116\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1732\"}},\"id\":\"1737\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1739\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2117\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1746\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1738\"}},\"id\":\"1743\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1740\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1761\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1745\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1773\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2130\"},\"selection_policy\":{\"id\":\"2129\"}},\"id\":\"1750\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1749\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1751\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1753\",\"type\":\"Line\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1756\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1750\"},\"glyph\":{\"id\":\"1751\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1753\"},\"nonselection_glyph\":{\"id\":\"1752\"},\"view\":{\"id\":\"1755\"}},\"id\":\"1754\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1759\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1752\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2118\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1785\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1750\"}},\"id\":\"1755\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2119\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2138\"},\"selection_policy\":{\"id\":\"2137\"}},\"id\":\"1758\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1960\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1766\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1760\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1961\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2039\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2140\"},\"selection_policy\":{\"id\":\"2139\"}},\"id\":\"1770\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1767\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1963\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2040\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1769\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1772\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1789\"}],\"center\":[{\"id\":\"1792\"},{\"id\":\"1796\"},{\"id\":\"1857\"}],\"height\":200,\"left\":[{\"id\":\"1793\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1848\"},{\"id\":\"1867\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"}],\"title\":{\"id\":\"1779\"},\"toolbar\":{\"id\":\"1804\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1781\"},\"x_scale\":{\"id\":\"1785\"},\"y_range\":{\"id\":\"1783\"},\"y_scale\":{\"id\":\"1787\"}},\"id\":\"1778\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1964\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1770\"}},\"id\":\"1775\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1783\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2120\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2049\"},\"group\":null,\"major_label_policy\":{\"id\":\"2050\"},\"ticker\":{\"id\":\"1790\"},\"visible\":false},\"id\":\"1789\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2046\"},\"group\":null,\"major_label_policy\":{\"id\":\"2047\"},\"ticker\":{\"id\":\"1794\"},\"visible\":false},\"id\":\"1793\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2121\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1798\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1789\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1792\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1779\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1790\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1793\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1796\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1822\"}],\"center\":[{\"id\":\"1825\"},{\"id\":\"1829\"},{\"id\":\"1860\"}],\"height\":200,\"left\":[{\"id\":\"1826\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1812\"},\"toolbar\":{\"id\":\"1837\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1814\"},\"x_scale\":{\"id\":\"1818\"},\"y_range\":{\"id\":\"1816\"},\"y_scale\":{\"id\":\"1820\"}},\"id\":\"1811\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2142\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1794\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2143\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1802\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1797\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1803\"}},\"id\":\"1799\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1801\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1803\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1797\"},{\"id\":\"1798\"},{\"id\":\"1799\"},{\"id\":\"1800\"},{\"id\":\"1801\"},{\"id\":\"1802\"}]},\"id\":\"1804\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"1243\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2002\"},\"selection_policy\":{\"id\":\"2001\"}},\"id\":\"1945\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1501\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1911\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1252\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2004\"},\"selection_policy\":{\"id\":\"2003\"}},\"id\":\"1946\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1907\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1250\",\"type\":\"Slider\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2020\"},\"selection_policy\":{\"id\":\"2019\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"width\":200},\"id\":\"1923\",\"type\":\"Spacer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":40.0},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1480\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1161\"}},\"id\":\"1166\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2006\"},\"selection_policy\":{\"id\":\"2005\"}},\"id\":\"1947\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1912\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1249\",\"type\":\"Slider\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1251\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"2001\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2031\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"height\":10},\"id\":\"1919\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2002\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1918\"},{\"id\":\"1920\"}]},\"id\":\"1921\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1958\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1253\",\"type\":\"Div\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"1919\"},{\"id\":\"1256\"},{\"id\":\"1290\"},{\"id\":\"1322\"}]},\"id\":\"1920\",\"type\":\"Column\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[60.0]},\"selected\":{\"id\":\"2026\"},\"selection_policy\":{\"id\":\"2025\"}},\"id\":\"1167\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2032\",\"type\":\"Selection\"},{\"attributes\":{\"width\":200},\"id\":\"1924\",\"type\":\"Spacer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2008\"},\"selection_policy\":{\"id\":\"2007\"}},\"id\":\"1948\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1255\",\"type\":\"Div\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1167\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"width\":200},\"id\":\"1925\",\"type\":\"Spacer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1478\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":40.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1281\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2003\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1910\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1254\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1499\",\"type\":\"ResetTool\"},{\"attributes\":{\"below\":[{\"id\":\"1266\"}],\"center\":[{\"id\":\"1269\"},{\"id\":\"1273\"}],\"height\":160,\"left\":[{\"id\":\"1270\"}],\"renderers\":[{\"id\":\"1358\"},{\"id\":\"1364\"},{\"id\":\"1394\"}],\"title\":{\"id\":\"1257\"},\"toolbar\":{\"id\":\"1282\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1262\"},\"y_range\":{\"id\":\"1260\"},\"y_scale\":{\"id\":\"1264\"}},\"id\":\"1256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":40.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1500\",\"type\":\"HelpTool\"},{\"attributes\":{\"children\":[{\"id\":\"1778\"},{\"id\":\"1443\"},{\"id\":\"1408\"},{\"id\":\"1511\"},{\"id\":\"1477\"},{\"id\":\"1580\"}]},\"id\":\"1922\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2010\"},\"selection_policy\":{\"id\":\"2009\"}},\"id\":\"1949\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1167\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2004\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1260\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[40.0]},\"selected\":{\"id\":\"2028\"},\"selection_policy\":{\"id\":\"2027\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1262\",\"type\":\"LinearScale\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"axis\":{\"id\":\"1266\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1269\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2157\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1257\",\"type\":\"Title\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2012\"},\"selection_policy\":{\"id\":\"2011\"}},\"id\":\"1950\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1264\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2005\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1921\"},{\"id\":\"1928\"}]},\"id\":\"1929\",\"type\":\"Column\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1275\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1963\"},\"group\":null,\"major_label_policy\":{\"id\":\"1964\"},\"ticker\":{\"id\":\"1267\"},\"visible\":false},\"id\":\"1266\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2006\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2158\",\"type\":\"Selection\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2099\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1267\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2159\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1929\"}]},\"id\":\"1930\",\"type\":\"Row\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1588\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1960\"},\"group\":null,\"major_label_policy\":{\"id\":\"1961\"},\"ticker\":{\"id\":\"1271\"}},\"id\":\"1270\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[20.0]},\"selected\":{\"id\":\"2030\"},\"selection_policy\":{\"id\":\"2029\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1581\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1270\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1273\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2007\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1271\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2100\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2160\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2008\",\"type\":\"Selection\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1274\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1517\",\"type\":\"LinearScale\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{\"overlay\":{\"id\":\"1280\"}},\"id\":\"1276\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1278\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2009\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"BasicTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"1495\"},{\"id\":\"1496\"},{\"id\":\"1497\"},{\"id\":\"1498\"},{\"id\":\"1499\"},{\"id\":\"1500\"},{\"id\":\"1502\"}]},\"id\":\"1503\",\"type\":\"Toolbar\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1280\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2010\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1856\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1966\"},\"group\":null,\"major_label_policy\":{\"id\":\"1967\"},\"ticker\":{\"id\":\"1303\"}},\"id\":\"1302\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2011\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2101\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"1995\"},\"selection_policy\":{\"id\":\"1994\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1991\"},\"selection_policy\":{\"id\":\"1990\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2012\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2102\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1200\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1514\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1312\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1302\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1305\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1521\"}],\"center\":[{\"id\":\"1524\"},{\"id\":\"1528\"}],\"height\":200,\"left\":[{\"id\":\"1525\"}],\"renderers\":[{\"id\":\"1762\"},{\"id\":\"1768\"},{\"id\":\"1774\"}],\"title\":{\"id\":\"1512\"},\"toolbar\":{\"id\":\"1537\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1514\"},\"x_scale\":{\"id\":\"1517\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1519\"}},\"id\":\"1511\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1200\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1536\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1993\"},\"selection_policy\":{\"id\":\"1992\"}},\"id\":\"1200\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1313\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1969\"},\"group\":null,\"major_label_policy\":{\"id\":\"1970\"},\"ticker\":{\"id\":\"1299\"},\"visible\":false},\"id\":\"1298\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1512\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2046\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1221\",\"type\":\"VeeHead\"},{\"attributes\":{\"overlay\":{\"id\":\"1312\"}},\"id\":\"1308\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1521\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1524\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1218\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1945\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1219\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2161\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1519\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2047\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2162\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2066\"},\"group\":null,\"major_label_policy\":{\"id\":\"2067\"},\"ticker\":{\"id\":\"1776\"}},\"id\":\"1521\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1583\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2034\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2049\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"tools\":[{\"id\":\"1274\"},{\"id\":\"1275\"},{\"id\":\"1276\"},{\"id\":\"1277\"},{\"id\":\"1278\"},{\"id\":\"1279\"},{\"id\":\"1281\"}]},\"id\":\"1282\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1218\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2064\"},\"group\":null,\"major_label_policy\":{\"id\":\"2065\"},\"ticker\":{\"id\":\"1526\"},\"visible\":false},\"id\":\"1525\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1525\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1528\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2035\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2050\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1949\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1221\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1946\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1222\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2036\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2103\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1950\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1534\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1947\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1529\",\"type\":\"PanTool\"},{\"attributes\":{\"below\":[{\"id\":\"1590\"}],\"center\":[{\"id\":\"1593\"},{\"id\":\"1597\"}],\"height\":200,\"renderers\":[{\"id\":\"1706\"},{\"id\":\"1712\"},{\"id\":\"1718\"}],\"right\":[{\"id\":\"1594\"}],\"title\":{\"id\":\"1581\"},\"toolbar\":{\"id\":\"1606\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1583\"},\"x_scale\":{\"id\":\"1586\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1588\"}},\"id\":\"1580\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2037\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1948\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1292\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"1535\"}},\"id\":\"1531\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1298\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1301\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1532\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2104\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1238\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1586\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1298\"}],\"center\":[{\"id\":\"1301\"},{\"id\":\"1305\"}],\"height\":160,\"left\":[{\"id\":\"1302\"}],\"renderers\":[{\"id\":\"1370\"},{\"id\":\"1376\"},{\"id\":\"1400\"}],\"title\":{\"id\":\"1935\"},\"toolbar\":{\"id\":\"1314\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1294\"},\"y_range\":{\"id\":\"1292\"},\"y_scale\":{\"id\":\"1296\"}},\"id\":\"1290\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1243\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1294\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"1997\"},\"selection_policy\":{\"id\":\"1996\"}},\"id\":\"1236\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2124\"},\"selection_policy\":{\"id\":\"2123\"}},\"id\":\"2051\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1236\"},\"glyph\":{\"id\":\"1238\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1240\"},\"nonselection_glyph\":{\"id\":\"1239\"},\"view\":{\"id\":\"1242\"}},\"id\":\"1241\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1311\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1535\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1330\"}],\"center\":[{\"id\":\"1333\"},{\"id\":\"1337\"}],\"height\":200,\"left\":[{\"id\":\"1334\"}],\"renderers\":[{\"id\":\"1382\"},{\"id\":\"1388\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"1937\"},\"toolbar\":{\"id\":\"1346\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1326\"},\"y_range\":{\"id\":\"1324\"},\"y_scale\":{\"id\":\"1328\"}},\"id\":\"1322\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1239\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2128\"},\"selection_policy\":{\"id\":\"2127\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1296\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1556\"}],\"center\":[{\"id\":\"1559\"},{\"id\":\"1563\"}],\"height\":200,\"left\":[{\"id\":\"1560\"}],\"renderers\":[{\"id\":\"1688\"},{\"id\":\"1694\"},{\"id\":\"1700\"}],\"title\":{\"id\":\"1546\"},\"toolbar\":{\"id\":\"1572\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1548\"},\"x_scale\":{\"id\":\"1552\"},\"y_range\":{\"id\":\"1550\"},\"y_scale\":{\"id\":\"1554\"}},\"id\":\"1545\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1240\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"1999\"},\"selection_policy\":{\"id\":\"1998\"}},\"id\":\"1243\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1306\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2013\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1236\"}},\"id\":\"1242\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Scatter\"},{\"attributes\":{\"tools\":[{\"id\":\"1564\"},{\"id\":\"1565\"},{\"id\":\"1566\"},{\"id\":\"1567\"},{\"id\":\"1568\"},{\"id\":\"1569\"},{\"id\":\"1571\"}]},\"id\":\"1572\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2014\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-9.75]},\"selected\":{\"id\":\"2024\"},\"selection_policy\":{\"id\":\"2023\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2102\"},\"selection_policy\":{\"id\":\"2101\"}},\"id\":\"1101\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1604\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1104\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2149\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1691\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1693\"},\"nonselection_glyph\":{\"id\":\"1692\"},\"view\":{\"id\":\"1695\"}},\"id\":\"1694\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2150\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2145\"},\"selection_policy\":{\"id\":\"2144\"}},\"id\":\"1678\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam with deflection under uniform load\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1103\",\"type\":\"Rect\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1087\"},{\"id\":\"1093\"},{\"id\":\"1099\"},{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1186\"},{\"id\":\"1897\"},{\"id\":\"1903\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1908\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1677\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"1107\",\"type\":\"Div\"},{\"attributes\":{\"end\":90.0,\"start\":-40.0},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1110\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1101\"},\"glyph\":{\"id\":\"1102\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1104\"},\"nonselection_glyph\":{\"id\":\"1103\"},\"view\":{\"id\":\"1106\"}},\"id\":\"1105\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1678\"},\"glyph\":{\"id\":\"1679\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1681\"},\"nonselection_glyph\":{\"id\":\"1680\"},\"view\":{\"id\":\"1683\"}},\"id\":\"1682\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"1052\"}],\"center\":[{\"id\":\"1055\"},{\"id\":\"1059\"},{\"id\":\"1111\"},{\"id\":\"1120\"}],\"left\":[{\"id\":\"1056\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1078\"},{\"id\":\"1105\"},{\"id\":\"1117\"},{\"id\":\"1126\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1067\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1048\"},\"y_range\":{\"id\":\"1046\"},\"y_scale\":{\"id\":\"1050\"}},\"id\":\"1041\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1101\"}},\"id\":\"1106\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1909\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1109\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1110\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2017\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1111\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1615\",\"type\":\"Title\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1125\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1122\"}},\"id\":\"1127\",\"type\":\"CDSView\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"1989\"},\"selection_policy\":{\"id\":\"1988\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2104\"},\"selection_policy\":{\"id\":\"2103\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1639\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1122\"},\"glyph\":{\"id\":\"1123\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1125\"},\"nonselection_glyph\":{\"id\":\"1124\"},\"view\":{\"id\":\"1127\"}},\"id\":\"1126\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2106\"},\"selection_policy\":{\"id\":\"2105\"}},\"id\":\"1122\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1625\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"1987\"},\"selection_policy\":{\"id\":\"1986\"}},\"id\":\"1161\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1139\"}],\"center\":[{\"id\":\"1142\"},{\"id\":\"1146\"},{\"id\":\"1219\"},{\"id\":\"1222\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"}],\"height\":200,\"left\":[{\"id\":\"1143\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1165\"},{\"id\":\"1192\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1241\"},{\"id\":\"1247\"}],\"title\":{\"id\":\"1129\"},\"toolbar\":{\"id\":\"1154\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1131\"},\"x_scale\":{\"id\":\"1135\"},\"y_range\":{\"id\":\"1133\"},\"y_scale\":{\"id\":\"1137\"}},\"id\":\"1128\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2075\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1617\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"1598\"},{\"id\":\"1599\"},{\"id\":\"1600\"},{\"id\":\"1601\"},{\"id\":\"1602\"},{\"id\":\"1603\"},{\"id\":\"1605\"}]},\"id\":\"1606\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2076\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1943\"},\"group\":null,\"major_label_policy\":{\"id\":\"1944\"},\"ticker\":{\"id\":\"1140\"},\"visible\":false},\"id\":\"1139\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1940\"},\"group\":null,\"major_label_policy\":{\"id\":\"1941\"},\"ticker\":{\"id\":\"1144\"},\"visible\":false},\"id\":\"1143\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1624\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1627\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2078\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1139\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1142\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1636\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1620\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2079\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1129\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1633\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1143\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1146\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1622\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2097\"},\"group\":null,\"major_label_policy\":{\"id\":\"2098\"},\"ticker\":{\"id\":\"1625\"}},\"id\":\"1624\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2152\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Rect\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2094\"},\"group\":null,\"major_label_policy\":{\"id\":\"2095\"},\"ticker\":{\"id\":\"1629\"}},\"id\":\"1628\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2153\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1628\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1631\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1629\",\"type\":\"BasicTicker\"},{\"attributes\":{\"overlay\":{\"id\":\"1153\"}},\"id\":\"1149\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1637\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1632\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1153\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"overlay\":{\"id\":\"1638\"}},\"id\":\"1634\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1635\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1655\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1657\"},\"nonselection_glyph\":{\"id\":\"1656\"},\"view\":{\"id\":\"1659\"}},\"id\":\"1658\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Patch\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1638\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2154\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Patch\"},{\"attributes\":{\"tools\":[{\"id\":\"1632\"},{\"id\":\"1633\"},{\"id\":\"1634\"},{\"id\":\"1635\"},{\"id\":\"1636\"},{\"id\":\"1637\"},{\"id\":\"1639\"}]},\"id\":\"1640\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2155\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1986\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1987\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1758\"}},\"id\":\"1763\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1161\"},\"glyph\":{\"id\":\"1162\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1164\"},\"nonselection_glyph\":{\"id\":\"1163\"},\"view\":{\"id\":\"1166\"}},\"id\":\"1165\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1758\"},\"glyph\":{\"id\":\"1759\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1761\"},\"nonselection_glyph\":{\"id\":\"1760\"},\"view\":{\"id\":\"1763\"}},\"id\":\"1762\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1674\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2081\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2082\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"},{\"id\":\"1152\"}]},\"id\":\"1154\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1673\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1675\"},\"nonselection_glyph\":{\"id\":\"1674\"},\"view\":{\"id\":\"1677\"}},\"id\":\"1676\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2084\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1488\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1487\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1490\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2069\"},\"group\":null,\"major_label_policy\":{\"id\":\"2070\"},\"ticker\":{\"id\":\"1492\"},\"visible\":false},\"id\":\"1491\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2023\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2024\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2132\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1449\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2133\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1765\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1767\"},\"nonselection_glyph\":{\"id\":\"1766\"},\"view\":{\"id\":\"1769\"}},\"id\":\"1768\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1427\"},{\"id\":\"1428\"},{\"id\":\"1429\"},{\"id\":\"1430\"},{\"id\":\"1431\"},{\"id\":\"1432\"},{\"id\":\"1434\"}]},\"id\":\"1435\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2025\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1446\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2026\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1468\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1465\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1444\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1453\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1456\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1451\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2055\"},\"group\":null,\"major_label_policy\":{\"id\":\"2056\"},\"ticker\":{\"id\":\"1756\"}},\"id\":\"1453\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2134\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2053\"},\"group\":null,\"major_label_policy\":{\"id\":\"2054\"},\"ticker\":{\"id\":\"1458\"},\"visible\":false},\"id\":\"1457\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1457\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1460\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2135\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1458\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1466\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2027\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1461\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1467\"}},\"id\":\"1463\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2028\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"SaveTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1467\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1487\"}],\"center\":[{\"id\":\"1490\"},{\"id\":\"1494\"}],\"height\":200,\"left\":[{\"id\":\"1491\"}],\"renderers\":[{\"id\":\"1670\"},{\"id\":\"1676\"},{\"id\":\"1682\"}],\"title\":{\"id\":\"1478\"},\"toolbar\":{\"id\":\"1503\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1480\"},\"x_scale\":{\"id\":\"1483\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1485\"}},\"id\":\"1477\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"tools\":[{\"id\":\"1461\"},{\"id\":\"1462\"},{\"id\":\"1463\"},{\"id\":\"1464\"},{\"id\":\"1465\"},{\"id\":\"1466\"},{\"id\":\"1468\"}]},\"id\":\"1469\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2072\"},\"group\":null,\"major_label_policy\":{\"id\":\"2073\"},\"ticker\":{\"id\":\"1488\"}},\"id\":\"1487\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2112\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2029\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2113\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2030\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1483\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2094\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1386\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2095\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1391\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1393\"},\"nonselection_glyph\":{\"id\":\"1392\"},\"view\":{\"id\":\"1395\"}},\"id\":\"1394\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1966\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2097\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1392\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1967\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2098\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1969\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1491\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1494\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1996\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1970\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1997\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2015\"},\"group\":null,\"major_label_policy\":{\"id\":\"2016\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1052\",\"type\":\"LinearAxis\"},{\"attributes\":{\"overlay\":{\"id\":\"1066\"}},\"id\":\"1062\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1052\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1055\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1065\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2013\"},\"group\":null,\"major_label_policy\":{\"id\":\"2014\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1056\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1975\"},\"group\":null,\"major_label_policy\":{\"id\":\"1976\"},\"ticker\":{\"id\":\"1331\"}},\"id\":\"1330\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Rect\"},{\"attributes\":{\"line_color\":\"gray\",\"line_width\":1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1324\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"ResetTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1306\"},{\"id\":\"1307\"},{\"id\":\"1308\"},{\"id\":\"1309\"},{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1313\"}]},\"id\":\"1314\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1998\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1326\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1066\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2042\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1119\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2018\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1120\",\"type\":\"Arrow\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1345\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1999\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1328\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2043\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1331\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1119\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1330\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1333\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1334\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1337\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1972\"},\"group\":null,\"major_label_policy\":{\"id\":\"1973\"},\"ticker\":{\"id\":\"1335\"}},\"id\":\"1334\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1338\"},{\"id\":\"1339\"},{\"id\":\"1340\"},{\"id\":\"1341\"},{\"id\":\"1342\"},{\"id\":\"1343\"},{\"id\":\"1345\"}]},\"id\":\"1346\",\"type\":\"Toolbar\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1335\",\"type\":\"BasicTicker\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1338\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1344\"}},\"id\":\"1340\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1972\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1342\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1973\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1975\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1344\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"interval\":50},\"id\":\"1080\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{},\"id\":\"1976\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1084\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1086\"},\"nonselection_glyph\":{\"id\":\"1085\"},\"view\":{\"id\":\"1088\"}},\"id\":\"1087\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1385\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1387\"},\"nonselection_glyph\":{\"id\":\"1386\"},\"view\":{\"id\":\"1389\"}},\"id\":\"1388\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"},{\"id\":\"1065\"}]},\"id\":\"1067\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1387\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1088\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1393\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-16.88749537379655,-16.88749537379655]},\"selected\":{\"id\":\"2022\"},\"selection_policy\":{\"id\":\"2021\"}},\"id\":\"1089\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1389\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1089\"}},\"id\":\"1094\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1391\",\"type\":\"Circle\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1086\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1092\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1089\"},\"glyph\":{\"id\":\"1090\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1092\"},\"nonselection_glyph\":{\"id\":\"1091\"},\"view\":{\"id\":\"1094\"}},\"id\":\"1093\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1361\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1363\"},\"nonselection_glyph\":{\"id\":\"1362\"},\"view\":{\"id\":\"1365\"}},\"id\":\"1364\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1935\",\"type\":\"Title\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1649\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2133\"},\"selection_policy\":{\"id\":\"2132\"}},\"id\":\"1648\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1937\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1648\"},\"glyph\":{\"id\":\"1649\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1651\"},\"nonselection_glyph\":{\"id\":\"1650\"},\"view\":{\"id\":\"1653\"}},\"id\":\"1652\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1651\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1656\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2164\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1648\"}},\"id\":\"1653\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1650\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2143\"},\"selection_policy\":{\"id\":\"2142\"}},\"id\":\"1666\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2165\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1680\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2135\"},\"selection_policy\":{\"id\":\"2134\"}},\"id\":\"1660\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1657\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2144\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1659\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2145\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1679\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1660\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2064\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1666\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1660\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2065\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1685\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2066\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1666\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1678\"}},\"id\":\"1683\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2067\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1691\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2166\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1684\"},\"glyph\":{\"id\":\"1685\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1687\"},\"nonselection_glyph\":{\"id\":\"1686\"},\"view\":{\"id\":\"1689\"}},\"id\":\"1688\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2160\"},\"selection_policy\":{\"id\":\"2159\"}},\"id\":\"1684\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1686\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2167\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1684\"}},\"id\":\"1689\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2148\"},\"selection_policy\":{\"id\":\"2147\"}},\"id\":\"1702\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1692\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2162\"},\"selection_policy\":{\"id\":\"2161\"}},\"id\":\"1696\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1695\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1697\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1699\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1709\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1711\"},\"nonselection_glyph\":{\"id\":\"1710\"},\"view\":{\"id\":\"1713\"}},\"id\":\"1712\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1696\"},\"glyph\":{\"id\":\"1697\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1699\"},\"nonselection_glyph\":{\"id\":\"1698\"},\"view\":{\"id\":\"1701\"}},\"id\":\"1700\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2147\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1705\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1698\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1702\"},\"glyph\":{\"id\":\"1703\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1705\"},\"nonselection_glyph\":{\"id\":\"1704\"},\"view\":{\"id\":\"1707\"}},\"id\":\"1706\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2148\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1940\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1696\"}},\"id\":\"1701\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1941\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1710\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1702\"}},\"id\":\"1707\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1704\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1943\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1944\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2069\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2150\"},\"selection_policy\":{\"id\":\"2149\"}},\"id\":\"1714\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1711\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2070\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1713\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1720\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2072\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1714\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2073\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1714\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2165\"},\"selection_policy\":{\"id\":\"2164\"}},\"id\":\"1720\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1845\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1847\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1603\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2115\"},\"selection_policy\":{\"id\":\"2114\"}},\"id\":\"1862\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1988\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1846\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1859\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2086\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1860\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1856\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2051\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1857\",\"type\":\"Arrow\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1864\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1927\"}]},\"id\":\"1928\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1989\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1862\"},\"glyph\":{\"id\":\"1864\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1866\"},\"nonselection_glyph\":{\"id\":\"1865\"},\"view\":{\"id\":\"1868\"}},\"id\":\"1867\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2117\"},\"selection_policy\":{\"id\":\"2116\"}},\"id\":\"1869\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1859\",\"type\":\"VeeHead\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1865\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1866\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1862\"}},\"id\":\"1868\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1831\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1548\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1869\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1529\"},{\"id\":\"1530\"},{\"id\":\"1531\"},{\"id\":\"1532\"},{\"id\":\"1533\"},{\"id\":\"1534\"},{\"id\":\"1536\"}]},\"id\":\"1537\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Scatter\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1554\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2119\"},\"selection_policy\":{\"id\":\"2118\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1550\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1869\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2084\"},\"group\":null,\"major_label_policy\":{\"id\":\"2085\"},\"ticker\":{\"id\":\"1823\"},\"visible\":false},\"id\":\"1822\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1557\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1546\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1990\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1814\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1556\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1559\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1552\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1991\",\"type\":\"Selection\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2091\"},\"group\":null,\"major_label_policy\":{\"id\":\"2092\"},\"ticker\":{\"id\":\"1557\"}},\"id\":\"1556\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2121\"},\"selection_policy\":{\"id\":\"2120\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1571\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1816\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1565\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2081\"},\"group\":null,\"major_label_policy\":{\"id\":\"2082\"},\"ticker\":{\"id\":\"1827\"},\"visible\":false},\"id\":\"1826\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2088\"},\"group\":null,\"major_label_policy\":{\"id\":\"2089\"},\"ticker\":{\"id\":\"1561\"},\"visible\":false},\"id\":\"1560\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1818\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1560\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1563\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"2155\"},\"selection_policy\":{\"id\":\"2154\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1561\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{\"axis\":{\"id\":\"1822\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1825\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1812\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1569\",\"type\":\"HelpTool\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1823\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1564\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1900\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1902\"},\"nonselection_glyph\":{\"id\":\"1901\"},\"view\":{\"id\":\"1904\"}},\"id\":\"1903\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1826\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1829\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1570\"}},\"id\":\"1566\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1893\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1844\"},\"glyph\":{\"id\":\"1845\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1847\"},\"nonselection_glyph\":{\"id\":\"1846\"},\"view\":{\"id\":\"1849\"}},\"id\":\"1848\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1568\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1896\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAIH3zwwQevPwgffPDBB78/RhdddNFFxz8IH3zwwQfPP2WTTTbZZNM/RhdddNFF1z8nm2yyySbbPwgffPDBB98/dNFFF1104T9lk0022WTjP1ZVVVVVVeU/RhdddNFF5z822WSTTTbpPyebbLLJJus/GF100UUX7T8IH3zwwQfvP3zwwQcffPA/dNFFF1108T9tsskmm2zyP2WTTTbZZPM/XXTRRRdd9D9WVVVVVVX1P0422WSTTfY/RhdddNFF9z8++OCDDz74PzbZZJNNNvk/L7rooosu+j8nm2yyySb7Px988MEHH/w/GF100UUX/T8QPvjggw/+PwgffPDBB/8/AAAAAAAAAEB88MEHH3wAQPjggw8++ABAdNFFF110AUDxwQcffPABQG2yySabbAJA6aKLLrroAkBlk0022WQDQOGDDz744ANAXXTRRRddBEDZZJNNNtkEQFZVVVVVVQVA0kUXXXTRBUBONtlkk00GQMomm2yyyQZARhdddNFFB0DCBx988MEHQD744IMPPghAuuiiiy66CEA22WSTTTYJQLPJJptssglAL7rooosuCkCrqqqqqqoKQCebbLLJJgtAo4suuuiiC0AffPDBBx8MQJtssskmmwxAGF100UUXDUCUTTbZZJMNQBA++OCDDw5AjC666KKLDkAIH3zwwQcPQIQPPvjggw9AAAAAAAAAEEA++OCDDz4QQHzwwQcffBBAuuiiiy66EED44IMPPvgQQDbZZJNNNhFAdNFFF110EUCzySabbLIRQPHBBx988BFAL7rooosuEkBtsskmm2wSQKuqqqqqqhJA6aKLLrroEkAnm2yyySYTQGWTTTbZZBNAo4suuuiiE0Dhgw8++OATQB988MEHHxRAXXTRRRddFECbbLLJJpsUQNlkk0022RRAF1100UUXFUBWVVVVVVUVQJRNNtlkkxVA0kUXXXTRFUAQPvjggw8WQE422WSTTRZAjC666KKLFkDKJptssskWQAgffPDBBxdARhdddNFFF0CEDz744IMXQMIHH3zwwRdAAAAAAAAAGEA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"AAAAAAAAAIDANQOd8vDEv54GUi+07dS/ySOLxIFc378kzx0V4uDkv6t2Mzs3Deq/uqmCXMIx77+h9wD/hibyv+wZ0ZDWrvS/32Qnox0x979vtPYzrqz5v2QXr3/eIPy/Ws89AQmN/r9kqAY5RngAwHqhAuVlpQHA+j/FH5fNAsBgir+jj/ADwIsgoUoHDgXAyTtYDbglBsDSrhEEXjcHwMXlOGa3QgjALuZ3ioRHCcAET7fmh0UKwKVYHhCGPAvA3dQSu0UsDMDgLjm7jxQNwE1rdAMv9Q3ALijmpfDNDsD0nO7To54PwEBNFu+MMxDAjcU+GpOTEMA4uf4yT+8QwNF2gxCtRhHAmZmZmZmZEcCNCa3EAugRwFf7yJfXMRLAXfCXKAh3EsCztmOchbcSwCtpFShC8xLARG81EDEqE8A0feuoRlwTwOqT/lV4iRPACgHViryxE8DlXnTKCtUTwIuUgadb8xPAvdVAxKgMFMDwopXS7CAUwFHJApQjMBTAwGKq2Uk6FMDS1U2EXT8UwNHVTYRdPxTAwGKq2Uk6FMBQyQKUIzAUwPCildLsIBTAvdVAxKgMFMCLlIGnW/MTwONedMoK1RPACAHViryxE8Drk/5VeIkTwDN966hGXBPAQm81EDEqE8AqaRUoQvMSwLS2Y5yFtxLAW/CXKAh3EsBY+8iX1zESwI4JrcQC6BHAmZmZmZmZEcDPdoMQrUYRwDi5/jJP7xDAjcU+GpOTEMBCTRbvjDMQwPic7tOjng/ALijmpfDNDsBNa3QDL/UNwN4uObuPFA3A29QSu0UsDMCkWB4QhjwLwAJPt+aHRQrALOZ3ioRHCcDE5Thmt0IIwNKuEQReNwfAzDtYDbglBsCHIKFKBw4FwF2Kv6OP8APA+j/FH5fNAsB2oQLlZaUBwGSoBjlGeADAU889AQmN/r9mF69/3iD8v1609jOurPm/6WQnox0x97/dGdGQ1q70v573AP+GJvK/r6mCXMIx77+adjM7Nw3qvwDPHRXi4OS/xyOLxIFc37/nBlIvtO3Uv1g2A53y8MS/AAAAAAAAAIA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[100]}},\"selected\":{\"id\":\"2032\"},\"selection_policy\":{\"id\":\"2031\"}},\"id\":\"1893\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1992\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1894\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1827\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1570\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1900\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2078\"},\"group\":null,\"major_label_policy\":{\"id\":\"2079\"},\"ticker\":{\"id\":\"1591\"}},\"id\":\"1590\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1993\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1901\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1835\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1893\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1830\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1895\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1594\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1597\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1836\"}},\"id\":\"1832\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1904\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"SaveTool\"},{\"attributes\":{\"children\":[{\"id\":\"1922\"},{\"id\":\"1926\"}]},\"id\":\"1927\",\"type\":\"Column\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1902\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1834\",\"type\":\"ResetTool\"},{\"attributes\":{\"children\":[{\"id\":\"1811\"},{\"id\":\"1923\"},{\"id\":\"1545\"},{\"id\":\"1924\"},{\"id\":\"1925\"},{\"id\":\"1614\"}]},\"id\":\"1926\",\"type\":\"Row\"},{\"attributes\":{\"end\":300000.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1913\"}]},\"margin\":[5,5,0,5],\"start\":8000.0,\"step\":1000.0,\"title\":\"Change the elastic modulus [MPa]\",\"value\":200000.0},\"id\":\"1905\",\"type\":\"Slider\"},{\"attributes\":{\"margin\":[0,5,0,5],\"text\":\"\\n <p style='font-size:12px'>\\n E<sub>wood</sub> = 8 GPa; E<sub>concrete</sub> = 26 GPa<br>\\n E<sub>steel</sub> = 200 GPa; E<sub>ceramic</sub> = 300 GPa</p>\\n \"},\"id\":\"1906\",\"type\":\"Div\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2113\"},\"selection_policy\":{\"id\":\"2112\"}},\"id\":\"1844\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1595\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1836\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2075\"},\"group\":null,\"major_label_policy\":{\"id\":\"2076\"},\"ticker\":{\"id\":\"1595\"}},\"id\":\"1594\",\"type\":\"LinearAxis\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1670\"},\"N_stress_diag\":{\"id\":\"1652\"},\"V_stress_diag\":{\"id\":\"1688\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1718\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_deflection_beam(db, beam_defl)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=100) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1908\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1670\"},\"N_stress_diag\":{\"id\":\"1652\"},\"V_stress_diag\":{\"id\":\"1688\"},\"arr_head\":{\"id\":\"1247\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"neutral_axis\":{\"id\":\"1718\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \"},\"id\":\"1907\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1994\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1602\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1844\"}},\"id\":\"1849\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1995\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1670\"},\"N_stress_diag\":{\"id\":\"1652\"},\"V_stress_diag\":{\"id\":\"1688\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1718\"},\"s_b\":{\"id\":\"1003\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_deflection_beam(db, beam_defl)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=100) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1909\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1358\"},\"N_stress_diag\":{\"id\":\"1652\"},\"arr_head\":{\"id\":\"1247\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"neutral_axis\":{\"id\":\"1718\"},\"s_M\":{\"id\":\"1236\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=100) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1910\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1599\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1247\"},\"div_P\":{\"id\":\"1253\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1911\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1382\"},\"M_stress_diag\":{\"id\":\"1670\"},\"V_diag\":{\"id\":\"1370\"},\"V_stress_diag\":{\"id\":\"1688\"},\"arr_head\":{\"id\":\"1247\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"neutral_axis\":{\"id\":\"1718\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_deflection_beam(db, beam_defl)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=100) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1912\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1598\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2153\"},\"selection_policy\":{\"id\":\"2152\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1670\"},\"N_stress_diag\":{\"id\":\"1652\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"beam_defl\":{\"id\":\"1897\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"source\":{\"id\":\"1007\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const E = cb_obj.value\\n\\n // update E\\n db['E'][0] = E\\n\\n // update\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_deflection_beam(db, beam_defl)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function update_deflection_beam(data, glyph_beam, discr=100) {\\n const q = data['q'][0]\\n const E = data['E'][0]\\n const L = data['L'][0]\\n const Iy = data['Iy'][0]\\n \\n const x = linspace(0, L, discr)\\n const defl = new Array(discr)\\n for(var i = 0; i < discr; i++) {\\n defl[i] = compute_deflection_uniform_load(x[i], q, L, Iy, E)\\n }\\n \\n const source = glyph_beam.data_source\\n source.data.x = x\\n source.data.y = defl\\n source.change.emit()\\n }\\n \\n \\n function compute_deflection_uniform_load(x, q, L, Iy, E) {\\n return -q*x / (24*E*Iy) * (L**3-2*L*x**2+x**3)*1e12\\n }\\n \\n \"},\"id\":\"1913\",\"type\":\"CustomJS\"},{\"attributes\":{\"width\":10},\"id\":\"1914\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1591\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1605\",\"type\":\"HoverTool\"},{\"attributes\":{\"children\":[{\"id\":\"1128\"},{\"id\":\"1917\"}]},\"id\":\"1918\",\"type\":\"Column\"},{\"attributes\":{\"axis\":{\"id\":\"1590\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1593\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"1041\"},{\"id\":\"1914\"},{\"id\":\"1916\"}]},\"id\":\"1917\",\"type\":\"Row\"},{\"attributes\":{\"overlay\":{\"id\":\"1604\"}},\"id\":\"1600\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"height\":30},\"id\":\"1915\",\"type\":\"Spacer\"},{\"attributes\":{\"tools\":[{\"id\":\"1830\"},{\"id\":\"1831\"},{\"id\":\"1832\"},{\"id\":\"1833\"},{\"id\":\"1834\"},{\"id\":\"1835\"}]},\"id\":\"1837\",\"type\":\"Toolbar\"},{\"attributes\":{\"children\":[{\"id\":\"1915\"},{\"id\":\"1108\"},{\"id\":\"1109\"},{\"id\":\"1250\"},{\"id\":\"1249\"},{\"id\":\"1905\"},{\"id\":\"1906\"},{\"id\":\"1251\"},{\"id\":\"1252\"},{\"id\":\"1253\"},{\"id\":\"1254\"}]},\"id\":\"1916\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1601\",\"type\":\"SaveTool\"},{\"attributes\":{\"below\":[{\"id\":\"1624\"}],\"center\":[{\"id\":\"1627\"},{\"id\":\"1631\"}],\"height\":200,\"renderers\":[{\"id\":\"1724\"},{\"id\":\"1730\"},{\"id\":\"1736\"}],\"right\":[{\"id\":\"1628\"}],\"title\":{\"id\":\"1615\"},\"toolbar\":{\"id\":\"1640\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1617\"},\"x_scale\":{\"id\":\"1620\"},\"y_range\":{\"id\":\"1550\"},\"y_scale\":{\"id\":\"1622\"}},\"id\":\"1614\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2085\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2106\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2015\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2105\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2037\"},\"selection_policy\":{\"id\":\"2036\"}},\"id\":\"1354\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1354\"},\"glyph\":{\"id\":\"1355\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1357\"},\"nonselection_glyph\":{\"id\":\"1356\"},\"view\":{\"id\":\"1359\"}},\"id\":\"1358\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2016\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1357\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1354\"}},\"id\":\"1359\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2158\"},\"selection_policy\":{\"id\":\"2157\"}},\"id\":\"2086\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2109\"},\"selection_policy\":{\"id\":\"2108\"}},\"id\":\"2017\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2123\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1419\"}],\"center\":[{\"id\":\"1422\"},{\"id\":\"1426\"}],\"height\":200,\"left\":[{\"id\":\"1423\"}],\"renderers\":[{\"id\":\"1652\"},{\"id\":\"1658\"},{\"id\":\"1664\"}],\"title\":{\"id\":\"1409\"},\"toolbar\":{\"id\":\"1435\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1411\"},\"x_scale\":{\"id\":\"1415\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1417\"}},\"id\":\"1408\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-12.0,-11.757575757575758,-11.515151515151516,-11.272727272727273,-11.030303030303031,-10.787878787878787,-10.545454545454545,-10.303030303030303,-10.06060606060606,-9.818181818181818,-9.575757575757576,-9.333333333333332,-9.09090909090909,-8.848484848484848,-8.606060606060606,-8.363636363636363,-8.121212121212121,-7.878787878787879,-7.636363636363637,-7.393939393939394,-7.151515151515151,-6.909090909090909,-6.666666666666666,-6.424242424242424,-6.181818181818182,-5.9393939393939394,-5.696969696969697,-5.454545454545454,-5.212121212121212,-4.96969696969697,-4.727272727272727,-4.484848484848484,-4.242424242424242,-4.0,-3.757575757575758,-3.5151515151515156,-3.2727272727272734,-3.0303030303030294,-2.787878787878787,-2.545454545454545,-2.3030303030303028,-2.0606060606060606,-1.8181818181818183,-1.5757575757575761,-1.3333333333333321,-1.09090909090909,-0.8484848484848477,-0.6060606060606055,-0.3636363636363633,-0.1212121212121211,0.1212121212121211,0.3636363636363633,0.6060606060606055,0.8484848484848495,1.0909090909090917,1.333333333333334,1.5757575757575761,1.8181818181818183,2.0606060606060606,2.3030303030303028,2.5454545454545467,2.787878787878789,3.030303030303031,3.2727272727272734,3.5151515151515156,3.757575757575758,4.0,4.242424242424242,4.484848484848484,4.727272727272727,4.969696969696969,5.212121212121211,5.454545454545453,5.696969696969699,5.939393939393941,6.181818181818183,6.424242424242426,6.666666666666668,6.90909090909091,7.151515151515152,7.3939393939393945,7.636363636363637,7.878787878787879,8.121212121212121,8.363636363636363,8.606060606060606,8.848484848484848,9.09090909090909,9.333333333333336,9.575757575757578,9.81818181818182,10.060606060606062,10.303030303030305,10.545454545454547,10.787878787878789,11.030303030303031,11.272727272727273,11.515151515151516,11.757575757575758,12.0,0]},\"selected\":{\"id\":\"2040\"},\"selection_policy\":{\"id\":\"2039\"}},\"id\":\"1366\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2124\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1365\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2111\"},\"selection_policy\":{\"id\":\"2110\"}},\"id\":\"2018\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1367\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1374\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1373\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1375\"},\"nonselection_glyph\":{\"id\":\"1374\"},\"view\":{\"id\":\"1377\"}},\"id\":\"1376\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2053\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2126\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1366\"},\"glyph\":{\"id\":\"1367\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1369\"},\"nonselection_glyph\":{\"id\":\"1368\"},\"view\":{\"id\":\"1371\"}},\"id\":\"1370\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1366\"}},\"id\":\"1371\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1368\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2054\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2055\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1373\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-0.0,-0.7199265381083563,-1.4251606978879707,-2.115702479338843,-2.7915518824609737,-3.452708907254362,-4.099173553719009,-4.730945821854913,-5.348025711662076,-5.950413223140496,-6.5381083562901745,-7.111111111111112,-7.669421487603306,-8.213039485766759,-8.74196510560147,-9.25619834710744,-9.755739210284665,-10.240587695133149,-10.710743801652892,-11.166207529843895,-11.606978879706153,-12.03305785123967,-12.444444444444445,-12.841138659320476,-13.223140495867767,-13.590449954086317,-13.943067033976122,-14.28099173553719,-14.604224058769512,-14.912764003673093,-15.206611570247935,-15.485766758494032,-15.750229568411386,-16.0,-16.235078053259873,-16.455463728191,-16.661157024793386,-16.852157943067034,-17.02846648301194,-17.1900826446281,-17.33700642791552,-17.469237832874196,-17.58677685950413,-17.689623507805326,-17.77777777777778,-17.85123966942149,-17.910009182736456,-17.95408631772268,-17.983471074380166,-17.99816345270891,-17.99816345270891,-17.983471074380166,-17.95408631772268,-17.910009182736456,-17.85123966942149,-17.77777777777778,-17.689623507805326,-17.58677685950413,-17.469237832874196,-17.33700642791552,-17.1900826446281,-17.028466483011936,-16.852157943067034,-16.661157024793386,-16.455463728191,-16.235078053259873,-16.0,-15.750229568411386,-15.485766758494032,-15.206611570247935,-14.912764003673095,-14.604224058769514,-14.280991735537192,-13.943067033976122,-13.590449954086315,-13.223140495867765,-12.841138659320475,-12.444444444444443,-12.033057851239668,-11.606978879706151,-11.166207529843893,-10.710743801652892,-10.240587695133149,-9.755739210284665,-9.25619834710744,-8.741965105601471,-8.21303948576676,-7.669421487603308,-7.111111111111105,-6.538108356290169,-5.950413223140491,-5.348025711662071,-4.730945821854909,-4.099173553719005,-3.452708907254359,-2.791551882460971,-2.1157024793388413,-1.4251606978879694,-0.7199265381083556,0.0,0]},\"selected\":{\"id\":\"2043\"},\"selection_policy\":{\"id\":\"2042\"}},\"id\":\"1378\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2056\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1377\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1379\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2108\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1381\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1395\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2127\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1378\"},\"glyph\":{\"id\":\"1379\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1381\"},\"nonselection_glyph\":{\"id\":\"1380\"},\"view\":{\"id\":\"1383\"}},\"id\":\"1382\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2109\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1378\"}},\"id\":\"1383\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1380\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1502\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2088\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2110\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2089\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1496\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2111\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2091\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{\"overlay\":{\"id\":\"1501\"}},\"id\":\"1497\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2092\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2019\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2129\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1956\"},\"group\":null,\"major_label_policy\":{\"id\":\"1957\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2020\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2130\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2100\"},\"selection_policy\":{\"id\":\"2099\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1420\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Deflection [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1953\"},\"group\":null,\"major_label_policy\":{\"id\":\"1954\"},\"ticker\":{\"id\":\"1024\"},\"visible\":true},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1409\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":1,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1419\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1422\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1056\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1059\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2061\"},\"group\":null,\"major_label_policy\":{\"id\":\"2062\"},\"ticker\":{\"id\":\"1420\"}},\"id\":\"1419\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2058\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1434\",\"type\":\"HoverTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2059\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2058\"},\"group\":null,\"major_label_policy\":{\"id\":\"2059\"},\"ticker\":{\"id\":\"1424\"},\"visible\":false},\"id\":\"1423\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1423\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1426\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2021\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1424\",\"type\":\"BasicTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2061\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2022\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2062\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1433\"}},\"id\":\"1429\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1431\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1433\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1453\"}],\"center\":[{\"id\":\"1456\"},{\"id\":\"1460\"}],\"height\":200,\"left\":[{\"id\":\"1457\"}],\"renderers\":[{\"id\":\"1742\"},{\"id\":\"1748\"},{\"id\":\"1754\"}],\"title\":{\"id\":\"1444\"},\"toolbar\":{\"id\":\"1469\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1446\"},\"x_scale\":{\"id\":\"1449\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1451\"}},\"id\":\"1443\",\"subtype\":\"Figure\",\"type\":\"Plot\"}],\"root_ids\":[\"1931\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
- " const render_items = [{\"docid\":\"09fd65be-e224-4536-94d0-4f4c5f93935a\",\"root_ids\":[\"1931\"],\"roots\":{\"1931\":\"55e49958-3dc8-447c-a262-d25d686921ca\"}}];\n",
- " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
- "\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " embed_document(root);\n",
- " } else {\n",
- " let attempts = 0;\n",
- " const timer = setInterval(function(root) {\n",
- " if (root.Bokeh !== undefined) {\n",
- " clearInterval(timer);\n",
- " embed_document(root);\n",
- " } else {\n",
- " attempts++;\n",
- " if (attempts > 100) {\n",
- " clearInterval(timer);\n",
- " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
- " }\n",
- " }\n",
- " }, 10, root)\n",
- " }\n",
- "})(window);"
- ],
- "application/vnd.bokehjs_exec.v0+json": ""
- },
- "metadata": {
- "application/vnd.bokehjs_exec.v0+json": {
- "id": "1931"
- }
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "hidden_code_nb_deflection.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, E_steel, fy, fy_steel, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
- ]
- }
- ],
- "metadata": {
- "interpreter": {
- "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
- },
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/Simple Beam DEMOs/sb_diagrams.ipynb b/Simple Beam DEMOs/sb_diagrams.ipynb
deleted file mode 100644
index 1dbb53c..0000000
--- a/Simple Beam DEMOs/sb_diagrams.ipynb
+++ /dev/null
@@ -1,565 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# **Simple beam - N V M Diagrams**\n",
- "In this third notebook, the internal axial force N, shear force V and bending moment M diagrams are studied on the same system, external force P and the uniform load q introduced in the DEMO \"sb_actions\"."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## **Goals**\n",
- "\n",
- "* Gain familiarity with the N V M diagrams\n",
- "* Learn the relations between the three diagrams\n",
- "* Note the direct correlation of the diagrams with the internal forces"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "## **Tasks and exercises**\n",
- "\n",
- "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
- "\n",
- "1. In which position the bending moment M is the highest? Does the shear force V have correlation with the behaviour of the bending moment M?\n",
- "\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " The bending moment is the highest in the middle of the beam, at x = 3 m.\n",
- " \n",
- " Yes, in fact we can note that the shear force V is 0 when the moment is maximum and that the slope of the moment is directily correlated with the shear force V. The relation between V and M is the following $\\frac{dM}{dx} = V$.\n",
- " </details>\n",
- "\n",
- "<br>\n",
- "\n",
- "2. In this case, does changing the uniform load q have any impact on the internal force N? What else do you note?\n",
- "\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " No, q has no influece with the axial force N, but it has direct impact with the shear force V, the bending moment M and the left and right vertical reaction.\n",
- " </details>\n",
- "\n",
- "<br>\n",
- "\n",
- "3. Which impact has the chosen free-body diagram on the N V M diagrams?\n",
- "\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " None, beacuse the N V M diagrams are independent on the free-body diagram used to compute the equilibium. The signs of the diagrams are computed by following a sign conention, presented below:\n",
- " <br>\n",
- " <img src=\"img/Sign_convention.png\" alt=\"drawing\" width=\"600\"/>\n",
- " </details>\n",
- "\n",
- "<br>"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## **Build the interactive visualisation tool**"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- " <div class=\"bk-root\">\n",
- " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
- " <span id=\"1002\">Loading BokehJS ...</span>\n",
- " </div>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "\n",
- "(function(root) {\n",
- " function now() {\n",
- " return new Date();\n",
- " }\n",
- "\n",
- " const force = true;\n",
- "\n",
- " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
- " root._bokeh_onload_callbacks = [];\n",
- " root._bokeh_is_loading = undefined;\n",
- " }\n",
- "\n",
- " const JS_MIME_TYPE = 'application/javascript';\n",
- " const HTML_MIME_TYPE = 'text/html';\n",
- " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
- " const CLASS_NAME = 'output_bokeh rendered_html';\n",
- "\n",
- " /**\n",
- " * Render data to the DOM node\n",
- " */\n",
- " function render(props, node) {\n",
- " const script = document.createElement(\"script\");\n",
- " node.appendChild(script);\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when an output is cleared or removed\n",
- " */\n",
- " function handleClearOutput(event, handle) {\n",
- " const cell = handle.cell;\n",
- "\n",
- " const id = cell.output_area._bokeh_element_id;\n",
- " const server_id = cell.output_area._bokeh_server_id;\n",
- " // Clean up Bokeh references\n",
- " if (id != null && id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- "\n",
- " if (server_id !== undefined) {\n",
- " // Clean up Bokeh references\n",
- " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
- " cell.notebook.kernel.execute(cmd_clean, {\n",
- " iopub: {\n",
- " output: function(msg) {\n",
- " const id = msg.content.text.trim();\n",
- " if (id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- " }\n",
- " }\n",
- " });\n",
- " // Destroy server and session\n",
- " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
- " cell.notebook.kernel.execute(cmd_destroy);\n",
- " }\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when a new output is added\n",
- " */\n",
- " function handleAddOutput(event, handle) {\n",
- " const output_area = handle.output_area;\n",
- " const output = handle.output;\n",
- "\n",
- " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
- " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
- " return\n",
- " }\n",
- "\n",
- " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
- "\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
- " // store reference to embed id on output_area\n",
- " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
- " }\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
- " const bk_div = document.createElement(\"div\");\n",
- " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
- " const script_attrs = bk_div.children[0].attributes;\n",
- " for (let i = 0; i < script_attrs.length; i++) {\n",
- " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
- " }\n",
- " // store reference to server id on output_area\n",
- " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
- " }\n",
- " }\n",
- "\n",
- " function register_renderer(events, OutputArea) {\n",
- "\n",
- " function append_mime(data, metadata, element) {\n",
- " // create a DOM node to render to\n",
- " const toinsert = this.create_output_subarea(\n",
- " metadata,\n",
- " CLASS_NAME,\n",
- " EXEC_MIME_TYPE\n",
- " );\n",
- " this.keyboard_manager.register_events(toinsert);\n",
- " // Render to node\n",
- " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
- " render(props, toinsert[toinsert.length - 1]);\n",
- " element.append(toinsert);\n",
- " return toinsert\n",
- " }\n",
- "\n",
- " /* Handle when an output is cleared or removed */\n",
- " events.on('clear_output.CodeCell', handleClearOutput);\n",
- " events.on('delete.Cell', handleClearOutput);\n",
- "\n",
- " /* Handle when a new output is added */\n",
- " events.on('output_added.OutputArea', handleAddOutput);\n",
- "\n",
- " /**\n",
- " * Register the mime type and append_mime function with output_area\n",
- " */\n",
- " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
- " /* Is output safe? */\n",
- " safe: true,\n",
- " /* Index of renderer in `output_area.display_order` */\n",
- " index: 0\n",
- " });\n",
- " }\n",
- "\n",
- " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
- " if (root.Jupyter !== undefined) {\n",
- " const events = require('base/js/events');\n",
- " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
- "\n",
- " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
- " register_renderer(events, OutputArea);\n",
- " }\n",
- " }\n",
- "\n",
- " \n",
- " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
- " root._bokeh_timeout = Date.now() + 5000;\n",
- " root._bokeh_failed_load = false;\n",
- " }\n",
- "\n",
- " const NB_LOAD_WARNING = {'data': {'text/html':\n",
- " \"<div style='background-color: #fdd'>\\n\"+\n",
- " \"<p>\\n\"+\n",
- " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
- " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
- " \"</p>\\n\"+\n",
- " \"<ul>\\n\"+\n",
- " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
- " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
- " \"</ul>\\n\"+\n",
- " \"<code>\\n\"+\n",
- " \"from bokeh.resources import INLINE\\n\"+\n",
- " \"output_notebook(resources=INLINE)\\n\"+\n",
- " \"</code>\\n\"+\n",
- " \"</div>\"}};\n",
- "\n",
- " function display_loaded() {\n",
- " const el = document.getElementById(\"1002\");\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS is loading...\";\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
- " }\n",
- " } else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(display_loaded, 100)\n",
- " }\n",
- " }\n",
- "\n",
- "\n",
- " function run_callbacks() {\n",
- " try {\n",
- " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
- " if (callback != null)\n",
- " callback();\n",
- " });\n",
- " } finally {\n",
- " delete root._bokeh_onload_callbacks\n",
- " }\n",
- " console.debug(\"Bokeh: all callbacks have finished\");\n",
- " }\n",
- "\n",
- " function load_libs(css_urls, js_urls, callback) {\n",
- " if (css_urls == null) css_urls = [];\n",
- " if (js_urls == null) js_urls = [];\n",
- "\n",
- " root._bokeh_onload_callbacks.push(callback);\n",
- " if (root._bokeh_is_loading > 0) {\n",
- " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
- " return null;\n",
- " }\n",
- " if (js_urls == null || js_urls.length === 0) {\n",
- " run_callbacks();\n",
- " return null;\n",
- " }\n",
- " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
- " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
- "\n",
- " function on_load() {\n",
- " root._bokeh_is_loading--;\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
- " run_callbacks()\n",
- " }\n",
- " }\n",
- "\n",
- " function on_error(url) {\n",
- " console.error(\"failed to load \" + url);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < css_urls.length; i++) {\n",
- " const url = css_urls[i];\n",
- " const element = document.createElement(\"link\");\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.rel = \"stylesheet\";\n",
- " element.type = \"text/css\";\n",
- " element.href = url;\n",
- " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < js_urls.length; i++) {\n",
- " const url = js_urls[i];\n",
- " const element = document.createElement('script');\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.async = false;\n",
- " element.src = url;\n",
- " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
- " document.head.appendChild(element);\n",
- " }\n",
- " };\n",
- "\n",
- " function inject_raw_css(css) {\n",
- " const element = document.createElement(\"style\");\n",
- " element.appendChild(document.createTextNode(css));\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " \n",
- " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
- " const css_urls = [];\n",
- " \n",
- "\n",
- " const inline_js = [\n",
- " function(Bokeh) {\n",
- " Bokeh.set_log_level(\"info\");\n",
- " },\n",
- " function(Bokeh) {\n",
- " \n",
- " \n",
- " }\n",
- " ];\n",
- "\n",
- " function run_inline_js() {\n",
- " \n",
- " if (root.Bokeh !== undefined || force === true) {\n",
- " \n",
- " for (let i = 0; i < inline_js.length; i++) {\n",
- " inline_js[i].call(root, root.Bokeh);\n",
- " }\n",
- " if (force === true) {\n",
- " display_loaded();\n",
- " }} else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(run_inline_js, 100);\n",
- " } else if (!root._bokeh_failed_load) {\n",
- " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
- " root._bokeh_failed_load = true;\n",
- " } else if (force !== true) {\n",
- " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
- " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
- " }\n",
- "\n",
- " }\n",
- "\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
- " run_inline_js();\n",
- " } else {\n",
- " load_libs(css_urls, js_urls, function() {\n",
- " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
- " run_inline_js();\n",
- " });\n",
- " }\n",
- "}(window));"
- ],
- "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Import the packages needed\n",
- "import sys\n",
- "sys.path.append('../HiddenCode')\n",
- "import hidden_code_nb_diagrams\n",
- "import math\n",
- "import numpy as np \n",
- "from cienpy import simplebeam as sb\n",
- "from cienpy import rectangular_section as beam_section"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the geometry, the external actions and compute the initial configuration."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Choose the dimensions\n",
- "L = 6 # [m]\n",
- "h = 200 # [mm]\n",
- "b = 100 # [mm]\n",
- "q = 4; # [kN/m]\n",
- "P = 10; # [kN]\n",
- "\n",
- "# compute the internal forces (at x=L)\n",
- "discr_NVM = 100\n",
- "x_discr = np.linspace(0, L, discr_NVM)\n",
- "N_discr = sb.compute_N(x_discr, P)\n",
- "V_discr = sb.compute_V(x_discr, q, L)\n",
- "M_discr = sb.compute_M(x_discr, q, L)\n",
- "N = N_discr[-1]\n",
- "V = V_discr[-1]\n",
- "M = M_discr[-1]\n",
- "\n",
- "# compute the parameters\n",
- "A = beam_section.compute_area(b, h) # [mm2]\n",
- "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
- "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
- "\n",
- "# compute the reactions\n",
- "Rx = sb.compute_Rx(P)\n",
- "Ry_l = sb.compute_Ry_l(q, L)\n",
- "Ry_r = sb.compute_Ry_r(q, L)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run the complex code to generate the **interactive visualisation tool**:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- " <div class=\"bk-root\" id=\"1bb0cdda-33e0-4f5e-a634-8e50d1c48ecd\" data-root-id=\"1430\"></div>\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "(function(root) {\n",
- " function embed_document(root) {\n",
- " \n",
- " const docs_json = {\"9b573d13-698b-4ace-a16d-eea151a69129\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1429\"}]},\"id\":\"1430\",\"type\":\"Column\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1194\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1196\"},\"nonselection_glyph\":{\"id\":\"1195\"},\"view\":{\"id\":\"1198\"}},\"id\":\"1197\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1182\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1463\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1181\"}},\"id\":\"1186\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1188\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1190\"},\"nonselection_glyph\":{\"id\":\"1189\"},\"view\":{\"id\":\"1192\"}},\"id\":\"1191\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1241\"},\"glyph\":{\"id\":\"1243\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1245\"},\"nonselection_glyph\":{\"id\":\"1244\"},\"view\":{\"id\":\"1247\"}},\"id\":\"1246\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1192\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1539\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1540\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1194\",\"type\":\"Circle\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1413\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1255\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1200\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1202\"},\"nonselection_glyph\":{\"id\":\"1201\"},\"view\":{\"id\":\"1204\"}},\"id\":\"1203\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1198\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Circle\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1243\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1200\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"1487\"},\"selection_policy\":{\"id\":\"1486\"}},\"id\":\"1241\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1206\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1204\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1205\"}},\"id\":\"1210\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1212\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1214\"},\"nonselection_glyph\":{\"id\":\"1213\"},\"view\":{\"id\":\"1216\"}},\"id\":\"1215\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1205\"},\"glyph\":{\"id\":\"1206\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1208\"},\"nonselection_glyph\":{\"id\":\"1207\"},\"view\":{\"id\":\"1210\"}},\"id\":\"1209\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1483\"},\"selection_policy\":{\"id\":\"1482\"}},\"id\":\"1205\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1218\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1238\",\"type\":\"VeeHead\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1216\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1465\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1212\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1219\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1466\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1235\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1448\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1236\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1232\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1447\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1233\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1468\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1218\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1220\"},\"nonselection_glyph\":{\"id\":\"1219\"},\"view\":{\"id\":\"1222\"}},\"id\":\"1221\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1222\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1232\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1469\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1220\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1235\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1223\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1542\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1238\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1449\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1239\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1443\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1543\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"1489\"},\"selection_policy\":{\"id\":\"1488\"}},\"id\":\"1248\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1241\"}},\"id\":\"1247\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1249\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1248\"},\"glyph\":{\"id\":\"1249\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1251\"},\"nonselection_glyph\":{\"id\":\"1250\"},\"view\":{\"id\":\"1253\"}},\"id\":\"1252\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1250\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1544\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1418\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1254\",\"type\":\"Slider\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1256\",\"type\":\"Div\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1251\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1545\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1248\"}},\"id\":\"1253\",\"type\":\"CDSView\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1417\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1257\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"axis\":{\"id\":\"1271\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1274\",\"type\":\"Grid\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1258\",\"type\":\"Div\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \"},\"id\":\"1260\",\"type\":\"Div\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1416\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1259\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1271\"}],\"center\":[{\"id\":\"1274\"},{\"id\":\"1278\"}],\"height\":160,\"left\":[{\"id\":\"1275\"}],\"renderers\":[{\"id\":\"1363\"},{\"id\":\"1369\"},{\"id\":\"1399\"}],\"title\":{\"id\":\"1262\"},\"toolbar\":{\"id\":\"1287\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1267\"},\"y_range\":{\"id\":\"1265\"},\"y_scale\":{\"id\":\"1269\"}},\"id\":\"1261\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1265\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1459\"},\"group\":null,\"major_label_policy\":{\"id\":\"1460\"},\"ticker\":{\"id\":\"1276\"}},\"id\":\"1275\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1267\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1262\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1269\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1462\"},\"group\":null,\"major_label_policy\":{\"id\":\"1463\"},\"ticker\":{\"id\":\"1272\"},\"visible\":false},\"id\":\"1271\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1471\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1272\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1509\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1510\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1484\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1511\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1512\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1513\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1514\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1486\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1487\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1531\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1515\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1516\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1488\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1489\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1379\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1371\"}},\"id\":\"1376\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1374\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1329\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1380\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1378\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1390\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1392\"},\"nonselection_glyph\":{\"id\":\"1391\"},\"view\":{\"id\":\"1394\"}},\"id\":\"1393\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1311\"},{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1315\"},{\"id\":\"1316\"},{\"id\":\"1318\"}]},\"id\":\"1319\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-0.0,-0.7199265381083563,-1.4251606978879707,-2.115702479338843,-2.7915518824609737,-3.452708907254362,-4.099173553719009,-4.730945821854913,-5.348025711662076,-5.950413223140496,-6.5381083562901745,-7.111111111111112,-7.669421487603306,-8.213039485766759,-8.74196510560147,-9.25619834710744,-9.755739210284665,-10.240587695133149,-10.710743801652892,-11.166207529843895,-11.606978879706153,-12.03305785123967,-12.444444444444445,-12.841138659320476,-13.223140495867767,-13.590449954086317,-13.943067033976122,-14.28099173553719,-14.604224058769512,-14.912764003673093,-15.206611570247935,-15.485766758494032,-15.750229568411386,-16.0,-16.235078053259873,-16.455463728191,-16.661157024793386,-16.852157943067034,-17.02846648301194,-17.1900826446281,-17.33700642791552,-17.469237832874196,-17.58677685950413,-17.689623507805326,-17.77777777777778,-17.85123966942149,-17.910009182736456,-17.95408631772268,-17.983471074380166,-17.99816345270891,-17.99816345270891,-17.983471074380166,-17.95408631772268,-17.910009182736456,-17.85123966942149,-17.77777777777778,-17.689623507805326,-17.58677685950413,-17.469237832874196,-17.33700642791552,-17.1900826446281,-17.028466483011936,-16.852157943067034,-16.661157024793386,-16.455463728191,-16.235078053259873,-16.0,-15.750229568411386,-15.485766758494032,-15.206611570247935,-14.912764003673095,-14.604224058769514,-14.280991735537192,-13.943067033976122,-13.590449954086315,-13.223140495867765,-12.841138659320475,-12.444444444444443,-12.033057851239668,-11.606978879706151,-11.166207529843893,-10.710743801652892,-10.240587695133149,-9.755739210284665,-9.25619834710744,-8.741965105601471,-8.21303948576676,-7.669421487603308,-7.111111111111105,-6.538108356290169,-5.950413223140491,-5.348025711662071,-4.730945821854909,-4.099173553719005,-3.452708907254359,-2.791551882460971,-2.1157024793388413,-1.4251606978879694,-0.7199265381083556,0.0,0]},\"selected\":{\"id\":\"1531\"},\"selection_policy\":{\"id\":\"1530\"}},\"id\":\"1383\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1382\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1350\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1474\"},\"group\":null,\"major_label_policy\":{\"id\":\"1475\"},\"ticker\":{\"id\":\"1336\"}},\"id\":\"1335\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1331\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1333\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1386\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1383\"},\"glyph\":{\"id\":\"1384\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1386\"},\"nonselection_glyph\":{\"id\":\"1385\"},\"view\":{\"id\":\"1388\"}},\"id\":\"1387\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1336\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1335\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1338\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1391\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1383\"}},\"id\":\"1388\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1471\"},\"group\":null,\"major_label_policy\":{\"id\":\"1472\"},\"ticker\":{\"id\":\"1340\"}},\"id\":\"1339\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1339\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1342\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1392\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1340\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1390\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1402\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1348\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1412\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1349\"}},\"id\":\"1345\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1452\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1394\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1346\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1347\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1400\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1396\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1398\"},\"nonselection_glyph\":{\"id\":\"1397\"},\"view\":{\"id\":\"1400\"}},\"id\":\"1399\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1453\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1396\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1349\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"1525\"},\"selection_policy\":{\"id\":\"1524\"}},\"id\":\"1359\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1106\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1104\"},\"source\":{\"id\":\"1006\"},\"support_r\":{\"id\":\"1098\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \"},\"id\":\"1415\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1409\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1456\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1410\",\"type\":\"Circle\"},{\"attributes\":{\"args\":{\"div\":{\"id\":\"1106\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1104\"},\"source\":{\"id\":\"1006\"},\"support_r\":{\"id\":\"1098\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \"},\"id\":\"1414\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"1442\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1408\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1410\"},\"nonselection_glyph\":{\"id\":\"1409\"},\"view\":{\"id\":\"1412\"}},\"id\":\"1411\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1406\",\"type\":\"CDSView\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"div_f\":{\"id\":\"1260\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \"},\"id\":\"1413\",\"type\":\"CustomJS\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1408\",\"type\":\"Circle\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1363\"},\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"div_f\":{\"id\":\"1260\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=100) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1416\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1417\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1402\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1404\"},\"nonselection_glyph\":{\"id\":\"1403\"},\"view\":{\"id\":\"1406\"}},\"id\":\"1405\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1387\"},\"V_diag\":{\"id\":\"1375\"},\"arr_head\":{\"id\":\"1252\"},\"div_P\":{\"id\":\"1258\"},\"div_f\":{\"id\":\"1260\"},\"fN\":{\"id\":\"1236\"},\"fP\":{\"id\":\"1224\"},\"fRx\":{\"id\":\"1233\"},\"fRyl\":{\"id\":\"1230\"},\"fRyr\":{\"id\":\"1227\"},\"fV\":{\"id\":\"1239\"},\"s_M\":{\"id\":\"1241\"},\"s_q\":{\"id\":\"1005\"},\"source\":{\"id\":\"1006\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1418\",\"type\":\"CustomJS\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1523\"},\"selection_policy\":{\"id\":\"1522\"}},\"id\":\"1457\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"width\":10},\"id\":\"1419\",\"type\":\"Spacer\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1360\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1420\"},{\"id\":\"1107\"},{\"id\":\"1108\"},{\"id\":\"1106\"},{\"id\":\"1421\"},{\"id\":\"1255\"},{\"id\":\"1254\"},{\"id\":\"1256\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"}]},\"id\":\"1422\",\"type\":\"Column\"},{\"attributes\":{\"height\":10},\"id\":\"1420\",\"type\":\"Spacer\"},{\"attributes\":{\"tools\":[{\"id\":\"1343\"},{\"id\":\"1344\"},{\"id\":\"1345\"},{\"id\":\"1346\"},{\"id\":\"1347\"},{\"id\":\"1348\"},{\"id\":\"1350\"}]},\"id\":\"1351\",\"type\":\"Toolbar\"},{\"attributes\":{\"height\":10},\"id\":\"1421\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"1040\"},{\"id\":\"1419\"},{\"id\":\"1422\"}]},\"id\":\"1423\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1427\"}]},\"id\":\"1428\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"1127\"},{\"id\":\"1423\"}]},\"id\":\"1424\",\"type\":\"Column\"},{\"attributes\":{\"height\":10},\"id\":\"1425\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"1007\"},{\"id\":\"1425\"},{\"id\":\"1261\"},{\"id\":\"1295\"},{\"id\":\"1327\"},{\"id\":\"1260\"}]},\"id\":\"1426\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1359\"},\"glyph\":{\"id\":\"1360\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1362\"},\"nonselection_glyph\":{\"id\":\"1361\"},\"view\":{\"id\":\"1364\"}},\"id\":\"1363\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"1424\"},{\"id\":\"1426\"}]},\"id\":\"1427\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1366\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1368\"},\"nonselection_glyph\":{\"id\":\"1367\"},\"view\":{\"id\":\"1370\"}},\"id\":\"1369\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1371\"},\"glyph\":{\"id\":\"1372\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1374\"},\"nonselection_glyph\":{\"id\":\"1373\"},\"view\":{\"id\":\"1376\"}},\"id\":\"1375\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1367\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1359\"}},\"id\":\"1364\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1428\"}]},\"id\":\"1429\",\"type\":\"Row\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1366\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1368\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1459\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1373\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1460\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-12.0,-11.757575757575758,-11.515151515151516,-11.272727272727273,-11.030303030303031,-10.787878787878787,-10.545454545454545,-10.303030303030303,-10.06060606060606,-9.818181818181818,-9.575757575757576,-9.333333333333332,-9.09090909090909,-8.848484848484848,-8.606060606060606,-8.363636363636363,-8.121212121212121,-7.878787878787879,-7.636363636363637,-7.393939393939394,-7.151515151515151,-6.909090909090909,-6.666666666666666,-6.424242424242424,-6.181818181818182,-5.9393939393939394,-5.696969696969697,-5.454545454545454,-5.212121212121212,-4.96969696969697,-4.727272727272727,-4.484848484848484,-4.242424242424242,-4.0,-3.757575757575758,-3.5151515151515156,-3.2727272727272734,-3.0303030303030294,-2.787878787878787,-2.545454545454545,-2.3030303030303028,-2.0606060606060606,-1.8181818181818183,-1.5757575757575761,-1.3333333333333321,-1.09090909090909,-0.8484848484848477,-0.6060606060606055,-0.3636363636363633,-0.1212121212121211,0.1212121212121211,0.3636363636363633,0.6060606060606055,0.8484848484848495,1.0909090909090917,1.333333333333334,1.5757575757575761,1.8181818181818183,2.0606060606060606,2.3030303030303028,2.5454545454545467,2.787878787878789,3.030303030303031,3.2727272727272734,3.5151515151515156,3.757575757575758,4.0,4.242424242424242,4.484848484848484,4.727272727272727,4.969696969696969,5.212121212121211,5.454545454545453,5.696969696969699,5.939393939393941,6.181818181818183,6.424242424242426,6.666666666666668,6.90909090909091,7.151515151515152,7.3939393939393945,7.636363636363637,7.878787878787879,8.121212121212121,8.363636363636363,8.606060606060606,8.848484848484848,9.09090909090909,9.333333333333336,9.575757575757578,9.81818181818182,10.060606060606062,10.303030303030305,10.545454545454547,10.787878787878789,11.030303030303031,11.272727272727273,11.515151515151516,11.757575757575758,12.0,0]},\"selected\":{\"id\":\"1528\"},\"selection_policy\":{\"id\":\"1527\"}},\"id\":\"1371\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1378\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1380\"},\"nonselection_glyph\":{\"id\":\"1379\"},\"view\":{\"id\":\"1382\"}},\"id\":\"1381\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1370\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1372\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1503\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1504\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1505\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1506\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1434\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1534\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1436\",\"type\":\"Title\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1543\"},\"selection_policy\":{\"id\":\"1542\"}},\"id\":\"1507\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1545\"},\"selection_policy\":{\"id\":\"1544\"}},\"id\":\"1508\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1535\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1536\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1537\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1538\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1121\"},\"glyph\":{\"id\":\"1122\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1124\"},\"nonselection_glyph\":{\"id\":\"1123\"},\"view\":{\"id\":\"1126\"}},\"id\":\"1125\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"1138\"}],\"center\":[{\"id\":\"1141\"},{\"id\":\"1145\"},{\"id\":\"1224\"},{\"id\":\"1227\"},{\"id\":\"1230\"},{\"id\":\"1233\"},{\"id\":\"1236\"},{\"id\":\"1239\"}],\"height\":200,\"left\":[{\"id\":\"1142\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1164\"},{\"id\":\"1197\"},{\"id\":\"1203\"},{\"id\":\"1209\"},{\"id\":\"1215\"},{\"id\":\"1221\"},{\"id\":\"1246\"},{\"id\":\"1252\"}],\"title\":{\"id\":\"1128\"},\"toolbar\":{\"id\":\"1153\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1130\"},\"x_scale\":{\"id\":\"1134\"},\"y_range\":{\"id\":\"1132\"},\"y_scale\":{\"id\":\"1136\"}},\"id\":\"1127\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"1477\"},\"selection_policy\":{\"id\":\"1476\"}},\"id\":\"1160\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1121\"}},\"id\":\"1126\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1161\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1130\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1132\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1134\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1442\"},\"group\":null,\"major_label_policy\":{\"id\":\"1443\"},\"ticker\":{\"id\":\"1139\"},\"visible\":false},\"id\":\"1138\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1136\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1128\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1142\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1145\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1139\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1439\"},\"group\":null,\"major_label_policy\":{\"id\":\"1440\"},\"ticker\":{\"id\":\"1143\"},\"visible\":false},\"id\":\"1142\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1439\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1146\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1152\"}},\"id\":\"1148\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1149\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1440\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"ResetTool\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1492\"},\"selection_policy\":{\"id\":\"1491\"}},\"id\":\"1444\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1055\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1058\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1152\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1160\"},\"glyph\":{\"id\":\"1161\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1163\"},\"nonselection_glyph\":{\"id\":\"1162\"},\"view\":{\"id\":\"1165\"}},\"id\":\"1164\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1494\"},\"selection_policy\":{\"id\":\"1493\"}},\"id\":\"1445\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1226\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1445\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1227\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1496\"},\"selection_policy\":{\"id\":\"1495\"}},\"id\":\"1446\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1223\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1444\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1224\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1229\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1226\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1498\"},\"selection_policy\":{\"id\":\"1497\"}},\"id\":\"1447\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1229\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1446\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1230\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1500\"},\"selection_policy\":{\"id\":\"1499\"}},\"id\":\"1448\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1505\"},\"group\":null,\"major_label_policy\":{\"id\":\"1506\"},\"ticker\":{\"id\":\"1079\"}},\"id\":\"1051\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1502\"},\"selection_policy\":{\"id\":\"1501\"}},\"id\":\"1449\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1167\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1074\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"1138\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1141\",\"type\":\"Grid\"},{\"attributes\":{\"tools\":[{\"id\":\"1146\"},{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"}]},\"id\":\"1153\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1181\"},\"glyph\":{\"id\":\"1182\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1184\"},\"nonselection_glyph\":{\"id\":\"1183\"},\"view\":{\"id\":\"1186\"}},\"id\":\"1185\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1160\"}},\"id\":\"1165\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1534\"},\"selection_policy\":{\"id\":\"1533\"}},\"id\":\"1073\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1527\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1083\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1085\"},\"nonselection_glyph\":{\"id\":\"1084\"},\"view\":{\"id\":\"1087\"}},\"id\":\"1086\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"1516\"},\"selection_policy\":{\"id\":\"1515\"}},\"id\":\"1166\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"1520\"},\"selection_policy\":{\"id\":\"1519\"}},\"id\":\"1181\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1166\"},\"glyph\":{\"id\":\"1167\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1169\"},\"nonselection_glyph\":{\"id\":\"1168\"},\"view\":{\"id\":\"1171\"}},\"id\":\"1170\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1051\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1054\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1528\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1178\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1172\"},\"glyph\":{\"id\":\"1173\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1175\"},\"nonselection_glyph\":{\"id\":\"1174\"},\"view\":{\"id\":\"1177\"}},\"id\":\"1176\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1503\"},\"group\":null,\"major_label_policy\":{\"id\":\"1504\"},\"ticker\":{\"id\":\"1079\"}},\"id\":\"1055\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"1518\"},\"selection_policy\":{\"id\":\"1517\"}},\"id\":\"1172\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1166\"}},\"id\":\"1171\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"LinearScale\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1173\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1172\"}},\"id\":\"1177\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1178\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1457\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1179\",\"type\":\"Arrow\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1041\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1188\",\"type\":\"Circle\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1472\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1474\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1475\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1476\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1477\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1478\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1479\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1480\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1481\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1482\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1483\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1286\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1517\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1275\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1278\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1276\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1518\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"PanTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1026\"},{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"}]},\"id\":\"1033\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"1285\"}},\"id\":\"1281\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1282\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1285\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1519\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1520\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"1510\"},\"selection_policy\":{\"id\":\"1509\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1481\"},\"selection_policy\":{\"id\":\"1480\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1018\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1021\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1008\",\"type\":\"Title\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"1485\"},\"selection_policy\":{\"id\":\"1484\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1012\",\"type\":\"Range1d\"},{\"attributes\":{\"tools\":[{\"id\":\"1279\"},{\"id\":\"1280\"},{\"id\":\"1281\"},{\"id\":\"1282\"},{\"id\":\"1283\"},{\"id\":\"1284\"},{\"id\":\"1286\"}]},\"id\":\"1287\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1018\"}],\"center\":[{\"id\":\"1021\"},{\"id\":\"1025\"},{\"id\":\"1179\"}],\"height\":200,\"left\":[{\"id\":\"1022\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1086\"},{\"id\":\"1092\"},{\"id\":\"1098\"},{\"id\":\"1170\"},{\"id\":\"1176\"},{\"id\":\"1185\"},{\"id\":\"1191\"}],\"title\":{\"id\":\"1008\"},\"toolbar\":{\"id\":\"1033\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1014\"},\"y_range\":{\"id\":\"1012\"},\"y_scale\":{\"id\":\"1016\"}},\"id\":\"1007\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1019\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1318\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"A\":[20000],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0]},\"selected\":{\"id\":\"1479\"},\"selection_policy\":{\"id\":\"1478\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1051\"}],\"center\":[{\"id\":\"1054\"},{\"id\":\"1058\"},{\"id\":\"1110\"},{\"id\":\"1119\"}],\"left\":[{\"id\":\"1055\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1077\"},{\"id\":\"1104\"},{\"id\":\"1116\"},{\"id\":\"1125\"}],\"title\":{\"id\":\"1041\"},\"toolbar\":{\"id\":\"1066\"},\"toolbar_location\":null,\"width\":375,\"x_range\":{\"id\":\"1043\"},\"x_scale\":{\"id\":\"1047\"},\"y_range\":{\"id\":\"1045\"},\"y_scale\":{\"id\":\"1049\"}},\"id\":\"1040\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1016\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1297\",\"type\":\"DataRange1d\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1010\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1303\"}],\"center\":[{\"id\":\"1306\"},{\"id\":\"1310\"}],\"height\":160,\"left\":[{\"id\":\"1307\"}],\"renderers\":[{\"id\":\"1375\"},{\"id\":\"1381\"},{\"id\":\"1405\"}],\"title\":{\"id\":\"1434\"},\"toolbar\":{\"id\":\"1319\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1299\"},\"y_range\":{\"id\":\"1297\"},\"y_scale\":{\"id\":\"1301\"}},\"id\":\"1295\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1455\"},\"group\":null,\"major_label_policy\":{\"id\":\"1456\"},\"ticker\":{\"id\":\"1019\"}},\"id\":\"1018\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1468\"},\"group\":null,\"major_label_policy\":{\"id\":\"1469\"},\"ticker\":{\"id\":\"1304\"},\"visible\":false},\"id\":\"1303\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":300},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"1022\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1025\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1301\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1452\"},\"group\":null,\"major_label_policy\":{\"id\":\"1453\"},\"ticker\":{\"id\":\"1023\"},\"visible\":false},\"id\":\"1022\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1304\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1303\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1306\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1312\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1032\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1307\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1310\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1465\"},\"group\":null,\"major_label_policy\":{\"id\":\"1466\"},\"ticker\":{\"id\":\"1308\"}},\"id\":\"1307\",\"type\":\"LinearAxis\"},{\"attributes\":{\"overlay\":{\"id\":\"1032\"}},\"id\":\"1028\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1308\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1029\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1316\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1311\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1317\"}},\"id\":\"1313\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1314\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1073\"},\"glyph\":{\"id\":\"1074\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1076\"},\"nonselection_glyph\":{\"id\":\"1075\"},\"view\":{\"id\":\"1078\"}},\"id\":\"1077\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1315\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1317\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1335\"}],\"center\":[{\"id\":\"1338\"},{\"id\":\"1342\"}],\"height\":200,\"left\":[{\"id\":\"1339\"}],\"renderers\":[{\"id\":\"1387\"},{\"id\":\"1393\"},{\"id\":\"1411\"}],\"title\":{\"id\":\"1436\"},\"toolbar\":{\"id\":\"1351\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1010\"},\"x_scale\":{\"id\":\"1331\"},\"y_range\":{\"id\":\"1329\"},\"y_scale\":{\"id\":\"1333\"}},\"id\":\"1327\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1522\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1523\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1059\"},{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"}]},\"id\":\"1066\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"1073\"}},\"id\":\"1078\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1524\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1525\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1059\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1065\"}},\"id\":\"1061\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1062\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1065\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1101\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1083\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1491\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"Selection\"},{\"attributes\":{\"interval\":50},\"id\":\"1079\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1087\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1095\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1493\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1094\"},\"glyph\":{\"id\":\"1095\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1097\"},\"nonselection_glyph\":{\"id\":\"1096\"},\"view\":{\"id\":\"1099\"}},\"id\":\"1098\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1088\"}},\"id\":\"1093\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1089\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"1512\"},\"selection_policy\":{\"id\":\"1511\"}},\"id\":\"1088\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1112\"},\"glyph\":{\"id\":\"1113\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1115\"},\"nonselection_glyph\":{\"id\":\"1114\"},\"view\":{\"id\":\"1117\"}},\"id\":\"1116\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1088\"},\"glyph\":{\"id\":\"1089\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1091\"},\"nonselection_glyph\":{\"id\":\"1090\"},\"view\":{\"id\":\"1093\"}},\"id\":\"1092\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1122\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1496\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"1536\"},\"selection_policy\":{\"id\":\"1535\"}},\"id\":\"1100\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"1514\"},\"selection_policy\":{\"id\":\"1513\"}},\"id\":\"1094\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1497\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"1540\"},\"selection_policy\":{\"id\":\"1539\"}},\"id\":\"1121\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\"},\"id\":\"1106\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1118\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1508\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1119\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1094\"}},\"id\":\"1099\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1499\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1109\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1109\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"1507\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1110\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1103\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1500\",\"type\":\"Selection\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1100\"},\"glyph\":{\"id\":\"1101\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1103\"},\"nonselection_glyph\":{\"id\":\"1102\"},\"view\":{\"id\":\"1105\"}},\"id\":\"1104\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"1538\"},\"selection_policy\":{\"id\":\"1537\"}},\"id\":\"1112\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1100\"}},\"id\":\"1105\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1501\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1414\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1107\",\"type\":\"Slider\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1415\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"1502\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1112\"}},\"id\":\"1117\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1118\",\"type\":\"VeeHead\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1113\",\"type\":\"Text\"}],\"root_ids\":[\"1430\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
- " const render_items = [{\"docid\":\"9b573d13-698b-4ace-a16d-eea151a69129\",\"root_ids\":[\"1430\"],\"roots\":{\"1430\":\"1bb0cdda-33e0-4f5e-a634-8e50d1c48ecd\"}}];\n",
- " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
- "\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " embed_document(root);\n",
- " } else {\n",
- " let attempts = 0;\n",
- " const timer = setInterval(function(root) {\n",
- " if (root.Bokeh !== undefined) {\n",
- " clearInterval(timer);\n",
- " embed_document(root);\n",
- " } else {\n",
- " attempts++;\n",
- " if (attempts > 100) {\n",
- " clearInterval(timer);\n",
- " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
- " }\n",
- " }\n",
- " }, 10, root)\n",
- " }\n",
- "})(window);"
- ],
- "application/vnd.bokehjs_exec.v0+json": ""
- },
- "metadata": {
- "application/vnd.bokehjs_exec.v0+json": {
- "id": "1430"
- }
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "hidden_code_nb_diagrams.main_code(L, h, b, A, Iy, Iz, q, P, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "## **Legend**\n",
- "\n",
- "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
- "\n",
- "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
- "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
- "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
- "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
- "* **Textbox \"Geometrical and mechanical parameters:** small summary with the value of h, b, L, A (area), Iy (inertia with respect to the strong axis) and Iz (inertia with respect to the weak axis).\n",
- "* **Textbox \"Forces and Moments:** small summary with the value of the magnitude of the reaction forces and the internal forces at the position x.\n",
- "* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
- "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
- "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
- "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
- "* **Button of the force P:** apply or remove the external force P.\n",
- "* **Figures \"N V M Diagrams\":** plots that show the axial force N, shear force V and bending moment M diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
- "\n",
- "### Recommendations\n",
- "\n",
- "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully."
- ]
- }
- ],
- "metadata": {
- "interpreter": {
- "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
- },
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/Simple Beam DEMOs/sb_mohr.ipynb b/Simple Beam DEMOs/sb_mohr.ipynb
deleted file mode 100644
index 38281f1..0000000
--- a/Simple Beam DEMOs/sb_mohr.ipynb
+++ /dev/null
@@ -1,502 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Simple beam - Mohr Circle\n",
- "In this first notebook, the Mohr circle is presented."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- " <div class=\"bk-root\">\n",
- " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
- " <span id=\"1002\">Loading BokehJS ...</span>\n",
- " </div>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "\n",
- "(function(root) {\n",
- " function now() {\n",
- " return new Date();\n",
- " }\n",
- "\n",
- " const force = true;\n",
- "\n",
- " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
- " root._bokeh_onload_callbacks = [];\n",
- " root._bokeh_is_loading = undefined;\n",
- " }\n",
- "\n",
- " const JS_MIME_TYPE = 'application/javascript';\n",
- " const HTML_MIME_TYPE = 'text/html';\n",
- " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
- " const CLASS_NAME = 'output_bokeh rendered_html';\n",
- "\n",
- " /**\n",
- " * Render data to the DOM node\n",
- " */\n",
- " function render(props, node) {\n",
- " const script = document.createElement(\"script\");\n",
- " node.appendChild(script);\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when an output is cleared or removed\n",
- " */\n",
- " function handleClearOutput(event, handle) {\n",
- " const cell = handle.cell;\n",
- "\n",
- " const id = cell.output_area._bokeh_element_id;\n",
- " const server_id = cell.output_area._bokeh_server_id;\n",
- " // Clean up Bokeh references\n",
- " if (id != null && id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- "\n",
- " if (server_id !== undefined) {\n",
- " // Clean up Bokeh references\n",
- " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
- " cell.notebook.kernel.execute(cmd_clean, {\n",
- " iopub: {\n",
- " output: function(msg) {\n",
- " const id = msg.content.text.trim();\n",
- " if (id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- " }\n",
- " }\n",
- " });\n",
- " // Destroy server and session\n",
- " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
- " cell.notebook.kernel.execute(cmd_destroy);\n",
- " }\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when a new output is added\n",
- " */\n",
- " function handleAddOutput(event, handle) {\n",
- " const output_area = handle.output_area;\n",
- " const output = handle.output;\n",
- "\n",
- " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
- " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
- " return\n",
- " }\n",
- "\n",
- " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
- "\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
- " // store reference to embed id on output_area\n",
- " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
- " }\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
- " const bk_div = document.createElement(\"div\");\n",
- " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
- " const script_attrs = bk_div.children[0].attributes;\n",
- " for (let i = 0; i < script_attrs.length; i++) {\n",
- " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
- " }\n",
- " // store reference to server id on output_area\n",
- " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
- " }\n",
- " }\n",
- "\n",
- " function register_renderer(events, OutputArea) {\n",
- "\n",
- " function append_mime(data, metadata, element) {\n",
- " // create a DOM node to render to\n",
- " const toinsert = this.create_output_subarea(\n",
- " metadata,\n",
- " CLASS_NAME,\n",
- " EXEC_MIME_TYPE\n",
- " );\n",
- " this.keyboard_manager.register_events(toinsert);\n",
- " // Render to node\n",
- " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
- " render(props, toinsert[toinsert.length - 1]);\n",
- " element.append(toinsert);\n",
- " return toinsert\n",
- " }\n",
- "\n",
- " /* Handle when an output is cleared or removed */\n",
- " events.on('clear_output.CodeCell', handleClearOutput);\n",
- " events.on('delete.Cell', handleClearOutput);\n",
- "\n",
- " /* Handle when a new output is added */\n",
- " events.on('output_added.OutputArea', handleAddOutput);\n",
- "\n",
- " /**\n",
- " * Register the mime type and append_mime function with output_area\n",
- " */\n",
- " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
- " /* Is output safe? */\n",
- " safe: true,\n",
- " /* Index of renderer in `output_area.display_order` */\n",
- " index: 0\n",
- " });\n",
- " }\n",
- "\n",
- " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
- " if (root.Jupyter !== undefined) {\n",
- " const events = require('base/js/events');\n",
- " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
- "\n",
- " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
- " register_renderer(events, OutputArea);\n",
- " }\n",
- " }\n",
- "\n",
- " \n",
- " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
- " root._bokeh_timeout = Date.now() + 5000;\n",
- " root._bokeh_failed_load = false;\n",
- " }\n",
- "\n",
- " const NB_LOAD_WARNING = {'data': {'text/html':\n",
- " \"<div style='background-color: #fdd'>\\n\"+\n",
- " \"<p>\\n\"+\n",
- " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
- " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
- " \"</p>\\n\"+\n",
- " \"<ul>\\n\"+\n",
- " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
- " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
- " \"</ul>\\n\"+\n",
- " \"<code>\\n\"+\n",
- " \"from bokeh.resources import INLINE\\n\"+\n",
- " \"output_notebook(resources=INLINE)\\n\"+\n",
- " \"</code>\\n\"+\n",
- " \"</div>\"}};\n",
- "\n",
- " function display_loaded() {\n",
- " const el = document.getElementById(\"1002\");\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS is loading...\";\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
- " }\n",
- " } else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(display_loaded, 100)\n",
- " }\n",
- " }\n",
- "\n",
- "\n",
- " function run_callbacks() {\n",
- " try {\n",
- " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
- " if (callback != null)\n",
- " callback();\n",
- " });\n",
- " } finally {\n",
- " delete root._bokeh_onload_callbacks\n",
- " }\n",
- " console.debug(\"Bokeh: all callbacks have finished\");\n",
- " }\n",
- "\n",
- " function load_libs(css_urls, js_urls, callback) {\n",
- " if (css_urls == null) css_urls = [];\n",
- " if (js_urls == null) js_urls = [];\n",
- "\n",
- " root._bokeh_onload_callbacks.push(callback);\n",
- " if (root._bokeh_is_loading > 0) {\n",
- " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
- " return null;\n",
- " }\n",
- " if (js_urls == null || js_urls.length === 0) {\n",
- " run_callbacks();\n",
- " return null;\n",
- " }\n",
- " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
- " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
- "\n",
- " function on_load() {\n",
- " root._bokeh_is_loading--;\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
- " run_callbacks()\n",
- " }\n",
- " }\n",
- "\n",
- " function on_error(url) {\n",
- " console.error(\"failed to load \" + url);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < css_urls.length; i++) {\n",
- " const url = css_urls[i];\n",
- " const element = document.createElement(\"link\");\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.rel = \"stylesheet\";\n",
- " element.type = \"text/css\";\n",
- " element.href = url;\n",
- " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < js_urls.length; i++) {\n",
- " const url = js_urls[i];\n",
- " const element = document.createElement('script');\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.async = false;\n",
- " element.src = url;\n",
- " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
- " document.head.appendChild(element);\n",
- " }\n",
- " };\n",
- "\n",
- " function inject_raw_css(css) {\n",
- " const element = document.createElement(\"style\");\n",
- " element.appendChild(document.createTextNode(css));\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " \n",
- " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
- " const css_urls = [];\n",
- " \n",
- "\n",
- " const inline_js = [\n",
- " function(Bokeh) {\n",
- " Bokeh.set_log_level(\"info\");\n",
- " },\n",
- " function(Bokeh) {\n",
- " \n",
- " \n",
- " }\n",
- " ];\n",
- "\n",
- " function run_inline_js() {\n",
- " \n",
- " if (root.Bokeh !== undefined || force === true) {\n",
- " \n",
- " for (let i = 0; i < inline_js.length; i++) {\n",
- " inline_js[i].call(root, root.Bokeh);\n",
- " }\n",
- " if (force === true) {\n",
- " display_loaded();\n",
- " }} else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(run_inline_js, 100);\n",
- " } else if (!root._bokeh_failed_load) {\n",
- " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
- " root._bokeh_failed_load = true;\n",
- " } else if (force !== true) {\n",
- " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
- " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
- " }\n",
- "\n",
- " }\n",
- "\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
- " run_inline_js();\n",
- " } else {\n",
- " load_libs(css_urls, js_urls, function() {\n",
- " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
- " run_inline_js();\n",
- " });\n",
- " }\n",
- "}(window));"
- ],
- "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Import the packages needed\n",
- "import sys\n",
- "sys.path.append('../HiddenCode')\n",
- "import hidden_code_nb_mohr\n",
- "import math\n",
- "import numpy as np\n",
- "from cienpy import simplebeam as sb\n",
- "from cienpy import rectangular_section as beam_section\n",
- "from cienpy import stress_strain_elastic as stst\n",
- "from cienpy import mohrcircle"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the geometry and uniform load. Note that given the graphical nature of the notebook, extreme cases can cause the figures to not be displayed."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Choose the dimensions\n",
- "L = 6 # [m]\n",
- "h = 200 # [mm]\n",
- "b = 100 # [mm]\n",
- "q = 4; # [kN/m]\n",
- "P = 10; # [kN]\n",
- "\n",
- "# Choose the material parameters\n",
- "E = 200e3 # [MPa]\n",
- "\n",
- "# compute the internal forces (at x=L)\n",
- "discr_NVM = 100\n",
- "x_discr = np.linspace(0, L, discr_NVM)\n",
- "N_discr = sb.compute_N(x_discr, P)\n",
- "V_discr = sb.compute_V(x_discr, q, L)\n",
- "M_discr = sb.compute_M(x_discr, q, L)\n",
- "N = N_discr[-1]\n",
- "V = V_discr[-1]\n",
- "M = M_discr[-1]\n",
- "\n",
- "# compute the parameters\n",
- "A = beam_section.compute_area(b, h) # [mm2]\n",
- "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
- "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
- "yG = beam_section.compute_centroid_y(h)\n",
- "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
- "\n",
- "# compute the reactions\n",
- "Rx = sb.compute_Rx(P)\n",
- "Ry_l = sb.compute_Ry_l(q, L)\n",
- "Ry_r = sb.compute_Ry_r(q, L)\n",
- "\n",
- "# compute Mohr circle parameters\n",
- "initial_y = h\n",
- "initial_theta_element = 0\n",
- "sigma_axial = stst.compute_sigma_axial(initial_y, N, A)\n",
- "sigma_bending = stst.compute_sigma_bending(initial_y, M, Iy, yG)\n",
- "S = beam_section. compute_first_moment_of_area(initial_y, b, h, yG)\n",
- "sigma_tau = stst.compute_tau_shear(initial_y, V, S, Iy, b)\n",
- "sigma_x0 = stst.compute_total_sigma(sigma_axial, sigma_bending)\n",
- "sigma_y0 = 0 # no vertical axial forces\n",
- "tau_0 = stst.compute_total_tau(sigma_tau)\n",
- "sigma_average_mohr = mohrcircle.compute_sigma_average_mohr(sigma_x0, sigma_y0)\n",
- "r_circle_mohr = mohrcircle.compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\n",
- "theta_principal = mohrcircle.compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\n",
- "initial_theta = mohrcircle.compute_theta_mohr(initial_theta_element, theta_principal)\n",
- "\n",
- "# stress state in function of theta\n",
- "new_state = mohrcircle.compute_stress_state_mohr(sigma_average_mohr, r_circle_mohr, initial_theta)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run the complex code for the interactive visualisation:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- " <div class=\"bk-root\" id=\"2e089feb-3b1b-4ecc-9884-faba18e88063\" data-root-id=\"2162\"></div>\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "(function(root) {\n",
- " function embed_document(root) {\n",
- " \n",
- " const docs_json = {\"4091ddde-7c54-4fd2-a6a6-4bb0c025871d\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"2161\"}]},\"id\":\"2162\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1328\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2299\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1379\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2200\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2388\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1326\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1381\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1345\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2201\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1331\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2389\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2310\"},\"group\":null,\"major_label_policy\":{\"id\":\"2311\"},\"ticker\":{\"id\":\"1331\"}},\"id\":\"1330\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1378\"}},\"id\":\"1383\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1666\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1380\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1674\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1330\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1333\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1419\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1422\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2390\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2488\"},\"selection_policy\":{\"id\":\"2487\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1692\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2307\"},\"group\":null,\"major_label_policy\":{\"id\":\"2308\"},\"ticker\":{\"id\":\"1335\"}},\"id\":\"1334\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1386\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2391\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1334\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1337\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1391\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1709\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1711\"},\"nonselection_glyph\":{\"id\":\"1710\"},\"view\":{\"id\":\"1713\"}},\"id\":\"1712\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1335\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1387\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1391\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1393\"},\"nonselection_glyph\":{\"id\":\"1392\"},\"view\":{\"id\":\"1395\"}},\"id\":\"1394\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2331\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1677\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2242\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1389\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1338\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1409\",\"type\":\"Title\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1679\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2243\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1344\"}},\"id\":\"1340\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2332\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1392\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2480\"},\"selection_policy\":{\"id\":\"2479\"}},\"id\":\"1678\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1342\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1678\"},\"glyph\":{\"id\":\"1679\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1681\"},\"nonselection_glyph\":{\"id\":\"1680\"},\"view\":{\"id\":\"1683\"}},\"id\":\"1682\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1420\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1678\"}},\"id\":\"1683\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2501\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1395\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1680\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2423\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2244\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1393\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1344\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1419\"}],\"center\":[{\"id\":\"1422\"},{\"id\":\"1426\"}],\"height\":200,\"left\":[{\"id\":\"1423\"}],\"renderers\":[{\"id\":\"1652\"},{\"id\":\"1658\"},{\"id\":\"1664\"}],\"title\":{\"id\":\"1409\"},\"toolbar\":{\"id\":\"1435\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1411\"},\"x_scale\":{\"id\":\"1415\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1417\"}},\"id\":\"1408\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2497\"},\"selection_policy\":{\"id\":\"2496\"}},\"id\":\"1696\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1699\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1354\"},\"glyph\":{\"id\":\"1355\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1357\"},\"nonselection_glyph\":{\"id\":\"1356\"},\"view\":{\"id\":\"1359\"}},\"id\":\"1358\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2202\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2245\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1691\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1695\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2424\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2203\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2483\"},\"selection_policy\":{\"id\":\"2482\"}},\"id\":\"1702\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1696\"},\"glyph\":{\"id\":\"1697\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1699\"},\"nonselection_glyph\":{\"id\":\"1698\"},\"view\":{\"id\":\"1701\"}},\"id\":\"1700\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2426\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1705\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2246\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1698\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1702\"},\"glyph\":{\"id\":\"1703\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1705\"},\"nonselection_glyph\":{\"id\":\"1704\"},\"view\":{\"id\":\"1707\"}},\"id\":\"1706\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2427\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2333\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2247\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2396\"},\"group\":null,\"major_label_policy\":{\"id\":\"2397\"},\"ticker\":{\"id\":\"1420\"}},\"id\":\"1419\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1434\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1696\"}},\"id\":\"1701\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2301\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2334\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1702\"}},\"id\":\"1707\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1710\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2393\"},\"group\":null,\"major_label_policy\":{\"id\":\"2394\"},\"ticker\":{\"id\":\"1424\"},\"visible\":false},\"id\":\"1423\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1704\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2248\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2302\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1423\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1426\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1354\"}},\"id\":\"1359\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1424\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2249\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2304\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1785\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2204\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1711\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2305\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1433\"}},\"id\":\"1429\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1338\"},{\"id\":\"1339\"},{\"id\":\"1340\"},{\"id\":\"1341\"},{\"id\":\"1342\"},{\"id\":\"1343\"},{\"id\":\"1345\"}]},\"id\":\"1346\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2393\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2205\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2250\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1431\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1713\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2394\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2485\"},\"selection_policy\":{\"id\":\"2484\"}},\"id\":\"1714\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2251\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1433\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1714\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2396\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1714\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2206\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2252\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2397\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1357\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1720\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1521\"}],\"center\":[{\"id\":\"1524\"},{\"id\":\"1528\"}],\"height\":200,\"left\":[{\"id\":\"1525\"}],\"renderers\":[{\"id\":\"1762\"},{\"id\":\"1768\"},{\"id\":\"1774\"}],\"title\":{\"id\":\"1512\"},\"toolbar\":{\"id\":\"1537\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1514\"},\"x_scale\":{\"id\":\"1517\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1519\"}},\"id\":\"1511\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2253\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1355\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2370\"},\"selection_policy\":{\"id\":\"2369\"}},\"id\":\"1354\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1720\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2500\"},\"selection_policy\":{\"id\":\"2499\"}},\"id\":\"1720\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1501\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1745\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1747\"},\"nonselection_glyph\":{\"id\":\"1746\"},\"view\":{\"id\":\"1749\"}},\"id\":\"1748\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1356\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2207\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2461\"},\"selection_policy\":{\"id\":\"2460\"}},\"id\":\"1738\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2256\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2429\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1373\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1375\"},\"nonselection_glyph\":{\"id\":\"1374\"},\"view\":{\"id\":\"1377\"}},\"id\":\"1376\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2257\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1377\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1733\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1738\"}},\"id\":\"1743\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2430\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1365\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2502\"},\"selection_policy\":{\"id\":\"2501\"}},\"id\":\"1732\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1367\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2432\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"tools\":[{\"id\":\"1427\"},{\"id\":\"1428\"},{\"id\":\"1429\"},{\"id\":\"1430\"},{\"id\":\"1431\"},{\"id\":\"1432\"},{\"id\":\"1434\"}]},\"id\":\"1435\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1732\"},\"glyph\":{\"id\":\"1733\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1735\"},\"nonselection_glyph\":{\"id\":\"1734\"},\"view\":{\"id\":\"1737\"}},\"id\":\"1736\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2258\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-12.0,-11.757575757575758,-11.515151515151516,-11.272727272727273,-11.030303030303031,-10.787878787878787,-10.545454545454545,-10.303030303030303,-10.06060606060606,-9.818181818181818,-9.575757575757576,-9.333333333333332,-9.09090909090909,-8.848484848484848,-8.606060606060606,-8.363636363636363,-8.121212121212121,-7.878787878787879,-7.636363636363637,-7.393939393939394,-7.151515151515151,-6.909090909090909,-6.666666666666666,-6.424242424242424,-6.181818181818182,-5.9393939393939394,-5.696969696969697,-5.454545454545454,-5.212121212121212,-4.96969696969697,-4.727272727272727,-4.484848484848484,-4.242424242424242,-4.0,-3.757575757575758,-3.5151515151515156,-3.2727272727272734,-3.0303030303030294,-2.787878787878787,-2.545454545454545,-2.3030303030303028,-2.0606060606060606,-1.8181818181818183,-1.5757575757575761,-1.3333333333333321,-1.09090909090909,-0.8484848484848477,-0.6060606060606055,-0.3636363636363633,-0.1212121212121211,0.1212121212121211,0.3636363636363633,0.6060606060606055,0.8484848484848495,1.0909090909090917,1.333333333333334,1.5757575757575761,1.8181818181818183,2.0606060606060606,2.3030303030303028,2.5454545454545467,2.787878787878789,3.030303030303031,3.2727272727272734,3.5151515151515156,3.757575757575758,4.0,4.242424242424242,4.484848484848484,4.727272727272727,4.969696969696969,5.212121212121211,5.454545454545453,5.696969696969699,5.939393939393941,6.181818181818183,6.424242424242426,6.666666666666668,6.90909090909091,7.151515151515152,7.3939393939393945,7.636363636363637,7.878787878787879,8.121212121212121,8.363636363636363,8.606060606060606,8.848484848484848,9.09090909090909,9.333333333333336,9.575757575757578,9.81818181818182,10.060606060606062,10.303030303030305,10.545454545454547,10.787878787878789,11.030303030303031,11.272727272727273,11.515151515151516,11.757575757575758,12.0,0]},\"selected\":{\"id\":\"2375\"},\"selection_policy\":{\"id\":\"2374\"}},\"id\":\"1366\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1734\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2433\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1366\"},\"glyph\":{\"id\":\"1367\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1369\"},\"nonselection_glyph\":{\"id\":\"1368\"},\"view\":{\"id\":\"1371\"}},\"id\":\"1370\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1738\"},\"glyph\":{\"id\":\"1739\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1741\"},\"nonselection_glyph\":{\"id\":\"1740\"},\"view\":{\"id\":\"1743\"}},\"id\":\"1742\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2336\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2259\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-0.0,-0.7199265381083563,-1.4251606978879707,-2.115702479338843,-2.7915518824609737,-3.452708907254362,-4.099173553719009,-4.730945821854913,-5.348025711662076,-5.950413223140496,-6.5381083562901745,-7.111111111111112,-7.669421487603306,-8.213039485766759,-8.74196510560147,-9.25619834710744,-9.755739210284665,-10.240587695133149,-10.710743801652892,-11.166207529843895,-11.606978879706153,-12.03305785123967,-12.444444444444445,-12.841138659320476,-13.223140495867767,-13.590449954086317,-13.943067033976122,-14.28099173553719,-14.604224058769512,-14.912764003673093,-15.206611570247935,-15.485766758494032,-15.750229568411386,-16.0,-16.235078053259873,-16.455463728191,-16.661157024793386,-16.852157943067034,-17.02846648301194,-17.1900826446281,-17.33700642791552,-17.469237832874196,-17.58677685950413,-17.689623507805326,-17.77777777777778,-17.85123966942149,-17.910009182736456,-17.95408631772268,-17.983471074380166,-17.99816345270891,-17.99816345270891,-17.983471074380166,-17.95408631772268,-17.910009182736456,-17.85123966942149,-17.77777777777778,-17.689623507805326,-17.58677685950413,-17.469237832874196,-17.33700642791552,-17.1900826446281,-17.028466483011936,-16.852157943067034,-16.661157024793386,-16.455463728191,-16.235078053259873,-16.0,-15.750229568411386,-15.485766758494032,-15.206611570247935,-14.912764003673095,-14.604224058769514,-14.280991735537192,-13.943067033976122,-13.590449954086315,-13.223140495867765,-12.841138659320475,-12.444444444444443,-12.033057851239668,-11.606978879706151,-11.166207529843893,-10.710743801652892,-10.240587695133149,-9.755739210284665,-9.25619834710744,-8.741965105601471,-8.21303948576676,-7.669421487603308,-7.111111111111105,-6.538108356290169,-5.950413223140491,-5.348025711662071,-4.730945821854909,-4.099173553719005,-3.452708907254359,-2.791551882460971,-2.1157024793388413,-1.4251606978879694,-0.7199265381083556,0.0,0]},\"selected\":{\"id\":\"2378\"},\"selection_policy\":{\"id\":\"2377\"}},\"id\":\"1378\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1732\"}},\"id\":\"1737\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1366\"}},\"id\":\"1371\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1368\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2337\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1739\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1378\"},\"glyph\":{\"id\":\"1379\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1381\"},\"nonselection_glyph\":{\"id\":\"1380\"},\"view\":{\"id\":\"1383\"}},\"id\":\"1382\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2307\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1781\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1385\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1387\"},\"nonselection_glyph\":{\"id\":\"1386\"},\"view\":{\"id\":\"1389\"}},\"id\":\"1388\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2208\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1783\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2260\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1374\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1446\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2308\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1449\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1453\"}],\"center\":[{\"id\":\"1456\"},{\"id\":\"1460\"}],\"height\":200,\"left\":[{\"id\":\"1457\"}],\"renderers\":[{\"id\":\"1742\"},{\"id\":\"1748\"},{\"id\":\"1754\"}],\"title\":{\"id\":\"1444\"},\"toolbar\":{\"id\":\"1469\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1446\"},\"x_scale\":{\"id\":\"1449\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1451\"}},\"id\":\"1443\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2209\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1373\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1740\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1745\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2263\"},\"selection_policy\":{\"id\":\"2262\"}},\"id\":\"2187\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2460\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2461\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1859\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2265\"},\"selection_policy\":{\"id\":\"2264\"}},\"id\":\"2188\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2444\"},\"selection_policy\":{\"id\":\"2443\"}},\"id\":\"2352\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2218\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2446\"},\"selection_policy\":{\"id\":\"2445\"}},\"id\":\"2353\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2267\"},\"selection_policy\":{\"id\":\"2266\"}},\"id\":\"2189\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2219\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2443\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2269\"},\"selection_policy\":{\"id\":\"2268\"}},\"id\":\"2190\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1697\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2444\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2462\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2271\"},\"selection_policy\":{\"id\":\"2270\"}},\"id\":\"2191\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2445\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2463\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2273\"},\"selection_policy\":{\"id\":\"2272\"}},\"id\":\"2192\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2446\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1866\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2502\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2220\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2374\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2221\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1823\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2375\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2464\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1869\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2465\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2354\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1564\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2355\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2482\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2196\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2356\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2357\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2198\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"1570\"}},\"id\":\"1566\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2223\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2224\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2467\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2468\",\"type\":\"Selection\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2095\",\"type\":\"Text\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1756\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1746\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2093\"}},\"id\":\"2098\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1761\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2211\"},\"selection_policy\":{\"id\":\"2210\"}},\"id\":\"2099\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2096\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2323\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1753\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2093\"},\"glyph\":{\"id\":\"2094\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2096\"},\"nonselection_glyph\":{\"id\":\"2095\"},\"view\":{\"id\":\"2098\"}},\"id\":\"2097\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1749\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"blue\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2100\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2324\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1751\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2101\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2465\"},\"selection_policy\":{\"id\":\"2464\"}},\"id\":\"1750\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2106\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1750\"},\"glyph\":{\"id\":\"1751\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1753\"},\"nonselection_glyph\":{\"id\":\"1752\"},\"view\":{\"id\":\"1755\"}},\"id\":\"1754\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"2105\"}},\"id\":\"2110\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1759\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2108\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1752\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2102\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1758\"},\"glyph\":{\"id\":\"1759\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1761\"},\"nonselection_glyph\":{\"id\":\"1760\"},\"view\":{\"id\":\"1763\"}},\"id\":\"1762\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2099\"},\"glyph\":{\"id\":\"2100\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2102\"},\"nonselection_glyph\":{\"id\":\"2101\"},\"view\":{\"id\":\"2104\"}},\"id\":\"2103\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1750\"}},\"id\":\"1755\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"2099\"}},\"id\":\"2104\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1766\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"blue\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2107\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2473\"},\"selection_policy\":{\"id\":\"2472\"}},\"id\":\"1758\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2213\"},\"selection_policy\":{\"id\":\"2212\"}},\"id\":\"2105\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1793\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1796\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2113\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1758\"}},\"id\":\"1763\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1760\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2105\"},\"glyph\":{\"id\":\"2106\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2108\"},\"nonselection_glyph\":{\"id\":\"2107\"},\"view\":{\"id\":\"2110\"}},\"id\":\"2109\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1776\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"data\":{\"text\":[\"Fixed element \\n(\\u03c3\\u2093\\u2080, \\u03c4\\u2080)\",\"Fixed element \\n(\\u03c3\\u1d67\\u2080, -\\u03c4\\u2080)\"],\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2215\"},\"selection_policy\":{\"id\":\"2214\"}},\"id\":\"2111\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1595\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2112\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2217\"},\"selection_policy\":{\"id\":\"2216\"}},\"id\":\"2117\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1790\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"red\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2118\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1789\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1792\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2325\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2119\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1767\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2326\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1773\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2114\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1769\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2111\"},\"glyph\":{\"id\":\"2112\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2114\"},\"nonselection_glyph\":{\"id\":\"2113\"},\"view\":{\"id\":\"2116\"}},\"id\":\"2115\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2111\"}},\"id\":\"2116\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1798\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2219\"},\"selection_policy\":{\"id\":\"2218\"}},\"id\":\"2123\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2475\"},\"selection_policy\":{\"id\":\"2474\"}},\"id\":\"1770\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"2123\"}},\"id\":\"2128\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2381\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2124\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1770\"},\"glyph\":{\"id\":\"1771\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1773\"},\"nonselection_glyph\":{\"id\":\"1772\"},\"view\":{\"id\":\"1775\"}},\"id\":\"1774\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2120\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2117\"},\"glyph\":{\"id\":\"2118\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2120\"},\"nonselection_glyph\":{\"id\":\"2119\"},\"view\":{\"id\":\"2122\"}},\"id\":\"2121\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2382\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1772\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2117\"}},\"id\":\"2122\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2384\"},\"group\":null,\"major_label_policy\":{\"id\":\"2385\"},\"ticker\":{\"id\":\"1790\"},\"visible\":false},\"id\":\"1789\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1568\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2126\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1770\"}},\"id\":\"1775\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"red\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":5},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2125\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2384\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_color\":{\"value\":\"red\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":-5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2130\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1779\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2129\"},\"glyph\":{\"id\":\"2130\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2132\"},\"nonselection_glyph\":{\"id\":\"2131\"},\"view\":{\"id\":\"2134\"}},\"id\":\"2133\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2381\"},\"group\":null,\"major_label_policy\":{\"id\":\"2382\"},\"ticker\":{\"id\":\"1794\"},\"visible\":false},\"id\":\"1793\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"text\":[\"Rotating element \\n(\\u03c3\\u2093, \\u03c4)\",\"Rotating element \\n(\\u03c3\\u1d67, -\\u03c4)\"],\"x\":[-0.5,0.0],\"y\":[0,-0.0]},\"selected\":{\"id\":\"2221\"},\"selection_policy\":{\"id\":\"2220\"}},\"id\":\"2129\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1822\"}],\"center\":[{\"id\":\"1825\"},{\"id\":\"1829\"},{\"id\":\"1860\"}],\"height\":200,\"left\":[{\"id\":\"1826\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1812\"},\"toolbar\":{\"id\":\"1837\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1814\"},\"x_scale\":{\"id\":\"1818\"},\"y_range\":{\"id\":\"1816\"},\"y_scale\":{\"id\":\"1820\"}},\"id\":\"1811\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2385\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2123\"},\"glyph\":{\"id\":\"2124\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2126\"},\"nonselection_glyph\":{\"id\":\"2125\"},\"view\":{\"id\":\"2128\"}},\"id\":\"2127\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2327\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1794\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":-5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2131\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"2129\"}},\"id\":\"2134\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2328\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1802\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1797\",\"type\":\"PanTool\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1670\"},\"Mohr_circle\":{\"id\":\"2073\"},\"N_stress_diag\":{\"id\":\"1652\"},\"V_stress_diag\":{\"id\":\"1688\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arr_head\":{\"id\":\"1247\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1718\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n const N = compute_N(db['P'][0])\\n const V = compute_V(pos, q, L)\\n const M = compute_M(pos, q, L)\\n\\n // update data\\n db['N'][0] = N\\n db['V'][0] = V\\n db['M'][0] = M\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n \\n const y_var = db['y_var'][0]\\n const A = db['A'][0]\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const yG = db['yG'][0]\\n const Iy = db['Iy'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n \\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2135\",\"type\":\"CustomJS\"},{\"attributes\":{\"overlay\":{\"id\":\"1803\"}},\"id\":\"1799\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":-5},\"y\":{\"field\":\"y\"},\"y_offset\":{\"value\":18}},\"id\":\"2132\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1801\",\"type\":\"ResetTool\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1670\"},\"Mohr_circle\":{\"id\":\"2073\"},\"N_stress_diag\":{\"id\":\"1652\"},\"V_stress_diag\":{\"id\":\"1688\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div\":{\"id\":\"1119\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1718\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"section\":{\"id\":\"1117\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1057\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const V = db['V'][0]\\n const y_var = db['y_var'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2136\",\"type\":\"CustomJS\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1803\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2459\"},\"selection_policy\":{\"id\":\"2458\"}},\"id\":\"2386\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1670\"},\"Mohr_circle\":{\"id\":\"2073\"},\"N_stress_diag\":{\"id\":\"1652\"},\"V_stress_diag\":{\"id\":\"1688\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"beam\":{\"id\":\"1045\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div\":{\"id\":\"1119\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1718\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1117\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"slider_y\":{\"id\":\"1899\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1057\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // solve sliders conflict\\n const db = source.data\\n const h = cb_obj.value // value of the slider\\n if (h < db['y_var'][0]) {\\n db['y_var'][0] = h\\n }\\n slider_y.end = h\\n if (h < slider_y.value) {\\n slider_y.value = h\\n }\\n\\n // retrieve data used\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const V = db['V'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n const y_var = db['y_var'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n beam.glyph.height = h // change the beam height\\n beam.glyph.y = h/2\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2137\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"Mohr_circle\":{\"id\":\"2073\"},\"N_diag\":{\"id\":\"1358\"},\"N_stress_diag\":{\"id\":\"1652\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arr_head\":{\"id\":\"1247\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"axial_strain_diag\":{\"id\":\"1742\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1718\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_M\":{\"id\":\"1236\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const P = 10*(1-f)\\n const db = source.data\\n const N = compute_N(P)\\n const M = db['M'][0]\\n const A = db['A'][0]\\n const Iy = db['Iy'][0]\\n const yG = db['yG'][0]\\n const y_var = db['y_var'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = db['tau_0'][0]\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // apply the changes\\n db['P'][0] = P\\n db['N'][0] = N\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=100) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2138\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1247\"},\"div_P\":{\"id\":\"1253\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"2139\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2329\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1382\"},\"M_stress_diag\":{\"id\":\"1670\"},\"Mohr_circle\":{\"id\":\"2073\"},\"V_diag\":{\"id\":\"1370\"},\"V_stress_diag\":{\"id\":\"1688\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arr_head\":{\"id\":\"1247\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"bending_strain_diag\":{\"id\":\"1762\"},\"centroid\":{\"id\":\"1682\"},\"div_P\":{\"id\":\"1253\"},\"div_f\":{\"id\":\"1255\"},\"fN\":{\"id\":\"1231\"},\"fP\":{\"id\":\"1219\"},\"fRx\":{\"id\":\"1228\"},\"fRyl\":{\"id\":\"1225\"},\"fRyr\":{\"id\":\"1222\"},\"fV\":{\"id\":\"1234\"},\"label_M_section\":{\"id\":\"1885\"},\"label_N_section\":{\"id\":\"1879\"},\"label_V_section\":{\"id\":\"1891\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"neutral_axis\":{\"id\":\"1718\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"s_M\":{\"id\":\"1236\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1862\"},\"section_M_head\":{\"id\":\"1873\"},\"section_N\":{\"id\":\"1857\"},\"section_V\":{\"id\":\"1860\"},\"sigma_stress_diag\":{\"id\":\"1706\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1724\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n const N = db['N'][0]\\n const V = compute_V(pos, q, L)\\n const M = compute_M(pos, q, L)\\n const y_var = db['y_var'][0]\\n const A = db['A'][0]\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const yG = db['yG'][0]\\n const Iy = db['Iy'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['q'][0] = q\\n db['V'][0] = V\\n db['M'][0] = M\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n // Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2140\",\"type\":\"CustomJS\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2330\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"Mohr_circle\":{\"id\":\"2073\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_element\":{\"id\":\"2007\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"beam_position\":{\"id\":\"1897\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_stress_state_theta\":{\"id\":\"1995\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_element\":{\"id\":\"2013\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"rotating_axis\":{\"id\":\"2001\"},\"source\":{\"id\":\"1007\"},\"stress_state_theta\":{\"id\":\"1989\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const theta_element = cb_obj.value/180*Math.PI\\n const sigma_x0 = db['sigma_x0'][0]\\n const sigma_y0 = db['sigma_y0'][0]\\n const tau_0 = db['tau_0'][0]\\n const sigma_average = db['sigma_average'][0]\\n const r_circle = db['r_circle_mohr'][0]\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta_element'][0] = theta_element\\n db['theta'][0] = theta\\n\\n // update\\n // square point:\\n beam_position.glyph.angle = theta_element\\n // stress state element\\n update_stress_state_elements(db, stress_state_theta, rotating_axis, label_stress_state_theta, arc_theta_element, label_theta_element)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n // update Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_stress_state_elements(data, glyph_stress_state_theta, glyph_axis, glyph_label_element_theta, glyph_arc_theta, glyph_label_theta, max_stress=60, max_dim=150.0) {\\n // set variables\\n const theta_element = data['theta_element'][0]\\n const x_new = max_stress*Math.cos(theta_element)\\n const y_new = max_stress*Math.sin(theta_element)\\n \\n \\n // update rotating axis\\n const src_axis = glyph_axis.data_source\\n src_axis.data.x = [0, x_new*max_dim/max_stress]\\n src_axis.data.y = [0, y_new*max_dim/max_stress]\\n src_axis.change.emit()\\n \\n // update stress state theta\\n glyph_stress_state_theta.glyph.angle = theta_element\\n glyph_stress_state_theta.glyph.x = x_new*2\\n glyph_stress_state_theta.glyph.y = y_new*2\\n \\n // label element\\n const src_label_element = glyph_label_element_theta.data_source\\n src_label_element.data.x = [x_new*2]\\n src_label_element.data.y = [y_new*2]\\n src_label_element.change.emit()\\n \\n // arc theta (stress state)\\n glyph_arc_theta.glyph.end_angle = theta_element\\n \\n // label theta (stress state)\\n if (theta_element==0) {\\n glyph_label_theta.glyph.text = \\\"\\\"\\n } else {\\n glyph_label_theta.glyph.text = \\\"\\u03b8\\\"\\n const src_label_theta = glyph_label_theta.data_source\\n src_label_theta.data.x = [max_stress*Math.cos(theta_element/2)]\\n src_label_theta.data.y = [max_stress*Math.sin(theta_element/2)]\\n src_label_theta.change.emit()\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2141\",\"type\":\"CustomJS\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"args\":{\"Mohr_circle\":{\"id\":\"2073\"},\"arc_theta_Mohr\":{\"id\":\"2079\"},\"arc_theta_p_Mohr\":{\"id\":\"2091\"},\"arrow_sigma_x1\":{\"id\":\"2022\"},\"arrow_sigma_x1_theta\":{\"id\":\"2046\"},\"arrow_sigma_x2\":{\"id\":\"2025\"},\"arrow_sigma_x2_theta\":{\"id\":\"2049\"},\"arrow_sigma_y1\":{\"id\":\"2028\"},\"arrow_sigma_y1_theta\":{\"id\":\"2052\"},\"arrow_sigma_y2\":{\"id\":\"2031\"},\"arrow_sigma_y2_theta\":{\"id\":\"2055\"},\"arrow_tau_x1\":{\"id\":\"2034\"},\"arrow_tau_x1_theta\":{\"id\":\"2058\"},\"arrow_tau_x2\":{\"id\":\"2037\"},\"arrow_tau_x2_theta\":{\"id\":\"2061\"},\"arrow_tau_y1\":{\"id\":\"2040\"},\"arrow_tau_y1_theta\":{\"id\":\"2064\"},\"arrow_tau_y2\":{\"id\":\"2043\"},\"arrow_tau_y2_theta\":{\"id\":\"2067\"},\"beam_position\":{\"id\":\"1897\"},\"label_points_stress_state\":{\"id\":\"2115\"},\"label_points_stress_state_theta\":{\"id\":\"2133\"},\"label_theta_Mohr\":{\"id\":\"2085\"},\"label_theta_p_Mohr\":{\"id\":\"2097\"},\"line_stress_state\":{\"id\":\"2103\"},\"line_stress_state_theta\":{\"id\":\"2121\"},\"points_stress_state\":{\"id\":\"2109\"},\"points_stress_state_theta\":{\"id\":\"2127\"},\"source\":{\"id\":\"1007\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const y_var = cb_obj.value\\n const N = db['N'][0]\\n const V = db['V'][0]\\n const M = db['M'][0]\\n const A = db['A'][0]\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const yG = db['yG'][0]\\n const Iy = db['Iy'][0]\\n const theta_element = db['theta_element'][0]\\n const sigma_x0 = compute_total_sigma(compute_sigma_axial(N, A), compute_sigma_bending(y_var, M, Iy, yG))\\n const sigma_y0 = 0\\n const tau_0 = compute_total_tau(compute_tau_shear(V, compute_first_moment_of_area(y_var, b, h, yG), Iy, b))\\n const sigma_average = compute_sigma_average_mohr(sigma_x0, sigma_y0)\\n const r_circle = compute_radius_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta_principal = compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0)\\n const theta = compute_theta_mohr(theta_element, theta_principal)\\n const new_state = compute_stress_state_mohr(sigma_average, r_circle, theta)\\n\\n // update data\\n db['y_var'][0] = y_var\\n db['sigma_x0'][0] = sigma_x0\\n db['sigma_y0'][0] = sigma_y0\\n db['tau_0'][0] = tau_0\\n db['sigma_average'][0] = sigma_average\\n db['r_circle_mohr'][0] = r_circle\\n db['sigma_x'][0] = new_state[0]\\n db['sigma_y'][0] = new_state[1]\\n db['tau'][0] = new_state[2]\\n db['theta'][0] = theta\\n\\n // update\\n // square point:\\n beam_position.glyph.y = y_var\\n // update Mohr circle\\n update_circle_mohr(db, Mohr_circle, line_stress_state, points_stress_state, label_points_stress_state, line_stress_state_theta, points_stress_state_theta, label_points_stress_state_theta, arc_theta_Mohr, label_theta_Mohr, arc_theta_p_Mohr, label_theta_p_Mohr)\\n // stress state\\n update_sigmax_state(db, arrow_sigma_x1, arrow_sigma_x2)\\n update_sigmay_state(db, arrow_sigma_y1, arrow_sigma_y2)\\n update_tau_state(db, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2)\\n // stress state (theta)\\n update_sigmax_state_theta(db, arrow_sigma_x1_theta, arrow_sigma_x2_theta)\\n update_sigmay_state_theta(db, arrow_sigma_y1_theta, arrow_sigma_y2_theta)\\n update_tau_state_theta(db, arrow_tau_x1_theta,arrow_tau_x2_theta, arrow_tau_y1_theta, arrow_tau_y2_theta)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_radius_mohr(sigma_x0, sigma_y0, tau_0) {\\n return Math.sqrt(tau_0**2 + (sigma_x0-sigma_y0)**2/4)\\n }\\n \\n \\n function compute_stress_state_mohr(sigma_average, r_circle, theta) {\\n if (sigma_average > 0) {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var tau = -r_circle*Math.sin(2*theta)\\n } else {\\n var sigma_x = sigma_average + r_circle*Math.cos(2*theta-Math.PI)\\n var sigma_y = sigma_average + r_circle*Math.cos(2*theta)\\n var tau = r_circle*Math.sin(2*theta)\\n }\\n return [sigma_x, sigma_y, tau]\\n }\\n \\n \\n function compute_sigma_average_mohr(sigma_x0, sigma_y0) {\\n return (sigma_x0+sigma_y0)/2\\n }\\n \\n \\n function compute_principal_theta_mohr(sigma_x0, sigma_y0, tau_0) {\\n if ((sigma_x0-sigma_y0)==0) {\\n if (tau_0>0) {\\n return Math.PI/2\\n } else {\\n return -Math.PI/2\\n }\\n } else {\\n return Math.atan(2*tau_0/(sigma_y0-sigma_x0))/2\\n }\\n }\\n \\n \\n function compute_theta_mohr(theta_element, theta_principal) {\\n return theta_element+theta_principal\\n }\\n \\n \\n function update_circle_mohr(data, glyph_circle, glyph_line, glyph_points, glyph_label, glyph_line_theta, glyph_points_theta, glyph_label_theta, glyph_arc, glyph_theta_text, glyph_arc_p, glyph_theta_p_text) {\\n // set variables\\n const sigma_average = data['sigma_average'][0]\\n const r_circle = data['r_circle_mohr'][0]\\n const sigma_x0 = data['sigma_x0'][0]\\n const sigma_y0 = data['sigma_y0'][0]\\n const tau_0 = data['tau_0'][0]\\n const sigma_x = data['sigma_x'][0]\\n const sigma_y = data['sigma_y'][0]\\n const tau = data['tau'][0]\\n const theta_element = data['theta_element'][0]\\n const theta = data['theta'][0]\\n \\n // update circle\\n glyph_circle.glyph.x = sigma_average\\n glyph_circle.glyph.radius = r_circle\\n \\n // update points\\n const src_points = glyph_points.data_source\\n src_points.data.x = [sigma_x0, sigma_y0]\\n src_points.data.y = [tau_0, -tau_0]\\n src_points.change.emit()\\n \\n // update lines\\n const src_line = glyph_line.data_source\\n src_line.data.x = [sigma_x0, sigma_y0]\\n src_line.data.y = [tau_0, -tau_0]\\n src_line.change.emit()\\n \\n // update labels\\n const src_labels = glyph_label.data_source\\n src_labels.data.x = [sigma_x0, sigma_y0]\\n src_labels.data.y = [tau_0, -tau_0]\\n src_labels.change.emit()\\n \\n // update points theta\\n const src_points_theta = glyph_points_theta.data_source\\n src_points_theta.data.x = [sigma_x, sigma_y]\\n src_points_theta.data.y = [tau, -tau]\\n src_points_theta.change.emit()\\n \\n // update lines theta\\n const src_line_theta = glyph_line_theta.data_source\\n src_line_theta.data.x = [sigma_x, sigma_y]\\n src_line_theta.data.y = [tau, -tau]\\n src_line_theta.change.emit()\\n \\n // update labels theta\\n const src_labels_theta = glyph_label_theta.data_source\\n src_labels_theta.data.x = [sigma_x, sigma_y]\\n src_labels_theta.data.y = [tau, -tau]\\n src_labels_theta.change.emit()\\n \\n // arc theta (Mohr)\\n const theta_p = theta-theta_element\\n glyph_arc.glyph.start_angle = -2*theta\\n glyph_arc.glyph.end_angle = -2*theta_p\\n glyph_arc.glyph.x = sigma_average\\n glyph_arc.glyph.radius = r_circle/2\\n \\n // label theta (Mohr)\\n if (theta_element==0) {\\n glyph_theta_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_text.glyph.text = \\\"2\\u03b8\\\"\\n const src_label_theta = glyph_theta_text.data_source\\n src_label_theta.data.x = [sigma_average + r_circle*Math.cos(theta+theta_p)/2]\\n src_label_theta.data.y = [r_circle*Math.sin(-theta-theta_p)/2]\\n src_label_theta.change.emit()\\n }\\n debugger\\n // arc principal theta (Mohr)\\n if (theta_p < 0) {\\n var theta_p_tmp = Math.PI/2+theta_p\\n } else {\\n var theta_p_tmp = theta_p\\n }\\n glyph_arc_p.glyph.x = sigma_average\\n glyph_arc_p.glyph.radius = r_circle/5*2\\n glyph_arc_p.glyph.start_angle = -2*theta_p_tmp\\n \\n // label principal theta (Mohr)\\n if (theta_p==0) {\\n glyph_theta_p_text.glyph.text = \\\"\\\"\\n } else {\\n glyph_theta_p_text.glyph.text = \\\"2\\u03b8\\u209a\\\"\\n const src_label_theta_p = glyph_theta_p_text.data_source\\n src_label_theta_p.data.x = [sigma_average + r_circle*Math.cos(theta_p_tmp)/5*2]\\n src_label_theta_p.data.y = [r_circle*Math.sin(-theta_p_tmp)/5*2]\\n src_label_theta_p.change.emit()\\n }\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_sigmax_state(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_x0 = data['sigma_x0'][0]\\n const AHF = 4\\n \\n if (sigma_x0 > 0) {\\n update_arrow(arrow_sigma_x1, sigma_x0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_x0, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, sigma_x0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_x0), 0, 0, AHF)\\n } else {\\n update_arrow(arrow_sigma_x1, -sigma_x0, width_element/2+offset_arrows-sigma_x0, width_element/2+offset_arrows, 0, 0, AHF)\\n update_arrow(arrow_sigma_x2, -sigma_x0, -(width_element/2+offset_arrows-sigma_x0), -(width_element/2+offset_arrows), 0, 0, AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0) {\\n const offset_arrows = width_element/3\\n const sigma_y0 = data['sigma_y0'][0]\\n const AHF = 4\\n \\n if (sigma_y0 > 0) {\\n update_arrow(arrow_sigma_y1, sigma_y0, 0, 0, width_element/2+offset_arrows, width_element/2+offset_arrows+sigma_y0, AHF)\\n update_arrow(arrow_sigma_y2, sigma_y0, 0, 0, -(width_element/2+offset_arrows), -(width_element/2+offset_arrows+sigma_y0), AHF)\\n } else {\\n update_arrow(arrow_sigma_y1, -sigma_y0, 0, 0, width_element/2+offset_arrows-sigma_y0, width_element/2+offset_arrows, AHF)\\n update_arrow(arrow_sigma_y2, -sigma_y0, 0, 0, -(width_element/2+offset_arrows-sigma_y0), -(width_element/2+offset_arrows), AHF)\\n }\\n }\\n \\n \\n function update_tau_state(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const tau_0 = data['tau_0'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1, tau_0, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, -tau_0/2, tau_0/2, AHF)\\n update_arrow(arrow_tau_x2, tau_0, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), tau_0/2, -tau_0/2, AHF)\\n update_arrow(arrow_tau_y1, tau_0, -tau_0/2, tau_0/2, width_element/2+offset_arrows/2, width_element/2+offset_arrows/2, AHF)\\n update_arrow(arrow_tau_y2, tau_0, tau_0/2, -tau_0/2, -(width_element/2+offset_arrows/2), -(width_element/2+offset_arrows/2), AHF)\\n }\\n \\n \\n function update_sigmax_state_theta(data, arrow_sigma_x1, arrow_sigma_x2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n var sigma_x = data['sigma_x'][0]\\n const theta = data['theta_element'][0]\\n const AHF = 4\\n \\n if (sigma_x < 0) {\\n var sigma_x = -sigma_x\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_x1,\\n sigma_x,\\n (offset_sigma+center_x)*Math.cos(theta),\\n (offset_sigma+center_x+sigma_x)*Math.cos(theta),\\n (offset_sigma+center_x)*Math.sin(theta),\\n (offset_sigma+center_x+sigma_x)*Math.sin(theta),\\n AHF)\\n update_arrow(arrow_sigma_x2,\\n sigma_x,\\n (-offset_sigma+center_x)*Math.cos(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.cos(theta),\\n (-offset_sigma+center_x)*Math.sin(theta),\\n (-(offset_sigma+sigma_x)+center_x)*Math.sin(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_sigmay_state_theta(data, arrow_sigma_y1, arrow_sigma_y2, width_element=30.0, center_x=120) {\\n const offset_arrows = width_element/3\\n const offset_sigma = width_element/2+offset_arrows\\n const theta = data['theta_element'][0]\\n var sigma_y = data['sigma_y'][0]\\n const AHF = 4\\n \\n if (sigma_y<0) {\\n var sigma_y = -sigma_y\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n AHF)\\n } else {\\n update_arrow(arrow_sigma_y1,\\n sigma_y,\\n (center_x)*Math.cos(theta)-(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)-(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)+(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_sigma_y2,\\n sigma_y,\\n (center_x)*Math.cos(theta)+(offset_sigma)*Math.sin(theta),\\n (center_x)*Math.cos(theta)+(offset_sigma+sigma_y)*Math.sin(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma)*Math.cos(theta),\\n (center_x)*Math.sin(theta)-(offset_sigma+sigma_y)*Math.cos(theta),\\n AHF)\\n }\\n }\\n \\n \\n function update_tau_state_theta(data, arrow_tau_x1, arrow_tau_x2, arrow_tau_y1, arrow_tau_y2, width_element=30.0, center_x=120, scale_tau=5) {\\n const offset_arrows = width_element/3\\n const offset_tau = width_element/2+offset_arrows/2\\n const theta = data['theta_element'][0]\\n const tau = data['tau'][0]*scale_tau\\n const AHF = 4\\n \\n update_arrow(arrow_tau_x1,\\n tau,\\n (center_x+offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x+offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n (center_x+offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_x2,\\n tau,\\n (center_x-offset_tau)*Math.cos(theta)-(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.cos(theta)+(tau/2)*Math.sin(theta),\\n (center_x-offset_tau)*Math.sin(theta)+(tau/2)*Math.cos(theta),\\n (center_x-offset_tau)*Math.sin(theta)-(tau/2)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y1,\\n tau,\\n (center_x-tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.cos(theta)-(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n (center_x+tau/2)*Math.sin(theta)+(offset_tau)*Math.cos(theta),\\n AHF)\\n update_arrow(arrow_tau_y2,\\n tau,\\n (center_x+tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x-tau/2)*Math.cos(theta)+(offset_tau)*Math.sin(theta),\\n (center_x+tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n (center_x-tau/2)*Math.sin(theta)-(offset_tau)*Math.cos(theta),\\n AHF)\\n }\\n \\n \"},\"id\":\"2142\",\"type\":\"CustomJS\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2456\"},\"selection_policy\":{\"id\":\"2455\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"width\":10},\"id\":\"2143\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"2144\"},{\"id\":\"1120\"},{\"id\":\"1121\"},{\"id\":\"1899\"},{\"id\":\"1900\"},{\"id\":\"2145\"},{\"id\":\"1250\"},{\"id\":\"1249\"},{\"id\":\"1251\"},{\"id\":\"1252\"},{\"id\":\"1253\"},{\"id\":\"1254\"}]},\"id\":\"2146\",\"type\":\"Column\"},{\"attributes\":{\"height\":10},\"id\":\"2144\",\"type\":\"Spacer\"},{\"attributes\":{\"height\":10},\"id\":\"2145\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"2148\"},{\"id\":\"2150\"}]},\"id\":\"2151\",\"type\":\"Row\"},{\"attributes\":{\"tools\":[{\"id\":\"1797\"},{\"id\":\"1798\"},{\"id\":\"1799\"},{\"id\":\"1800\"},{\"id\":\"1801\"},{\"id\":\"1802\"}]},\"id\":\"1804\",\"type\":\"Toolbar\"},{\"attributes\":{\"children\":[{\"id\":\"1071\"},{\"id\":\"2143\"},{\"id\":\"2146\"}]},\"id\":\"2147\",\"type\":\"Row\"},{\"attributes\":{\"width\":200},\"id\":\"2153\",\"type\":\"Spacer\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2463\"},\"selection_policy\":{\"id\":\"2462\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"2149\"},{\"id\":\"1256\"},{\"id\":\"1290\"},{\"id\":\"1322\"}]},\"id\":\"2150\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1814\",\"type\":\"DataRange1d\"},{\"attributes\":{\"children\":[{\"id\":\"1140\"},{\"id\":\"2147\"}]},\"id\":\"2148\",\"type\":\"Column\"},{\"attributes\":{\"height\":10},\"id\":\"2149\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2434\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2233\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1236\"}},\"id\":\"1242\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2338\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2339\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2435\",\"type\":\"Selection\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2135\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1250\",\"type\":\"Slider\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1639\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2494\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1240\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2495\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2234\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2340\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2275\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1200\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1514\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2410\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2341\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2474\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2276\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1495\"},{\"id\":\"1496\"},{\"id\":\"1497\"},{\"id\":\"1498\"},{\"id\":\"1499\"},{\"id\":\"1500\"},{\"id\":\"1502\"}]},\"id\":\"1503\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2411\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2475\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1856\",\"type\":\"VeeHead\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2278\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1536\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2172\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2342\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1517\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2413\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2279\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1512\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2173\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1200\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1521\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1524\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2343\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1519\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2414\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2175\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2328\"},\"selection_policy\":{\"id\":\"2327\"}},\"id\":\"1200\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2436\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2235\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2401\"},\"group\":null,\"major_label_policy\":{\"id\":\"2402\"},\"ticker\":{\"id\":\"1776\"}},\"id\":\"1521\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2344\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2437\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2176\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2399\"},\"group\":null,\"major_label_policy\":{\"id\":\"2400\"},\"ticker\":{\"id\":\"1526\"},\"visible\":false},\"id\":\"1525\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2236\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1525\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1528\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2288\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2345\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1239\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2337\"},\"selection_policy\":{\"id\":\"2336\"}},\"id\":\"2280\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2399\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2289\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1534\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1529\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2346\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1535\"}},\"id\":\"1531\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1236\"},\"glyph\":{\"id\":\"1238\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1240\"},\"nonselection_glyph\":{\"id\":\"1239\"},\"view\":{\"id\":\"1242\"}},\"id\":\"1241\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2339\"},\"selection_policy\":{\"id\":\"2338\"}},\"id\":\"2281\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2291\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1532\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2341\"},\"selection_policy\":{\"id\":\"2340\"}},\"id\":\"2282\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2347\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2243\"},\"selection_policy\":{\"id\":\"2242\"}},\"id\":\"2177\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1221\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2292\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1218\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2280\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1219\",\"type\":\"Arrow\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1535\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2497\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2245\"},\"selection_policy\":{\"id\":\"2244\"}},\"id\":\"2178\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1218\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2343\"},\"selection_policy\":{\"id\":\"2342\"}},\"id\":\"2283\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2237\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1238\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2247\"},\"selection_policy\":{\"id\":\"2246\"}},\"id\":\"2179\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1599\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2484\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2332\"},\"selection_policy\":{\"id\":\"2331\"}},\"id\":\"1236\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2438\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1221\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2281\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1222\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2238\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2400\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2334\"},\"selection_policy\":{\"id\":\"2333\"}},\"id\":\"1243\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2345\"},\"selection_policy\":{\"id\":\"2344\"}},\"id\":\"2284\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1605\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2282\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2439\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2249\"},\"selection_policy\":{\"id\":\"2248\"}},\"id\":\"2180\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2285\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2368\"},\"selection_policy\":{\"id\":\"2367\"}},\"id\":\"2293\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1243\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1598\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2239\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2347\"},\"selection_policy\":{\"id\":\"2346\"}},\"id\":\"2285\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2140\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1249\",\"type\":\"Slider\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1251\",\"type\":\"Div\"},{\"attributes\":{\"axis\":{\"id\":\"1594\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1597\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2477\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2251\"},\"selection_policy\":{\"id\":\"2250\"}},\"id\":\"2181\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1243\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2478\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2416\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1557\",\"type\":\"BasicTicker\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2139\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1252\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2253\"},\"selection_policy\":{\"id\":\"2252\"}},\"id\":\"2182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1253\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"2417\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2440\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1255\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"2485\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1624\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1627\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2401\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2240\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1529\"},{\"id\":\"1530\"},{\"id\":\"1531\"},{\"id\":\"1532\"},{\"id\":\"1533\"},{\"id\":\"1534\"},{\"id\":\"1536\"}]},\"id\":\"1537\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2419\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1264\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2441\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2255\"},\"selection_policy\":{\"id\":\"2254\"}},\"id\":\"2183\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2138\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1254\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1266\"}],\"center\":[{\"id\":\"1269\"},{\"id\":\"1273\"}],\"height\":160,\"left\":[{\"id\":\"1270\"}],\"renderers\":[{\"id\":\"1358\"},{\"id\":\"1364\"},{\"id\":\"1394\"}],\"title\":{\"id\":\"1257\"},\"toolbar\":{\"id\":\"1282\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1262\"},\"y_range\":{\"id\":\"1260\"},\"y_scale\":{\"id\":\"1264\"}},\"id\":\"1256\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1554\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2420\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1633\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1260\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2257\"},\"selection_policy\":{\"id\":\"2256\"}},\"id\":\"2184\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1262\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2348\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1266\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1269\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1275\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1281\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1548\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2349\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1257\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"1556\"}],\"center\":[{\"id\":\"1559\"},{\"id\":\"1563\"}],\"height\":200,\"left\":[{\"id\":\"1560\"}],\"renderers\":[{\"id\":\"1688\"},{\"id\":\"1694\"},{\"id\":\"1700\"}],\"title\":{\"id\":\"1546\"},\"toolbar\":{\"id\":\"1572\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1548\"},\"x_scale\":{\"id\":\"1552\"},\"y_range\":{\"id\":\"1550\"},\"y_scale\":{\"id\":\"1554\"}},\"id\":\"1545\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"1119\",\"type\":\"Div\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2259\"},\"selection_policy\":{\"id\":\"2258\"}},\"id\":\"2185\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2298\"},\"group\":null,\"major_label_policy\":{\"id\":\"2299\"},\"ticker\":{\"id\":\"1267\"},\"visible\":false},\"id\":\"1266\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1550\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2350\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2499\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1267\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2493\"},\"selection_policy\":{\"id\":\"2492\"}},\"id\":\"2421\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2423\"},\"group\":null,\"major_label_policy\":{\"id\":\"2424\"},\"ticker\":{\"id\":\"1561\"},\"visible\":false},\"id\":\"1560\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2295\"},\"group\":null,\"major_label_policy\":{\"id\":\"2296\"},\"ticker\":{\"id\":\"1271\"}},\"id\":\"1270\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2295\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1546\",\"type\":\"Title\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2261\"},\"selection_policy\":{\"id\":\"2260\"}},\"id\":\"2186\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1270\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1273\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2351\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1271\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1556\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1559\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2500\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2296\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1552\",\"type\":\"LinearScale\"},{\"attributes\":{\"end\":200,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2136\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1120\",\"type\":\"Slider\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2426\"},\"group\":null,\"major_label_policy\":{\"id\":\"2427\"},\"ticker\":{\"id\":\"1557\"}},\"id\":\"1556\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1278\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2479\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1274\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2298\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1560\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1563\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1280\"}},\"id\":\"1276\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1561\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2480\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2451\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2452\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"lightgray\"},\"height\":{\"value\":200},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1042\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2453\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2454\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1629\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2367\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2368\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2326\"},\"selection_policy\":{\"id\":\"2325\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2455\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2369\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2456\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2370\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2372\"},\"selection_policy\":{\"id\":\"2371\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2371\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2372\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2321\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2322\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1831\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2458\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2459\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1125\"},\"glyph\":{\"id\":\"1126\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1128\"},\"nonselection_glyph\":{\"id\":\"1127\"},\"view\":{\"id\":\"1130\"}},\"id\":\"1129\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2310\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1468\",\"type\":\"HoverTool\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":60},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2005\",\"type\":\"Arc\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1765\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1767\"},\"nonselection_glyph\":{\"id\":\"1766\"},\"view\":{\"id\":\"1769\"}},\"id\":\"1768\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1125\"}},\"id\":\"1130\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"1151\"}],\"center\":[{\"id\":\"1154\"},{\"id\":\"1158\"},{\"id\":\"1219\"},{\"id\":\"1222\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"}],\"height\":200,\"left\":[{\"id\":\"1155\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1177\"},{\"id\":\"1192\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1241\"},{\"id\":\"1247\"}],\"title\":{\"id\":\"1141\"},\"toolbar\":{\"id\":\"1166\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1143\"},\"x_scale\":{\"id\":\"1147\"},\"y_range\":{\"id\":\"1145\"},\"y_scale\":{\"id\":\"1149\"}},\"id\":\"1140\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2236\"},\"selection_policy\":{\"id\":\"2235\"}},\"id\":\"2003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1444\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2003\"},\"glyph\":{\"id\":\"2004\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2006\"},\"nonselection_glyph\":{\"id\":\"2005\"},\"view\":{\"id\":\"2008\"}},\"id\":\"2007\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2311\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1453\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1456\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2210\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1126\",\"type\":\"Text\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1127\",\"type\":\"Text\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2010\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1451\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2439\"},\"selection_policy\":{\"id\":\"2438\"}},\"id\":\"1125\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"2003\"}},\"id\":\"2008\",\"type\":\"CDSView\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1128\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2359\",\"type\":\"Selection\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":60},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2006\",\"type\":\"Arc\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2390\"},\"group\":null,\"major_label_policy\":{\"id\":\"2391\"},\"ticker\":{\"id\":\"1756\"}},\"id\":\"1453\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1131\",\"type\":\"VeeHead\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2011\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1131\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2353\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1132\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[60],\"y\":[0]},\"selected\":{\"id\":\"2238\"},\"selection_policy\":{\"id\":\"2237\"}},\"id\":\"2009\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2388\"},\"group\":null,\"major_label_policy\":{\"id\":\"2389\"},\"ticker\":{\"id\":\"1458\"},\"visible\":false},\"id\":\"1457\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1134\"}},\"id\":\"1139\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,150.0],\"y\":[0,0]},\"selected\":{\"id\":\"2240\"},\"selection_policy\":{\"id\":\"2239\"}},\"id\":\"2015\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"2322\"},\"selection_policy\":{\"id\":\"2321\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1457\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1460\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"2009\"}},\"id\":\"2014\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1458\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2012\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2009\"},\"glyph\":{\"id\":\"2010\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2012\"},\"nonselection_glyph\":{\"id\":\"2011\"},\"view\":{\"id\":\"2014\"}},\"id\":\"2013\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1134\"},\"glyph\":{\"id\":\"1135\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1137\"},\"nonselection_glyph\":{\"id\":\"1136\"},\"view\":{\"id\":\"1139\"}},\"id\":\"1138\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2016\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2211\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2017\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1461\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1145\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"1467\"}},\"id\":\"1463\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1466\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2015\"},\"glyph\":{\"id\":\"2016\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2018\"},\"nonselection_glyph\":{\"id\":\"2017\"},\"view\":{\"id\":\"2020\"}},\"id\":\"2019\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2278\"},\"group\":null,\"major_label_policy\":{\"id\":\"2279\"},\"ticker\":{\"id\":\"1152\"},\"visible\":false},\"id\":\"1151\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2021\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2177\"},\"start\":null,\"x_end\":{\"value\":25.0},\"x_start\":{\"value\":25.5},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2022\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1465\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2033\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2275\"},\"group\":null,\"major_label_policy\":{\"id\":\"2276\"},\"ticker\":{\"id\":\"1156\"},\"visible\":false},\"id\":\"1155\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2027\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1141\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2018\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1467\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2469\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2024\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1151\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1154\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2360\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"2015\"}},\"id\":\"2020\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1155\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1158\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2487\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2045\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2470\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2021\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1149\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2361\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2030\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1164\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2488\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2033\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2181\"},\"start\":null,\"x_end\":{\"value\":20.0},\"x_start\":{\"value\":20.0},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2034\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2024\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2178\"},\"start\":null,\"x_end\":{\"value\":-25.0},\"x_start\":{\"value\":-25.5},\"y_end\":{\"value\":-0.0},\"y_start\":{\"value\":-0.0}},\"id\":\"2025\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2036\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2182\"},\"start\":null,\"x_end\":{\"value\":-20.0},\"x_start\":{\"value\":-20.0},\"y_end\":{\"value\":-0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2037\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1156\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1827\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2027\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2179\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":25.0},\"y_start\":{\"value\":25.0}},\"id\":\"2028\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2036\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2030\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2180\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":-25.0},\"y_start\":{\"value\":-25.0}},\"id\":\"2031\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2212\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1160\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2042\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1159\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":2.8382557567571505}},\"id\":\"2048\",\"type\":\"VeeHead\"},{\"attributes\":{\"overlay\":{\"id\":\"1165\"}},\"id\":\"1161\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2051\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2213\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1162\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2039\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1163\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2054\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2039\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2183\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":20.0},\"y_start\":{\"value\":20.0}},\"id\":\"2040\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1483\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2057\",\"type\":\"VeeHead\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1165\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2042\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2184\"},\"start\":null,\"x_end\":{\"value\":0.0},\"x_start\":{\"value\":0.0},\"y_end\":{\"value\":-20.0},\"y_start\":{\"value\":-20.0}},\"id\":\"2043\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2489\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2060\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2045\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2185\"},\"start\":null,\"x_end\":{\"value\":145.0},\"x_start\":{\"value\":145.5},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2046\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2063\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2490\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2048\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.4054651081081644},\"source\":{\"id\":\"2186\"},\"start\":null,\"x_end\":{\"value\":95.0},\"x_start\":{\"value\":94.5},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2049\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2284\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{\"tools\":[{\"id\":\"1461\"},{\"id\":\"1462\"},{\"id\":\"1463\"},{\"id\":\"1464\"},{\"id\":\"1465\"},{\"id\":\"1466\"},{\"id\":\"1468\"}]},\"id\":\"1469\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"blue\"},\"size\":{\"value\":0.0}},\"id\":\"2066\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2362\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1835\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2051\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2187\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":25.0},\"y_start\":{\"value\":25.0}},\"id\":\"2052\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2363\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"hatch_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"radius\":{\"value\":0.25},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2070\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2054\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2188\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":-25.0},\"y_start\":{\"value\":-25.0}},\"id\":\"2055\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2283\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1830\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2057\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2189\"},\"start\":null,\"x_end\":{\"value\":140.0},\"x_start\":{\"value\":140.0},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2058\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"gray\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"radius\":{\"value\":0.25},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2071\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2060\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2190\"},\"start\":null,\"x_end\":{\"value\":100.0},\"x_start\":{\"value\":100.0},\"y_end\":{\"value\":0.0},\"y_start\":{\"value\":0.0}},\"id\":\"2061\",\"type\":\"Arrow\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2076\",\"type\":\"Arc\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2063\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2191\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":20.0},\"y_start\":{\"value\":20.0}},\"id\":\"2064\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2214\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1480\",\"type\":\"DataRange1d\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2082\",\"type\":\"Text\"},{\"attributes\":{\"below\":[{\"id\":\"1487\"}],\"center\":[{\"id\":\"1490\"},{\"id\":\"1494\"}],\"height\":200,\"left\":[{\"id\":\"1491\"}],\"renderers\":[{\"id\":\"1670\"},{\"id\":\"1676\"},{\"id\":\"1682\"}],\"title\":{\"id\":\"1478\"},\"toolbar\":{\"id\":\"1503\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1480\"},\"x_scale\":{\"id\":\"1483\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1485\"}},\"id\":\"1477\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"overlay\":{\"id\":\"1836\"}},\"id\":\"1832\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"2066\"},\"group\":null,\"line_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2192\"},\"start\":null,\"x_end\":{\"value\":120.0},\"x_start\":{\"value\":120.0},\"y_end\":{\"value\":-20.0},\"y_start\":{\"value\":-20.0}},\"id\":\"2067\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2293\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2215\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"2069\"}},\"id\":\"2074\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1496\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[-0.25],\"y\":[0]},\"selected\":{\"id\":\"2201\"},\"selection_policy\":{\"id\":\"2200\"}},\"id\":\"2069\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"gray\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"radius\":{\"value\":0.25},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2072\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1478\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2364\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2069\"},\"glyph\":{\"id\":\"2070\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2072\"},\"nonselection_glyph\":{\"id\":\"2071\"},\"view\":{\"id\":\"2074\"}},\"id\":\"2073\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1488\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2472\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[-0.25],\"y\":[0]},\"selected\":{\"id\":\"2203\"},\"selection_policy\":{\"id\":\"2202\"}},\"id\":\"2075\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2216\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2077\",\"type\":\"Arc\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2365\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2473\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2075\"},\"glyph\":{\"id\":\"2076\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2078\"},\"nonselection_glyph\":{\"id\":\"2077\"},\"view\":{\"id\":\"2080\"}},\"id\":\"2079\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1487\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1490\",\"type\":\"Grid\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2083\",\"type\":\"Text\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2407\"},\"group\":null,\"major_label_policy\":{\"id\":\"2408\"},\"ticker\":{\"id\":\"1488\"}},\"id\":\"1487\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1834\",\"type\":\"ResetTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"2075\"}},\"id\":\"2080\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1502\",\"type\":\"HoverTool\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2078\",\"type\":\"Arc\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2404\"},\"group\":null,\"major_label_policy\":{\"id\":\"2405\"},\"ticker\":{\"id\":\"1492\"},\"visible\":false},\"id\":\"1491\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[-0.125],\"y\":[0]},\"selected\":{\"id\":\"2205\"},\"selection_policy\":{\"id\":\"2204\"}},\"id\":\"2081\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"1491\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1494\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[-0.25],\"y\":[0]},\"selected\":{\"id\":\"2207\"},\"selection_policy\":{\"id\":\"2206\"}},\"id\":\"2087\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1625\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"2081\"}},\"id\":\"2086\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1648\"}},\"id\":\"1653\",\"type\":\"CDSView\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2084\",\"type\":\"Text\"},{\"attributes\":{\"tools\":[{\"id\":\"1159\"},{\"id\":\"1160\"},{\"id\":\"1161\"},{\"id\":\"1162\"},{\"id\":\"1163\"},{\"id\":\"1164\"}]},\"id\":\"1166\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2217\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2081\"},\"glyph\":{\"id\":\"2082\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2084\"},\"nonselection_glyph\":{\"id\":\"2083\"},\"view\":{\"id\":\"2086\"}},\"id\":\"2085\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1500\",\"type\":\"HelpTool\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2088\",\"type\":\"Arc\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2089\",\"type\":\"Arc\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1501\"}},\"id\":\"1497\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":0.125},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2090\",\"type\":\"Arc\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"y\"}},\"id\":\"2094\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2492\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[-0.15],\"y\":[0]},\"selected\":{\"id\":\"2209\"},\"selection_policy\":{\"id\":\"2208\"}},\"id\":\"2093\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1499\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"2087\"}},\"id\":\"2092\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"2365\"},\"selection_policy\":{\"id\":\"2364\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2087\"},\"glyph\":{\"id\":\"2088\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2090\"},\"nonselection_glyph\":{\"id\":\"2089\"},\"view\":{\"id\":\"2092\"}},\"id\":\"2091\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2493\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2261\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"2490\"},\"selection_policy\":{\"id\":\"2489\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":560.0,\"start\":-80.0},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2262\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"2263\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"marker\":{\"value\":\"square\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y_var\"}},\"id\":\"1896\",\"type\":\"Scatter\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2264\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"marker\":{\"value\":\"square\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y_var\"}},\"id\":\"1895\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2377\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2291\"},\"group\":null,\"major_label_policy\":{\"id\":\"2292\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":[60.0],\"y\":[60.0]},\"selected\":{\"id\":\"2224\"},\"selection_policy\":{\"id\":\"2223\"}},\"id\":\"1967\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2265\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"marker\":{\"value\":\"square\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y_var\"}},\"id\":\"1894\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2378\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1361\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1363\"},\"nonselection_glyph\":{\"id\":\"1362\"},\"view\":{\"id\":\"1365\"}},\"id\":\"1364\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"end\":200,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2142\"}]},\"start\":0,\"title\":\"Change the height y along the section [mm]\",\"value\":200},\"id\":\"1899\",\"type\":\"Slider\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"fixed_location\":0,\"formatter\":{\"id\":\"2169\"},\"group\":null,\"major_label_policy\":{\"id\":\"2170\"},\"ticker\":{\"id\":\"1913\"}},\"id\":\"1912\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1912\"}],\"center\":[{\"id\":\"1915\"},{\"id\":\"1919\"}],\"left\":[{\"id\":\"1916\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"2073\"},{\"id\":\"2079\"},{\"id\":\"2085\"},{\"id\":\"2091\"},{\"id\":\"2097\"},{\"id\":\"2103\"},{\"id\":\"2109\"},{\"id\":\"2115\"},{\"id\":\"2121\"},{\"id\":\"2127\"},{\"id\":\"2133\"}],\"title\":{\"id\":\"1902\"},\"toolbar\":{\"id\":\"1927\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1904\"},\"x_scale\":{\"id\":\"1908\"},\"y_range\":{\"id\":\"1906\"},\"y_scale\":{\"id\":\"1910\"}},\"id\":\"1901\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2266\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{\"end\":90,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2141\"}]},\"start\":0,\"step\":0.5,\"title\":\"Change the angle \\u03b8 of the element [\\u00b0]\",\"value\":0},\"id\":\"1900\",\"type\":\"Slider\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":180.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":180.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1968\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1053\"},\"glyph\":{\"id\":\"1054\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1056\"},\"nonselection_glyph\":{\"id\":\"1055\"},\"view\":{\"id\":\"1058\"}},\"id\":\"1057\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1904\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2267\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2496\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1908\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1047\"}},\"id\":\"1052\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1906\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Mohr circle, x axis: stress \\u03c3 [MPa], y axis: stress \\u03c4 [MPa]\"},\"id\":\"1902\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2268\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0.125,-0.125],\"y\":[0,-69.28203230275508,-69.28203230275508]},\"selected\":{\"id\":\"2357\"},\"selection_policy\":{\"id\":\"2356\"}},\"id\":\"1047\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1921\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1912\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1915\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1910\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2288\"},\"group\":null,\"major_label_policy\":{\"id\":\"2289\"},\"ticker\":{\"id\":\"1024\"},\"visible\":false},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2269\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"fixed_location\":0,\"formatter\":{\"id\":\"2166\"},\"group\":null,\"major_label_policy\":{\"id\":\"2167\"},\"ticker\":{\"id\":\"1917\"}},\"id\":\"1916\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1916\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1919\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1913\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2270\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1917\",\"type\":\"BasicTicker\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2271\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1925\",\"type\":\"HelpTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1920\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1926\"}},\"id\":\"1922\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1923\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1924\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2272\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1041\"}},\"id\":\"1046\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2447\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1926\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2273\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1939\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2358\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2448\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"lightgray\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1044\",\"type\":\"Rect\"},{\"attributes\":{\"tools\":[{\"id\":\"1953\"},{\"id\":\"1954\"},{\"id\":\"1955\"},{\"id\":\"1956\"},{\"id\":\"1957\"},{\"id\":\"1958\"}]},\"id\":\"1960\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-40.0]},\"selected\":{\"id\":\"2359\"},\"selection_policy\":{\"id\":\"2358\"}},\"id\":\"1053\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":180.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":180.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1969\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":158.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1060\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1053\"}},\"id\":\"1058\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.125},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1055\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":180.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":180.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1970\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.125},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1054\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2449\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1048\",\"type\":\"Patch\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1571\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2450\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1941\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1049\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1569\",\"type\":\"HelpTool\"},{\"attributes\":{\"below\":[{\"id\":\"1945\"}],\"center\":[{\"id\":\"1948\"},{\"id\":\"1952\"},{\"id\":\"2022\"},{\"id\":\"2025\"},{\"id\":\"2028\"},{\"id\":\"2031\"},{\"id\":\"2034\"},{\"id\":\"2037\"},{\"id\":\"2040\"},{\"id\":\"2043\"},{\"id\":\"2046\"},{\"id\":\"2049\"},{\"id\":\"2052\"},{\"id\":\"2055\"},{\"id\":\"2058\"},{\"id\":\"2061\"},{\"id\":\"2064\"},{\"id\":\"2067\"}],\"left\":[{\"id\":\"1949\"}],\"match_aspect\":true,\"min_border_left\":0,\"renderers\":[{\"id\":\"1971\"},{\"id\":\"1977\"},{\"id\":\"1983\"},{\"id\":\"1989\"},{\"id\":\"1995\"},{\"id\":\"2001\"},{\"id\":\"2007\"},{\"id\":\"2013\"},{\"id\":\"2019\"}],\"title\":{\"id\":\"1935\"},\"toolbar\":{\"id\":\"1960\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1937\"},\"x_scale\":{\"id\":\"1941\"},\"y_range\":{\"id\":\"1939\"},\"y_scale\":{\"id\":\"1943\"}},\"id\":\"1934\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1967\"},\"glyph\":{\"id\":\"1968\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1970\"},\"nonselection_glyph\":{\"id\":\"1969\"},\"view\":{\"id\":\"1972\"}},\"id\":\"1971\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1041\"},\"glyph\":{\"id\":\"1042\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1044\"},\"nonselection_glyph\":{\"id\":\"1043\"},\"view\":{\"id\":\"1046\"}},\"id\":\"1045\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1047\"},\"glyph\":{\"id\":\"1048\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1050\"},\"nonselection_glyph\":{\"id\":\"1049\"},\"view\":{\"id\":\"1052\"}},\"id\":\"1051\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1565\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1937\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[100.0]},\"selected\":{\"id\":\"2355\"},\"selection_policy\":{\"id\":\"2354\"}},\"id\":\"1041\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1050\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.125},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1056\",\"type\":\"Circle\"},{\"attributes\":{\"tools\":[{\"id\":\"1920\"},{\"id\":\"1921\"},{\"id\":\"1922\"},{\"id\":\"1923\"},{\"id\":\"1924\"},{\"id\":\"1925\"}]},\"id\":\"1927\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[480.0]},\"selected\":{\"id\":\"2361\"},\"selection_policy\":{\"id\":\"2360\"}},\"id\":\"1059\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1943\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":158.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1061\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2175\"},\"group\":null,\"major_label_policy\":{\"id\":\"2176\"},\"ticker\":{\"id\":\"1946\"},\"visible\":false},\"id\":\"1945\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":158.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1062\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2419\"},\"group\":null,\"major_label_policy\":{\"id\":\"2420\"},\"ticker\":{\"id\":\"1823\"},\"visible\":false},\"id\":\"1822\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Stress state\"},\"id\":\"1935\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"1082\"}],\"center\":[{\"id\":\"1085\"},{\"id\":\"1089\"},{\"id\":\"1123\"},{\"id\":\"1132\"}],\"height\":500,\"left\":[{\"id\":\"1086\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1108\"},{\"id\":\"1117\"},{\"id\":\"1129\"},{\"id\":\"1138\"}],\"title\":{\"id\":\"1072\"},\"toolbar\":{\"id\":\"1097\"},\"toolbar_location\":null,\"width\":250,\"x_range\":{\"id\":\"1074\"},\"x_scale\":{\"id\":\"1078\"},\"y_range\":{\"id\":\"1076\"},\"y_scale\":{\"id\":\"1080\"}},\"id\":\"1071\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1816\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1065\"},\"glyph\":{\"id\":\"1066\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1068\"},\"nonselection_glyph\":{\"id\":\"1067\"},\"view\":{\"id\":\"1070\"}},\"id\":\"1069\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1818\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1617\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1945\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1948\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1059\"},\"glyph\":{\"id\":\"1060\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1062\"},\"nonselection_glyph\":{\"id\":\"1061\"},\"view\":{\"id\":\"1064\"}},\"id\":\"1063\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"width\":200},\"id\":\"2154\",\"type\":\"Spacer\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2172\"},\"group\":null,\"major_label_policy\":{\"id\":\"2173\"},\"ticker\":{\"id\":\"1950\"},\"visible\":false},\"id\":\"1949\",\"type\":\"LinearAxis\"},{\"attributes\":{\"width\":200},\"id\":\"2155\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"1059\"}},\"id\":\"1064\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1065\"}},\"id\":\"1070\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2416\"},\"group\":null,\"major_label_policy\":{\"id\":\"2417\"},\"ticker\":{\"id\":\"1827\"},\"visible\":false},\"id\":\"1826\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1280\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1949\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1952\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"1811\"},{\"id\":\"2153\"},{\"id\":\"1545\"},{\"id\":\"2154\"},{\"id\":\"2155\"},{\"id\":\"1614\"}]},\"id\":\"2156\",\"type\":\"Row\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[400]},\"selected\":{\"id\":\"2363\"},\"selection_policy\":{\"id\":\"2362\"}},\"id\":\"1065\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1958\",\"type\":\"HelpTool\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1066\",\"type\":\"Text\"},{\"attributes\":{\"axis\":{\"id\":\"1822\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1825\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"1778\"},{\"id\":\"1443\"},{\"id\":\"1408\"},{\"id\":\"1511\"},{\"id\":\"1477\"},{\"id\":\"1580\"}]},\"id\":\"2152\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1946\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"r_circle_mohr\":[0.25],\"sigma_average\":[-0.25],\"sigma_x\":[-0.5],\"sigma_x0\":[-0.5],\"sigma_y\":[0.0],\"sigma_y0\":[0],\"state\":[\"IDLE\"],\"tau\":[0.0],\"tau_0\":[0.0],\"theta\":[0.0],\"theta_element\":[0],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0],\"y_var\":[200]},\"selected\":{\"id\":\"2324\"},\"selection_policy\":{\"id\":\"2323\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1068\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1812\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1615\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1950\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1826\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1829\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1620\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2225\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2255\",\"type\":\"Selection\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1067\",\"type\":\"Text\"},{\"attributes\":{\"children\":[{\"id\":\"2152\"},{\"id\":\"2156\"}]},\"id\":\"2157\",\"type\":\"Column\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"black\"},\"height\":{\"value\":30.0},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1974\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"LinearScale\"},{\"attributes\":{\"children\":[{\"id\":\"2157\"}]},\"id\":\"2158\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"2226\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1076\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1954\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1078\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1844\"},\"glyph\":{\"id\":\"1845\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1847\"},\"nonselection_glyph\":{\"id\":\"1846\"},\"view\":{\"id\":\"1849\"}},\"id\":\"1848\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1953\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1622\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2432\"},\"group\":null,\"major_label_policy\":{\"id\":\"2433\"},\"ticker\":{\"id\":\"1625\"}},\"id\":\"1624\",\"type\":\"LinearAxis\"},{\"attributes\":{\"overlay\":{\"id\":\"1959\"}},\"id\":\"1955\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1091\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2402\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1956\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2350\"},\"group\":null,\"major_label_policy\":{\"id\":\"2351\"},\"ticker\":{\"id\":\"1110\"}},\"id\":\"1082\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1601\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1957\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1074\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2429\"},\"group\":null,\"major_label_policy\":{\"id\":\"2430\"},\"ticker\":{\"id\":\"1629\"}},\"id\":\"1628\",\"type\":\"LinearAxis\"},{\"attributes\":{\"children\":[{\"id\":\"2151\"},{\"id\":\"2158\"}]},\"id\":\"2159\",\"type\":\"Column\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1045\"},{\"id\":\"1051\"},{\"id\":\"1057\"},{\"id\":\"1063\"},{\"id\":\"1069\"},{\"id\":\"1186\"},{\"id\":\"1897\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2348\"},\"group\":null,\"major_label_policy\":{\"id\":\"2349\"},\"ticker\":{\"id\":\"1110\"}},\"id\":\"1086\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1082\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1085\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1628\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1631\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"1901\"},{\"id\":\"1934\"}]},\"id\":\"2160\",\"type\":\"Column\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1959\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1080\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1072\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1602\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1967\"}},\"id\":\"1972\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1086\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1089\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":320.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":160.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1106\",\"type\":\"Rect\"},{\"attributes\":{\"overlay\":{\"id\":\"1604\"}},\"id\":\"1600\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1637\",\"type\":\"HelpTool\"},{\"attributes\":{\"children\":[{\"id\":\"2159\"},{\"id\":\"2160\"}]},\"id\":\"2161\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1632\",\"type\":\"PanTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1274\"},{\"id\":\"1275\"},{\"id\":\"1276\"},{\"id\":\"1277\"},{\"id\":\"1278\"},{\"id\":\"1279\"},{\"id\":\"1281\"}]},\"id\":\"1282\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"1638\"}},\"id\":\"1634\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1836\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1635\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"2330\"},\"selection_policy\":{\"id\":\"2329\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1636\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1685\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1296\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2454\"},\"selection_policy\":{\"id\":\"2453\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1684\"}},\"id\":\"1689\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1095\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2227\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1090\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1638\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"overlay\":{\"id\":\"1096\"}},\"id\":\"1092\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Text\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1570\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1564\"},{\"id\":\"1565\"},{\"id\":\"1566\"},{\"id\":\"1567\"},{\"id\":\"1568\"},{\"id\":\"1569\"},{\"id\":\"1571\"}]},\"id\":\"1572\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1093\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1649\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2166\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1292\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2228\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2254\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1094\",\"type\":\"ResetTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1581\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"lightgray\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1043\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1657\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1298\"}],\"center\":[{\"id\":\"1301\"},{\"id\":\"1305\"}],\"height\":160,\"left\":[{\"id\":\"1302\"}],\"renderers\":[{\"id\":\"1370\"},{\"id\":\"1376\"},{\"id\":\"1400\"}],\"title\":{\"id\":\"2196\"},\"toolbar\":{\"id\":\"1314\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1294\"},\"y_range\":{\"id\":\"1292\"},\"y_scale\":{\"id\":\"1296\"}},\"id\":\"1290\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2167\",\"type\":\"AllLabels\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1096\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1980\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1294\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1869\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1691\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1693\"},\"nonselection_glyph\":{\"id\":\"1692\"},\"view\":{\"id\":\"1695\"}},\"id\":\"1694\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2437\"},\"selection_policy\":{\"id\":\"2436\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2169\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2229\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1313\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2483\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2304\"},\"group\":null,\"major_label_policy\":{\"id\":\"2305\"},\"ticker\":{\"id\":\"1299\"},\"visible\":false},\"id\":\"1298\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1137\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2495\"},\"selection_policy\":{\"id\":\"2494\"}},\"id\":\"1684\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2170\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1583\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1298\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1301\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1590\"}],\"center\":[{\"id\":\"1593\"},{\"id\":\"1597\"}],\"height\":200,\"renderers\":[{\"id\":\"1706\"},{\"id\":\"1712\"},{\"id\":\"1718\"}],\"right\":[{\"id\":\"1594\"}],\"title\":{\"id\":\"1581\"},\"toolbar\":{\"id\":\"1606\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1583\"},\"x_scale\":{\"id\":\"1586\"},\"y_range\":{\"id\":\"1413\"},\"y_scale\":{\"id\":\"1588\"}},\"id\":\"1580\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1136\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1591\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1686\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1973\"},\"glyph\":{\"id\":\"1974\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1976\"},\"nonselection_glyph\":{\"id\":\"1975\"},\"view\":{\"id\":\"1978\"}},\"id\":\"1977\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1302\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1305\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2441\"},\"selection_policy\":{\"id\":\"2440\"}},\"id\":\"1134\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2301\"},\"group\":null,\"major_label_policy\":{\"id\":\"2302\"},\"ticker\":{\"id\":\"1303\"}},\"id\":\"1302\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1135\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2450\"},\"selection_policy\":{\"id\":\"2449\"}},\"id\":\"1862\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1330\"}],\"center\":[{\"id\":\"1333\"},{\"id\":\"1337\"}],\"height\":200,\"left\":[{\"id\":\"1334\"}],\"renderers\":[{\"id\":\"1382\"},{\"id\":\"1388\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"2198\"},\"toolbar\":{\"id\":\"1346\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1326\"},\"y_range\":{\"id\":\"1324\"},\"y_scale\":{\"id\":\"1328\"}},\"id\":\"1322\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1981\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1586\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1590\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1593\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1847\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2226\"},\"selection_policy\":{\"id\":\"2225\"}},\"id\":\"1973\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2230\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2404\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1588\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1845\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2405\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1311\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":320.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":160.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1105\",\"type\":\"Rect\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1604\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1975\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1306\",\"type\":\"PanTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1632\"},{\"id\":\"1633\"},{\"id\":\"1634\"},{\"id\":\"1635\"},{\"id\":\"1636\"},{\"id\":\"1637\"},{\"id\":\"1639\"}]},\"id\":\"1640\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1976\",\"type\":\"Rect\"},{\"attributes\":{\"overlay\":{\"id\":\"1312\"}},\"id\":\"1308\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2413\"},\"group\":null,\"major_label_policy\":{\"id\":\"2414\"},\"ticker\":{\"id\":\"1591\"}},\"id\":\"1590\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2448\"},\"selection_policy\":{\"id\":\"2447\"}},\"id\":\"1844\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1979\"},\"glyph\":{\"id\":\"1980\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1982\"},\"nonselection_glyph\":{\"id\":\"1981\"},\"view\":{\"id\":\"1984\"}},\"id\":\"1983\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2410\"},\"group\":null,\"major_label_policy\":{\"id\":\"2411\"},\"ticker\":{\"id\":\"1595\"}},\"id\":\"1594\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2407\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"ResetTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1830\"},{\"id\":\"1831\"},{\"id\":\"1832\"},{\"id\":\"1833\"},{\"id\":\"1834\"},{\"id\":\"1835\"}]},\"id\":\"1837\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2408\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1973\"}},\"id\":\"1978\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1844\"}},\"id\":\"1849\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"Fixed \\nelement\"],\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2228\"},\"selection_policy\":{\"id\":\"2227\"}},\"id\":\"1979\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1104\"},\"glyph\":{\"id\":\"1105\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1107\"},\"nonselection_glyph\":{\"id\":\"1106\"},\"view\":{\"id\":\"1109\"}},\"id\":\"1108\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1603\",\"type\":\"HelpTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1598\"},{\"id\":\"1599\"},{\"id\":\"1600\"},{\"id\":\"1601\"},{\"id\":\"1602\"},{\"id\":\"1603\"},{\"id\":\"1605\"}]},\"id\":\"1606\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1846\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2468\"},\"selection_policy\":{\"id\":\"2467\"}},\"id\":\"1648\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1979\"}},\"id\":\"1984\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1312\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1865\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[120],\"y\":[0]},\"selected\":{\"id\":\"2230\"},\"selection_policy\":{\"id\":\"2229\"}},\"id\":\"1985\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1684\"},\"glyph\":{\"id\":\"1685\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1687\"},\"nonselection_glyph\":{\"id\":\"1686\"},\"view\":{\"id\":\"1689\"}},\"id\":\"1688\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2435\"},\"selection_policy\":{\"id\":\"2434\"}},\"id\":\"1104\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"black\"},\"height\":{\"value\":30.0},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1986\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1324\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1655\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1657\"},\"nonselection_glyph\":{\"id\":\"1656\"},\"view\":{\"id\":\"1659\"}},\"id\":\"1658\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1982\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2000\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1648\"},\"glyph\":{\"id\":\"1649\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1651\"},\"nonselection_glyph\":{\"id\":\"1650\"},\"view\":{\"id\":\"1653\"}},\"id\":\"1652\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1651\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1656\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1987\",\"type\":\"Rect\"},{\"attributes\":{\"below\":[{\"id\":\"1624\"}],\"center\":[{\"id\":\"1627\"},{\"id\":\"1631\"}],\"height\":200,\"renderers\":[{\"id\":\"1724\"},{\"id\":\"1730\"},{\"id\":\"1736\"}],\"right\":[{\"id\":\"1628\"}],\"title\":{\"id\":\"1615\"},\"toolbar\":{\"id\":\"1640\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1617\"},\"x_scale\":{\"id\":\"1620\"},\"y_range\":{\"id\":\"1550\"},\"y_scale\":{\"id\":\"1622\"}},\"id\":\"1614\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2478\"},\"selection_policy\":{\"id\":\"2477\"}},\"id\":\"1666\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1993\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1650\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2470\"},\"selection_policy\":{\"id\":\"2469\"}},\"id\":\"1660\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1985\"},\"glyph\":{\"id\":\"1986\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1988\"},\"nonselection_glyph\":{\"id\":\"1987\"},\"view\":{\"id\":\"1990\"}},\"id\":\"1989\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2231\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1673\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1675\"},\"nonselection_glyph\":{\"id\":\"1674\"},\"view\":{\"id\":\"1677\"}},\"id\":\"1676\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":30.0},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":2},\"width\":{\"value\":30.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1988\",\"type\":\"Rect\"},{\"attributes\":{\"below\":[{\"id\":\"1789\"}],\"center\":[{\"id\":\"1792\"},{\"id\":\"1796\"},{\"id\":\"1857\"}],\"height\":200,\"left\":[{\"id\":\"1793\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1848\"},{\"id\":\"1867\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"}],\"title\":{\"id\":\"1779\"},\"toolbar\":{\"id\":\"1804\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1781\"},\"x_scale\":{\"id\":\"1785\"},\"y_range\":{\"id\":\"1783\"},\"y_scale\":{\"id\":\"1787\"}},\"id\":\"1778\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"tools\":[{\"id\":\"1090\"},{\"id\":\"1091\"},{\"id\":\"1092\"},{\"id\":\"1093\"},{\"id\":\"1094\"},{\"id\":\"1095\"}]},\"id\":\"1097\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1991\"},\"glyph\":{\"id\":\"1992\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1994\"},\"nonselection_glyph\":{\"id\":\"1993\"},\"view\":{\"id\":\"1996\"}},\"id\":\"1995\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1104\"}},\"id\":\"1109\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2452\"},\"selection_policy\":{\"id\":\"2451\"}},\"id\":\"1869\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1992\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2232\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":320.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":160.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1107\",\"type\":\"Rect\"},{\"attributes\":{\"end_angle\":{\"value\":0},\"line_color\":{\"value\":\"gray\"},\"line_dash\":{\"value\":\"2 5\"},\"radius\":{\"value\":60},\"start_angle\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2004\",\"type\":\"Arc\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1856\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2386\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1857\",\"type\":\"Arrow\"},{\"attributes\":{\"interval\":50},\"id\":\"1110\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{\"source\":{\"id\":\"1985\"}},\"id\":\"1990\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":400,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2137\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1121\",\"type\":\"Slider\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1864\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"Rotating \\nelement\"],\"x\":[120],\"y\":[0]},\"selected\":{\"id\":\"2232\"},\"selection_policy\":{\"id\":\"2231\"}},\"id\":\"1991\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1666\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1999\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1859\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2421\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1860\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1660\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1997\"}},\"id\":\"2002\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1862\"}},\"id\":\"1868\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1659\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1991\"}},\"id\":\"1996\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1122\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2352\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1123\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1660\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,150.0],\"y\":[0,0]},\"selected\":{\"id\":\"2234\"},\"selection_policy\":{\"id\":\"2233\"}},\"id\":\"1997\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"tools\":[{\"id\":\"1306\"},{\"id\":\"1307\"},{\"id\":\"1308\"},{\"id\":\"1309\"},{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1313\"}]},\"id\":\"1314\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1862\"},\"glyph\":{\"id\":\"1864\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1866\"},\"nonselection_glyph\":{\"id\":\"1865\"},\"view\":{\"id\":\"1868\"}},\"id\":\"1867\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_align\":{\"value\":\"center\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"14px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1994\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1122\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Scatter\"},{\"attributes\":{\"line_dash\":[4,4],\"line_width\":0.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1998\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1997\"},\"glyph\":{\"id\":\"1998\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2000\"},\"nonselection_glyph\":{\"id\":\"1999\"},\"view\":{\"id\":\"2002\"}},\"id\":\"2001\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"2162\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
- " const render_items = [{\"docid\":\"4091ddde-7c54-4fd2-a6a6-4bb0c025871d\",\"root_ids\":[\"2162\"],\"roots\":{\"2162\":\"2e089feb-3b1b-4ecc-9884-faba18e88063\"}}];\n",
- " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
- "\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " embed_document(root);\n",
- " } else {\n",
- " let attempts = 0;\n",
- " const timer = setInterval(function(root) {\n",
- " if (root.Bokeh !== undefined) {\n",
- " clearInterval(timer);\n",
- " embed_document(root);\n",
- " } else {\n",
- " attempts++;\n",
- " if (attempts > 100) {\n",
- " clearInterval(timer);\n",
- " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
- " }\n",
- " }\n",
- " }, 10, root)\n",
- " }\n",
- "})(window);"
- ],
- "application/vnd.bokehjs_exec.v0+json": ""
- },
- "metadata": {
- "application/vnd.bokehjs_exec.v0+json": {
- "id": "2162"
- }
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "hidden_code_nb_mohr.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr, initial_y, initial_theta_element, sigma_axial, sigma_bending, sigma_tau, sigma_x0, sigma_y0, tau_0, sigma_average_mohr, r_circle_mohr, theta_principal, initial_theta, new_state)"
- ]
- }
- ],
- "metadata": {
- "interpreter": {
- "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
- },
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/Simple Beam DEMOs/sb_plastic.ipynb b/Simple Beam DEMOs/sb_plastic.ipynb
deleted file mode 100644
index 212d0d9..0000000
--- a/Simple Beam DEMOs/sb_plastic.ipynb
+++ /dev/null
@@ -1,487 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Simple beam - Plastic Analysis\n",
- "In this first notebook, the plastic analysis is presented."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- " <div class=\"bk-root\">\n",
- " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
- " <span id=\"1002\">Loading BokehJS ...</span>\n",
- " </div>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "\n",
- "(function(root) {\n",
- " function now() {\n",
- " return new Date();\n",
- " }\n",
- "\n",
- " const force = true;\n",
- "\n",
- " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
- " root._bokeh_onload_callbacks = [];\n",
- " root._bokeh_is_loading = undefined;\n",
- " }\n",
- "\n",
- " const JS_MIME_TYPE = 'application/javascript';\n",
- " const HTML_MIME_TYPE = 'text/html';\n",
- " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
- " const CLASS_NAME = 'output_bokeh rendered_html';\n",
- "\n",
- " /**\n",
- " * Render data to the DOM node\n",
- " */\n",
- " function render(props, node) {\n",
- " const script = document.createElement(\"script\");\n",
- " node.appendChild(script);\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when an output is cleared or removed\n",
- " */\n",
- " function handleClearOutput(event, handle) {\n",
- " const cell = handle.cell;\n",
- "\n",
- " const id = cell.output_area._bokeh_element_id;\n",
- " const server_id = cell.output_area._bokeh_server_id;\n",
- " // Clean up Bokeh references\n",
- " if (id != null && id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- "\n",
- " if (server_id !== undefined) {\n",
- " // Clean up Bokeh references\n",
- " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
- " cell.notebook.kernel.execute(cmd_clean, {\n",
- " iopub: {\n",
- " output: function(msg) {\n",
- " const id = msg.content.text.trim();\n",
- " if (id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- " }\n",
- " }\n",
- " });\n",
- " // Destroy server and session\n",
- " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
- " cell.notebook.kernel.execute(cmd_destroy);\n",
- " }\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when a new output is added\n",
- " */\n",
- " function handleAddOutput(event, handle) {\n",
- " const output_area = handle.output_area;\n",
- " const output = handle.output;\n",
- "\n",
- " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
- " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
- " return\n",
- " }\n",
- "\n",
- " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
- "\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
- " // store reference to embed id on output_area\n",
- " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
- " }\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
- " const bk_div = document.createElement(\"div\");\n",
- " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
- " const script_attrs = bk_div.children[0].attributes;\n",
- " for (let i = 0; i < script_attrs.length; i++) {\n",
- " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
- " }\n",
- " // store reference to server id on output_area\n",
- " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
- " }\n",
- " }\n",
- "\n",
- " function register_renderer(events, OutputArea) {\n",
- "\n",
- " function append_mime(data, metadata, element) {\n",
- " // create a DOM node to render to\n",
- " const toinsert = this.create_output_subarea(\n",
- " metadata,\n",
- " CLASS_NAME,\n",
- " EXEC_MIME_TYPE\n",
- " );\n",
- " this.keyboard_manager.register_events(toinsert);\n",
- " // Render to node\n",
- " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
- " render(props, toinsert[toinsert.length - 1]);\n",
- " element.append(toinsert);\n",
- " return toinsert\n",
- " }\n",
- "\n",
- " /* Handle when an output is cleared or removed */\n",
- " events.on('clear_output.CodeCell', handleClearOutput);\n",
- " events.on('delete.Cell', handleClearOutput);\n",
- "\n",
- " /* Handle when a new output is added */\n",
- " events.on('output_added.OutputArea', handleAddOutput);\n",
- "\n",
- " /**\n",
- " * Register the mime type and append_mime function with output_area\n",
- " */\n",
- " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
- " /* Is output safe? */\n",
- " safe: true,\n",
- " /* Index of renderer in `output_area.display_order` */\n",
- " index: 0\n",
- " });\n",
- " }\n",
- "\n",
- " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
- " if (root.Jupyter !== undefined) {\n",
- " const events = require('base/js/events');\n",
- " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
- "\n",
- " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
- " register_renderer(events, OutputArea);\n",
- " }\n",
- " }\n",
- "\n",
- " \n",
- " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
- " root._bokeh_timeout = Date.now() + 5000;\n",
- " root._bokeh_failed_load = false;\n",
- " }\n",
- "\n",
- " const NB_LOAD_WARNING = {'data': {'text/html':\n",
- " \"<div style='background-color: #fdd'>\\n\"+\n",
- " \"<p>\\n\"+\n",
- " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
- " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
- " \"</p>\\n\"+\n",
- " \"<ul>\\n\"+\n",
- " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
- " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
- " \"</ul>\\n\"+\n",
- " \"<code>\\n\"+\n",
- " \"from bokeh.resources import INLINE\\n\"+\n",
- " \"output_notebook(resources=INLINE)\\n\"+\n",
- " \"</code>\\n\"+\n",
- " \"</div>\"}};\n",
- "\n",
- " function display_loaded() {\n",
- " const el = document.getElementById(\"1002\");\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS is loading...\";\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
- " }\n",
- " } else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(display_loaded, 100)\n",
- " }\n",
- " }\n",
- "\n",
- "\n",
- " function run_callbacks() {\n",
- " try {\n",
- " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
- " if (callback != null)\n",
- " callback();\n",
- " });\n",
- " } finally {\n",
- " delete root._bokeh_onload_callbacks\n",
- " }\n",
- " console.debug(\"Bokeh: all callbacks have finished\");\n",
- " }\n",
- "\n",
- " function load_libs(css_urls, js_urls, callback) {\n",
- " if (css_urls == null) css_urls = [];\n",
- " if (js_urls == null) js_urls = [];\n",
- "\n",
- " root._bokeh_onload_callbacks.push(callback);\n",
- " if (root._bokeh_is_loading > 0) {\n",
- " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
- " return null;\n",
- " }\n",
- " if (js_urls == null || js_urls.length === 0) {\n",
- " run_callbacks();\n",
- " return null;\n",
- " }\n",
- " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
- " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
- "\n",
- " function on_load() {\n",
- " root._bokeh_is_loading--;\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
- " run_callbacks()\n",
- " }\n",
- " }\n",
- "\n",
- " function on_error(url) {\n",
- " console.error(\"failed to load \" + url);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < css_urls.length; i++) {\n",
- " const url = css_urls[i];\n",
- " const element = document.createElement(\"link\");\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.rel = \"stylesheet\";\n",
- " element.type = \"text/css\";\n",
- " element.href = url;\n",
- " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < js_urls.length; i++) {\n",
- " const url = js_urls[i];\n",
- " const element = document.createElement('script');\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.async = false;\n",
- " element.src = url;\n",
- " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
- " document.head.appendChild(element);\n",
- " }\n",
- " };\n",
- "\n",
- " function inject_raw_css(css) {\n",
- " const element = document.createElement(\"style\");\n",
- " element.appendChild(document.createTextNode(css));\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " \n",
- " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
- " const css_urls = [];\n",
- " \n",
- "\n",
- " const inline_js = [\n",
- " function(Bokeh) {\n",
- " Bokeh.set_log_level(\"info\");\n",
- " },\n",
- " function(Bokeh) {\n",
- " \n",
- " \n",
- " }\n",
- " ];\n",
- "\n",
- " function run_inline_js() {\n",
- " \n",
- " if (root.Bokeh !== undefined || force === true) {\n",
- " \n",
- " for (let i = 0; i < inline_js.length; i++) {\n",
- " inline_js[i].call(root, root.Bokeh);\n",
- " }\n",
- " if (force === true) {\n",
- " display_loaded();\n",
- " }} else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(run_inline_js, 100);\n",
- " } else if (!root._bokeh_failed_load) {\n",
- " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
- " root._bokeh_failed_load = true;\n",
- " } else if (force !== true) {\n",
- " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
- " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
- " }\n",
- "\n",
- " }\n",
- "\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
- " run_inline_js();\n",
- " } else {\n",
- " load_libs(css_urls, js_urls, function() {\n",
- " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
- " run_inline_js();\n",
- " });\n",
- " }\n",
- "}(window));"
- ],
- "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Import the packages needed\n",
- "import sys\n",
- "sys.path.append('../HiddenCode')\n",
- "import hidden_code_nb_plastic\n",
- "import math\n",
- "import numpy as np \n",
- "from cienpy import simplebeam as sb\n",
- "from cienpy import rectangular_section as beam_section\n",
- "from cienpy import stress_strain_elastic as ststel\n",
- "from cienpy import stress_strain_plastic as ststpl"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the geometry and uniform load. Note that given the graphical nature of the notebook, extreme cases can cause the figures to not be displayed."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Choose the dimensions\n",
- "L = 6 # [m]\n",
- "h = 200 # [mm]\n",
- "b = 100 # [mm]\n",
- "q = 4; # [kN/m]\n",
- "P = 10; # [kN]\n",
- "\n",
- "# Choose the material parameters\n",
- "E_steel = 200e3 # [MPa] steel\n",
- "fy_steel = 355 # [MPa] steel\n",
- "E = E_steel\n",
- "fy = fy_steel\n",
- "\n",
- "# compute the internal forces (at x=L)\n",
- "discr_NVM = 100\n",
- "x_discr = np.linspace(0, L, discr_NVM)\n",
- "N_discr = sb.compute_N(x_discr, P)\n",
- "V_discr = sb.compute_V(x_discr, q, L)\n",
- "M_discr = sb.compute_M(x_discr, q, L)\n",
- "N = N_discr[-1]\n",
- "V = V_discr[-1]\n",
- "M = M_discr[-1]\n",
- "\n",
- "# compute the parameters\n",
- "A = beam_section.compute_area(b, h) # [mm2]\n",
- "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
- "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
- "yG = beam_section.compute_centroid_y(h)\n",
- "y_n_axis = ststel.compute_neutral_axis(N, A, Iy, M, yG)\n",
- "\n",
- "# compute the reactions\n",
- "Rx = sb.compute_Rx(P)\n",
- "Ry_l = sb.compute_Ry_l(q, L)\n",
- "Ry_r = sb.compute_Ry_r(q, L)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run the complex code for the interactive visualisation:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- " <div class=\"bk-root\" id=\"3c8f723c-8402-4b2c-9417-8d4e32cea55f\" data-root-id=\"4488\"></div>\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "(function(root) {\n",
- " function embed_document(root) {\n",
- " \n",
- " const docs_json = {\"cf03a18f-f85a-4414-bd96-45e97dc6b718\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"4487\"}]},\"id\":\"4488\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"4763\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"3812\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"4744\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"3806\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"4773\"},\"group\":null,\"major_label_policy\":{\"id\":\"4774\"},\"ticker\":{\"id\":\"3802\"}},\"id\":\"3801\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4764\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"3801\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"3804\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3802\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4881\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"3810\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"4882\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"3805\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"3811\"}},\"id\":\"3807\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"3808\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"4883\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"3809\",\"type\":\"ResetTool\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4841\"},\"selection_policy\":{\"id\":\"4840\"}},\"id\":\"4765\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4884\",\"type\":\"AllLabels\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3811\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"3994\"},{\"id\":\"3995\"},{\"id\":\"3996\"},{\"id\":\"3997\"},{\"id\":\"3998\"},{\"id\":\"3999\"},{\"id\":\"4001\"}]},\"id\":\"4002\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"4852\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4853\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"3838\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4855\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4840\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"3805\"},{\"id\":\"3806\"},{\"id\":\"3807\"},{\"id\":\"3808\"},{\"id\":\"3809\"},{\"id\":\"3810\"},{\"id\":\"3812\"}]},\"id\":\"3813\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"4856\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4841\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4842\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3823\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"3827\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4843\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4910\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"3829\"}],\"center\":[{\"id\":\"3832\"},{\"id\":\"3836\"}],\"height\":200,\"left\":[{\"id\":\"3833\"}],\"renderers\":[{\"id\":\"3881\"},{\"id\":\"3887\"},{\"id\":\"3905\"}],\"title\":{\"id\":\"4744\"},\"toolbar\":{\"id\":\"3845\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"3504\"},\"x_scale\":{\"id\":\"3825\"},\"y_range\":{\"id\":\"3823\"},\"y_scale\":{\"id\":\"3827\"}},\"id\":\"3821\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"4767\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"3825\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4911\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4768\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4935\"},\"selection_policy\":{\"id\":\"4934\"}},\"id\":\"4857\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"4782\"},\"group\":null,\"major_label_policy\":{\"id\":\"4783\"},\"ticker\":{\"id\":\"3830\"}},\"id\":\"3829\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4770\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"3830\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"3829\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"3832\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4771\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4886\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4779\"},\"group\":null,\"major_label_policy\":{\"id\":\"4780\"},\"ticker\":{\"id\":\"3834\"}},\"id\":\"3833\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4887\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"3833\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"3836\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3834\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4889\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4747\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"tools\":[{\"id\":\"3837\"},{\"id\":\"3838\"},{\"id\":\"3839\"},{\"id\":\"3840\"},{\"id\":\"3841\"},{\"id\":\"3842\"},{\"id\":\"3844\"}]},\"id\":\"3845\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"4890\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"3837\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"4748\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"3843\"}},\"id\":\"3839\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"3840\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"4912\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3841\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"4750\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4913\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4751\",\"type\":\"AllLabels\"},{\"attributes\":{\"below\":[{\"id\":\"4020\"}],\"center\":[{\"id\":\"4023\"},{\"id\":\"4027\"}],\"height\":200,\"left\":[{\"id\":\"4024\"}],\"renderers\":[{\"id\":\"4243\"},{\"id\":\"4249\"},{\"id\":\"4255\"}],\"title\":{\"id\":\"4011\"},\"toolbar\":{\"id\":\"4036\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"4013\"},\"x_scale\":{\"id\":\"4016\"},\"y_range\":{\"id\":\"3912\"},\"y_scale\":{\"id\":\"4018\"}},\"id\":\"4010\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"4859\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4810\"},\"selection_policy\":{\"id\":\"4809\"}},\"id\":\"4752\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4973\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4860\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4923\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4924\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4811\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4018\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4295\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"3927\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4812\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"3926\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"4016\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4297\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"4813\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4299\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"3967\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"4895\"},\"group\":null,\"major_label_policy\":{\"id\":\"4896\"},\"ticker\":{\"id\":\"4304\"},\"visible\":false},\"id\":\"4303\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4948\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4892\"},\"group\":null,\"major_label_policy\":{\"id\":\"4893\"},\"ticker\":{\"id\":\"4308\"},\"visible\":false},\"id\":\"4307\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4814\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4312\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4949\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"4303\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"4306\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4925\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"4293\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"4815\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4304\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"4307\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"4310\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4926\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"3948\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4301\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4816\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4325\"},\"glyph\":{\"id\":\"4326\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4328\"},\"nonselection_glyph\":{\"id\":\"4327\"},\"view\":{\"id\":\"4330\"}},\"id\":\"4329\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4308\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4817\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4316\",\"type\":\"HelpTool\"},{\"attributes\":{\"tools\":[{\"id\":\"3926\"},{\"id\":\"3927\"},{\"id\":\"3928\"},{\"id\":\"3929\"},{\"id\":\"3930\"},{\"id\":\"3931\"},{\"id\":\"3933\"}]},\"id\":\"3934\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"4311\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"3945\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"4317\"}},\"id\":\"4313\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4246\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4248\"},\"nonselection_glyph\":{\"id\":\"4247\"},\"view\":{\"id\":\"4250\"}},\"id\":\"4249\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4818\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4314\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"4315\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"3964\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"3943\",\"type\":\"Title\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4317\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"3952\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"3955\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4819\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4927\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3961\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"3950\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4820\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4928\",\"type\":\"Selection\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4357\",\"type\":\"Text\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"4861\"},\"group\":null,\"major_label_policy\":{\"id\":\"4862\"},\"ticker\":{\"id\":\"4237\"}},\"id\":\"3952\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4859\"},\"group\":null,\"major_label_policy\":{\"id\":\"4860\"},\"ticker\":{\"id\":\"3957\"},\"visible\":false},\"id\":\"3956\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4358\",\"type\":\"Text\"},{\"attributes\":{\"axis\":{\"id\":\"3956\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"3959\",\"type\":\"Grid\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4363\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"3957\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4950\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4356\"},\"glyph\":{\"id\":\"4357\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4359\"},\"nonselection_glyph\":{\"id\":\"4358\"},\"view\":{\"id\":\"4361\"}},\"id\":\"4360\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"3965\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"4951\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"4356\"}},\"id\":\"4361\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3960\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"3966\"}},\"id\":\"3962\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"3963\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4334\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"3986\"}],\"center\":[{\"id\":\"3989\"},{\"id\":\"3993\"}],\"height\":200,\"left\":[{\"id\":\"3990\"}],\"renderers\":[{\"id\":\"4169\"},{\"id\":\"4175\"},{\"id\":\"4181\"}],\"title\":{\"id\":\"3977\"},\"toolbar\":{\"id\":\"4002\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"3979\"},\"x_scale\":{\"id\":\"3982\"},\"y_range\":{\"id\":\"3912\"},\"y_scale\":{\"id\":\"3984\"}},\"id\":\"3976\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3966\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4343\"},\"glyph\":{\"id\":\"4345\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4347\"},\"nonselection_glyph\":{\"id\":\"4346\"},\"view\":{\"id\":\"4349\"}},\"id\":\"4348\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4929\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4930\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4328\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4326\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4013\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"4924\"},\"selection_policy\":{\"id\":\"4923\"}},\"id\":\"4325\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"tools\":[{\"id\":\"4311\"},{\"id\":\"4312\"},{\"id\":\"4313\"},{\"id\":\"4314\"},{\"id\":\"4315\"},{\"id\":\"4316\"}]},\"id\":\"4318\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"4325\"}},\"id\":\"4330\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4821\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"4973\"},\"selection_policy\":{\"id\":\"4972\"}},\"id\":\"4331\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4327\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4794\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4822\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4931\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"4926\"},\"selection_policy\":{\"id\":\"4925\"}},\"id\":\"4343\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4331\"},\"glyph\":{\"id\":\"4332\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4334\"},\"nonselection_glyph\":{\"id\":\"4333\"},\"view\":{\"id\":\"4336\"}},\"id\":\"4335\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4795\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4823\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4932\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4332\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4333\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4824\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"4331\"}},\"id\":\"4336\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"3960\"},{\"id\":\"3961\"},{\"id\":\"3962\"},{\"id\":\"3963\"},{\"id\":\"3964\"},{\"id\":\"3965\"},{\"id\":\"3967\"}]},\"id\":\"3968\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"4340\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"4340\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"4897\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"4341\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"3979\",\"type\":\"DataRange1d\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4359\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"4337\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"4857\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"4338\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4812\"},\"selection_policy\":{\"id\":\"4811\"}},\"id\":\"4753\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4221\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4871\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4814\"},\"selection_policy\":{\"id\":\"4813\"}},\"id\":\"4754\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4831\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4284\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"4219\"}},\"id\":\"4224\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4222\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4872\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4832\",\"type\":\"Selection\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"4237\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"4960\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4227\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4981\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4816\"},\"selection_policy\":{\"id\":\"4815\"}},\"id\":\"4755\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4226\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4873\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4848\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4961\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4982\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4849\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4228\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4818\"},\"selection_policy\":{\"id\":\"4817\"}},\"id\":\"4756\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4234\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4230\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4232\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"4941\"},\"selection_policy\":{\"id\":\"4940\"}},\"id\":\"4231\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4820\"},\"selection_policy\":{\"id\":\"4819\"}},\"id\":\"4757\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4231\"},\"glyph\":{\"id\":\"4232\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4234\"},\"nonselection_glyph\":{\"id\":\"4233\"},\"view\":{\"id\":\"4236\"}},\"id\":\"4235\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4240\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4233\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4239\"},\"glyph\":{\"id\":\"4240\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4242\"},\"nonselection_glyph\":{\"id\":\"4241\"},\"view\":{\"id\":\"4244\"}},\"id\":\"4243\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"4231\"}},\"id\":\"4236\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4833\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"4239\"}},\"id\":\"4244\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"4949\"},\"selection_policy\":{\"id\":\"4948\"}},\"id\":\"4239\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"4257\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"4834\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4241\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4246\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4242\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4247\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4283\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"4266\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4248\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4254\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4962\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4250\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4252\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4963\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"4951\"},\"selection_policy\":{\"id\":\"4950\"}},\"id\":\"4251\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4251\"},\"glyph\":{\"id\":\"4252\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4254\"},\"nonselection_glyph\":{\"id\":\"4253\"},\"view\":{\"id\":\"4256\"}},\"id\":\"4255\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4875\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4262\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4253\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"4270\"}],\"center\":[{\"id\":\"4273\"},{\"id\":\"4277\"},{\"id\":\"4338\"}],\"height\":200,\"left\":[{\"id\":\"4274\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"4329\"},{\"id\":\"4348\"},{\"id\":\"4354\"},{\"id\":\"4360\"},{\"id\":\"4366\"}],\"title\":{\"id\":\"4260\"},\"toolbar\":{\"id\":\"4285\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"4262\"},\"x_scale\":{\"id\":\"4266\"},\"y_range\":{\"id\":\"4264\"},\"y_scale\":{\"id\":\"4268\"}},\"id\":\"4259\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"4835\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4876\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"4251\"}},\"id\":\"4256\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4984\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4264\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"4836\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4878\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"4855\"},\"group\":null,\"major_label_policy\":{\"id\":\"4856\"},\"ticker\":{\"id\":\"4271\"},\"visible\":false},\"id\":\"4270\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4985\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4852\"},\"group\":null,\"major_label_policy\":{\"id\":\"4853\"},\"ticker\":{\"id\":\"4275\"},\"visible\":false},\"id\":\"4274\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4879\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"4270\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"4273\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"4260\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"4271\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"4274\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"4277\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4268\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"4303\"}],\"center\":[{\"id\":\"4306\"},{\"id\":\"4310\"},{\"id\":\"4341\"}],\"height\":200,\"left\":[{\"id\":\"4307\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"4335\"},{\"id\":\"4372\"}],\"title\":{\"id\":\"4293\"},\"toolbar\":{\"id\":\"4318\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"4295\"},\"x_scale\":{\"id\":\"4299\"},\"y_range\":{\"id\":\"4297\"},\"y_scale\":{\"id\":\"4301\"}},\"id\":\"4292\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"4837\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4275\",\"type\":\"BasicTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"4278\"},{\"id\":\"4279\"},{\"id\":\"4280\"},{\"id\":\"4281\"},{\"id\":\"4282\"},{\"id\":\"4283\"}]},\"id\":\"4285\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"4838\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4278\",\"type\":\"PanTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4365\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"4932\"},\"selection_policy\":{\"id\":\"4931\"}},\"id\":\"4362\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4362\"},\"glyph\":{\"id\":\"4363\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4365\"},\"nonselection_glyph\":{\"id\":\"4364\"},\"view\":{\"id\":\"4367\"}},\"id\":\"4366\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4965\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4364\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"4986\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4760\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4966\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4987\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4761\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3498\"},\"glyph\":{\"id\":\"3712\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3714\"},\"nonselection_glyph\":{\"id\":\"3713\"},\"view\":{\"id\":\"3716\"}},\"id\":\"3715\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"4259\"},{\"id\":\"3942\"},{\"id\":\"3907\"},{\"id\":\"4010\"},{\"id\":\"3976\"},{\"id\":\"4378\"},{\"id\":\"4079\"}]},\"id\":\"4478\",\"type\":\"Row\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3717\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"4752\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"3718\",\"type\":\"Arrow\"},{\"attributes\":{\"children\":[{\"id\":\"4474\"},{\"id\":\"4476\"}]},\"id\":\"4477\",\"type\":\"Row\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"3720\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"4843\"},\"selection_policy\":{\"id\":\"4842\"}},\"id\":\"3853\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"4292\"},{\"id\":\"4479\"},{\"id\":\"4044\"},{\"id\":\"4480\"},{\"id\":\"4481\"},{\"id\":\"4482\"},{\"id\":\"4113\"}]},\"id\":\"4483\",\"type\":\"Row\"},{\"attributes\":{\"source\":{\"id\":\"3498\"}},\"id\":\"3716\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"3723\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3878\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3853\"},\"glyph\":{\"id\":\"3854\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3856\"},\"nonselection_glyph\":{\"id\":\"3855\"},\"view\":{\"id\":\"3858\"}},\"id\":\"3857\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"3717\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"3729\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3856\",\"type\":\"Line\"},{\"attributes\":{\"width\":200},\"id\":\"4482\",\"type\":\"Spacer\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"3726\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3854\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3729\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"4756\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"3730\",\"type\":\"Arrow\"},{\"attributes\":{\"below\":[{\"id\":\"3952\"}],\"center\":[{\"id\":\"3955\"},{\"id\":\"3959\"}],\"height\":200,\"left\":[{\"id\":\"3956\"}],\"renderers\":[{\"id\":\"4223\"},{\"id\":\"4229\"},{\"id\":\"4235\"}],\"title\":{\"id\":\"3943\"},\"toolbar\":{\"id\":\"3968\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"3945\"},\"x_scale\":{\"id\":\"3948\"},\"y_range\":{\"id\":\"3912\"},\"y_scale\":{\"id\":\"3950\"}},\"id\":\"3942\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3720\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"4753\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"3721\",\"type\":\"Arrow\"},{\"attributes\":{\"width\":200},\"id\":\"4479\",\"type\":\"Spacer\"},{\"attributes\":{\"source\":{\"id\":\"3853\"}},\"id\":\"3858\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3732\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"4757\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"3733\",\"type\":\"Arrow\"},{\"attributes\":{\"width\":200},\"id\":\"4481\",\"type\":\"Spacer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3855\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3723\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"4754\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"3724\",\"type\":\"Arrow\"},{\"attributes\":{\"width\":200},\"id\":\"4480\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"4478\"},{\"id\":\"4483\"}]},\"id\":\"4484\",\"type\":\"Column\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"3732\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3861\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3726\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"4755\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"3727\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3862\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3860\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3496\"},\"glyph\":{\"id\":\"3872\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3874\"},\"nonselection_glyph\":{\"id\":\"3873\"},\"view\":{\"id\":\"3876\"}},\"id\":\"3875\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"children\":[{\"id\":\"4484\"}]},\"id\":\"4485\",\"type\":\"Row\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"4805\"},\"selection_policy\":{\"id\":\"4804\"}},\"id\":\"3735\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3868\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"4807\"},\"selection_policy\":{\"id\":\"4806\"}},\"id\":\"3742\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"3496\"}},\"id\":\"3864\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4804\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"4477\"},{\"id\":\"4485\"}]},\"id\":\"4486\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3735\"},\"glyph\":{\"id\":\"3737\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3739\"},\"nonselection_glyph\":{\"id\":\"3738\"},\"view\":{\"id\":\"3741\"}},\"id\":\"3740\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3866\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3738\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4805\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3932\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-12.0,-11.757575757575758,-11.515151515151516,-11.272727272727273,-11.030303030303031,-10.787878787878787,-10.545454545454545,-10.303030303030303,-10.06060606060606,-9.818181818181818,-9.575757575757576,-9.333333333333332,-9.09090909090909,-8.848484848484848,-8.606060606060606,-8.363636363636363,-8.121212121212121,-7.878787878787879,-7.636363636363637,-7.393939393939394,-7.151515151515151,-6.909090909090909,-6.666666666666666,-6.424242424242424,-6.181818181818182,-5.9393939393939394,-5.696969696969697,-5.454545454545454,-5.212121212121212,-4.96969696969697,-4.727272727272727,-4.484848484848484,-4.242424242424242,-4.0,-3.757575757575758,-3.5151515151515156,-3.2727272727272734,-3.0303030303030294,-2.787878787878787,-2.545454545454545,-2.3030303030303028,-2.0606060606060606,-1.8181818181818183,-1.5757575757575761,-1.3333333333333321,-1.09090909090909,-0.8484848484848477,-0.6060606060606055,-0.3636363636363633,-0.1212121212121211,0.1212121212121211,0.3636363636363633,0.6060606060606055,0.8484848484848495,1.0909090909090917,1.333333333333334,1.5757575757575761,1.8181818181818183,2.0606060606060606,2.3030303030303028,2.5454545454545467,2.787878787878789,3.030303030303031,3.2727272727272734,3.5151515151515156,3.757575757575758,4.0,4.242424242424242,4.484848484848484,4.727272727272727,4.969696969696969,5.212121212121211,5.454545454545453,5.696969696969699,5.939393939393941,6.181818181818183,6.424242424242426,6.666666666666668,6.90909090909091,7.151515151515152,7.3939393939393945,7.636363636363637,7.878787878787879,8.121212121212121,8.363636363636363,8.606060606060606,8.848484848484848,9.09090909090909,9.333333333333336,9.575757575757578,9.81818181818182,10.060606060606062,10.303030303030305,10.545454545454547,10.787878787878789,11.030303030303031,11.272727272727273,11.515151515151516,11.757575757575758,12.0,0]},\"selected\":{\"id\":\"4846\"},\"selection_policy\":{\"id\":\"4845\"}},\"id\":\"3865\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3737\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4905\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"4486\"}]},\"id\":\"4487\",\"type\":\"Row\"},{\"attributes\":{\"axis\":{\"id\":\"3765\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"3768\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3865\"},\"glyph\":{\"id\":\"3866\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3868\"},\"nonselection_glyph\":{\"id\":\"3867\"},\"view\":{\"id\":\"3870\"}},\"id\":\"3869\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3739\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"3865\"}},\"id\":\"3870\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4943\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3867\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4906\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"3735\"}},\"id\":\"3741\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3766\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3873\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4944\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3874\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4908\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"3756\",\"type\":\"Title\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3872\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"4770\"},\"group\":null,\"major_label_policy\":{\"id\":\"4771\"},\"ticker\":{\"id\":\"3766\"},\"visible\":false},\"id\":\"3765\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3496\"},\"glyph\":{\"id\":\"3884\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3886\"},\"nonselection_glyph\":{\"id\":\"3885\"},\"view\":{\"id\":\"3888\"}},\"id\":\"3887\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4909\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"4767\"},\"group\":null,\"major_label_policy\":{\"id\":\"4768\"},\"ticker\":{\"id\":\"3770\"}},\"id\":\"3769\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3880\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"3774\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"3496\"}},\"id\":\"3876\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"3780\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"3877\"}},\"id\":\"3882\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3778\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3885\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4806\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3773\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-0.0,-0.7199265381083563,-1.4251606978879707,-2.115702479338843,-2.7915518824609737,-3.452708907254362,-4.099173553719009,-4.730945821854913,-5.348025711662076,-5.950413223140496,-6.5381083562901745,-7.111111111111112,-7.669421487603306,-8.213039485766759,-8.74196510560147,-9.25619834710744,-9.755739210284665,-10.240587695133149,-10.710743801652892,-11.166207529843895,-11.606978879706153,-12.03305785123967,-12.444444444444445,-12.841138659320476,-13.223140495867767,-13.590449954086317,-13.943067033976122,-14.28099173553719,-14.604224058769512,-14.912764003673093,-15.206611570247935,-15.485766758494032,-15.750229568411386,-16.0,-16.235078053259873,-16.455463728191,-16.661157024793386,-16.852157943067034,-17.02846648301194,-17.1900826446281,-17.33700642791552,-17.469237832874196,-17.58677685950413,-17.689623507805326,-17.77777777777778,-17.85123966942149,-17.910009182736456,-17.95408631772268,-17.983471074380166,-17.99816345270891,-17.99816345270891,-17.983471074380166,-17.95408631772268,-17.910009182736456,-17.85123966942149,-17.77777777777778,-17.689623507805326,-17.58677685950413,-17.469237832874196,-17.33700642791552,-17.1900826446281,-17.028466483011936,-16.852157943067034,-16.661157024793386,-16.455463728191,-16.235078053259873,-16.0,-15.750229568411386,-15.485766758494032,-15.206611570247935,-14.912764003673095,-14.604224058769514,-14.280991735537192,-13.943067033976122,-13.590449954086315,-13.223140495867765,-12.841138659320475,-12.444444444444443,-12.033057851239668,-11.606978879706151,-11.166207529843893,-10.710743801652892,-10.240587695133149,-9.755739210284665,-9.25619834710744,-8.741965105601471,-8.21303948576676,-7.669421487603308,-7.111111111111105,-6.538108356290169,-5.950413223140491,-5.348025711662071,-4.730945821854909,-4.099173553719005,-3.452708907254359,-2.791551882460971,-2.1157024793388413,-1.4251606978879694,-0.7199265381083556,0.0,0]},\"selected\":{\"id\":\"4849\"},\"selection_policy\":{\"id\":\"4848\"}},\"id\":\"3877\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"3779\"}},\"id\":\"3775\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3877\"},\"glyph\":{\"id\":\"3878\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3880\"},\"nonselection_glyph\":{\"id\":\"3879\"},\"view\":{\"id\":\"3882\"}},\"id\":\"3881\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"3776\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"4807\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"3777\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3879\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3886\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3779\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3884\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"3890\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"3896\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3500\"},\"glyph\":{\"id\":\"3890\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3892\"},\"nonselection_glyph\":{\"id\":\"3891\"},\"view\":{\"id\":\"3894\"}},\"id\":\"3893\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"3496\"}},\"id\":\"3888\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"3844\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"3500\"}},\"id\":\"3894\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"3891\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"3933\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3496\"},\"glyph\":{\"id\":\"3860\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3862\"},\"nonselection_glyph\":{\"id\":\"3861\"},\"view\":{\"id\":\"3864\"}},\"id\":\"3863\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"3930\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"3892\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3843\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3500\"},\"glyph\":{\"id\":\"3896\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3898\"},\"nonselection_glyph\":{\"id\":\"3897\"},\"view\":{\"id\":\"3900\"}},\"id\":\"3899\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"3897\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"4945\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3842\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"3929\",\"type\":\"SaveTool\"},{\"attributes\":{\"overlay\":{\"id\":\"3932\"}},\"id\":\"3928\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"3902\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"4946\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"3797\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"3800\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"3500\"}},\"id\":\"3900\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"3898\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3500\"},\"glyph\":{\"id\":\"3902\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3904\"},\"nonselection_glyph\":{\"id\":\"3903\"},\"view\":{\"id\":\"3906\"}},\"id\":\"3905\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"3903\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"3931\",\"type\":\"HelpTool\"},{\"attributes\":{\"tools\":[{\"id\":\"3773\"},{\"id\":\"3774\"},{\"id\":\"3775\"},{\"id\":\"3776\"},{\"id\":\"3777\"},{\"id\":\"3778\"},{\"id\":\"3780\"}]},\"id\":\"3781\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"3918\"}],\"center\":[{\"id\":\"3921\"},{\"id\":\"3925\"}],\"height\":200,\"left\":[{\"id\":\"3922\"}],\"renderers\":[{\"id\":\"4151\"},{\"id\":\"4157\"},{\"id\":\"4163\"}],\"title\":{\"id\":\"3908\"},\"toolbar\":{\"id\":\"3934\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"3910\"},\"x_scale\":{\"id\":\"3914\"},\"y_range\":{\"id\":\"3912\"},\"y_scale\":{\"id\":\"3916\"}},\"id\":\"3907\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"3500\"}},\"id\":\"3906\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"3904\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"4776\"},\"group\":null,\"major_label_policy\":{\"id\":\"4777\"},\"ticker\":{\"id\":\"3798\"},\"visible\":false},\"id\":\"3797\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"3910\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"3916\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"3919\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"3791\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"3912\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"3908\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"4742\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4864\"},\"group\":null,\"major_label_policy\":{\"id\":\"4865\"},\"ticker\":{\"id\":\"3923\"},\"visible\":false},\"id\":\"3922\",\"type\":\"LinearAxis\"},{\"attributes\":{\"below\":[{\"id\":\"3797\"}],\"center\":[{\"id\":\"3800\"},{\"id\":\"3804\"}],\"height\":160,\"left\":[{\"id\":\"3801\"}],\"renderers\":[{\"id\":\"3869\"},{\"id\":\"3875\"},{\"id\":\"3899\"}],\"title\":{\"id\":\"4742\"},\"toolbar\":{\"id\":\"3813\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"3504\"},\"x_scale\":{\"id\":\"3793\"},\"y_range\":{\"id\":\"3791\"},\"y_scale\":{\"id\":\"3795\"}},\"id\":\"3789\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"3918\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"3921\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3793\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"3914\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4809\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"4867\"},\"group\":null,\"major_label_policy\":{\"id\":\"4868\"},\"ticker\":{\"id\":\"3919\"}},\"id\":\"3918\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"3923\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4810\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"3795\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"3798\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"3922\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"3925\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4345\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4352\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"4098\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4773\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4886\"},\"group\":null,\"major_label_policy\":{\"id\":\"4887\"},\"ticker\":{\"id\":\"4094\"}},\"id\":\"4093\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"4928\"},\"selection_policy\":{\"id\":\"4927\"}},\"id\":\"4350\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"4093\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"4096\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4346\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4094\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4369\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"4774\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4183\"},\"glyph\":{\"id\":\"4184\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4186\"},\"nonselection_glyph\":{\"id\":\"4185\"},\"view\":{\"id\":\"4188\"}},\"id\":\"4187\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4347\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4343\"}},\"id\":\"4349\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":1000,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"4468\"}]},\"margin\":[0,5,0,5],\"start\":16,\"title\":\"Change the yield strength [MPa]\",\"value\":355},\"id\":\"4376\",\"type\":\"Slider\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"4828\"},\"selection_policy\":{\"id\":\"4827\"}},\"id\":\"3496\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4776\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4353\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"4097\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"4103\"}},\"id\":\"4099\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"4975\"},\"selection_policy\":{\"id\":\"4974\"}},\"id\":\"4368\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"4799\"},\"selection_policy\":{\"id\":\"4798\"}},\"id\":\"3497\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4777\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4351\",\"type\":\"Scatter\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"3504\",\"type\":\"Range1d\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4370\",\"type\":\"Text\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4184\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"4930\"},\"selection_policy\":{\"id\":\"4929\"}},\"id\":\"4356\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4350\"},\"glyph\":{\"id\":\"4351\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4353\"},\"nonselection_glyph\":{\"id\":\"4352\"},\"view\":{\"id\":\"4355\"}},\"id\":\"4354\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4190\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4192\"},\"nonselection_glyph\":{\"id\":\"4191\"},\"view\":{\"id\":\"4194\"}},\"id\":\"4193\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4974\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"4350\"}},\"id\":\"4355\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"4980\"},\"selection_policy\":{\"id\":\"4979\"}},\"id\":\"4183\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"4362\"}},\"id\":\"4367\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4975\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4179\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4371\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"4368\"}},\"id\":\"4373\",\"type\":\"CDSView\"},{\"attributes\":{\"margin\":[0,5,0,5],\"text\":\"\\n <p style='font-size:12px'>\\n E<sub>wood</sub> = 8 GPa; E<sub>concrete</sub> = 26 GPa<br>\\n E<sub>steel</sub> = 200 GPa; E<sub>ceramic</sub> = 300 GPa</p>\\n \"},\"id\":\"4375\",\"type\":\"Div\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"4114\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"4388\"}],\"center\":[{\"id\":\"4391\"},{\"id\":\"4395\"}],\"height\":200,\"left\":[{\"id\":\"4392\"}],\"renderers\":[{\"id\":\"4422\"},{\"id\":\"4428\"},{\"id\":\"4434\"},{\"id\":\"4440\"}],\"title\":{\"id\":\"4379\"},\"toolbar\":{\"id\":\"4404\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"4381\"},\"x_scale\":{\"id\":\"4384\"},\"y_range\":{\"id\":\"3912\"},\"y_scale\":{\"id\":\"4386\"}},\"id\":\"4378\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4368\"},\"glyph\":{\"id\":\"4369\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4371\"},\"nonselection_glyph\":{\"id\":\"4370\"},\"view\":{\"id\":\"4373\"}},\"id\":\"4372\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4381\",\"type\":\"DataRange1d\"},{\"attributes\":{\"margin\":[0,5,0,5],\"text\":\"\\n <p style='font-size:12px'>\\n f<sub>y,wood</sub> = 16 MPa; f<sub>y,concrete</sub> = 25 MPa<br>\\n f<sub>y,steel</sub> = 355 MPa; f<sub>y,glass</sub> = 1000 MPa</p>\\n \"},\"id\":\"4377\",\"type\":\"Div\"},{\"attributes\":{\"end\":300000.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"4469\"}]},\"margin\":[5,5,0,5],\"start\":8000.0,\"step\":1000.0,\"title\":\"Change the elastic modulus [MPa]\",\"value\":200000.0},\"id\":\"4374\",\"type\":\"Slider\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"4138\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4451\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4453\"},\"nonselection_glyph\":{\"id\":\"4452\"},\"view\":{\"id\":\"4455\"}},\"id\":\"4454\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4124\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4384\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"4403\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"3763\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total strain (green=yield)\"},\"id\":\"4379\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"4388\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"4391\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3761\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4116\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"4397\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"4803\"},\"selection_policy\":{\"id\":\"4802\"}},\"id\":\"3498\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4219\"},\"glyph\":{\"id\":\"4220\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4222\"},\"nonselection_glyph\":{\"id\":\"4221\"},\"view\":{\"id\":\"4224\"}},\"id\":\"4223\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4386\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"4097\"},{\"id\":\"4098\"},{\"id\":\"4099\"},{\"id\":\"4100\"},{\"id\":\"4101\"},{\"id\":\"4102\"},{\"id\":\"4104\"}]},\"id\":\"4105\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"4883\"},\"group\":null,\"major_label_policy\":{\"id\":\"4884\"},\"ticker\":{\"id\":\"4442\"}},\"id\":\"4388\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"4123\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"4126\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4881\"},\"group\":null,\"major_label_policy\":{\"id\":\"4882\"},\"ticker\":{\"id\":\"4393\"},\"visible\":false},\"id\":\"4392\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"4392\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"4395\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4393\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4119\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4132\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4121\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4401\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"4779\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4396\",\"type\":\"PanTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"4908\"},\"group\":null,\"major_label_policy\":{\"id\":\"4909\"},\"ticker\":{\"id\":\"4124\"}},\"id\":\"4123\",\"type\":\"LinearAxis\"},{\"attributes\":{\"overlay\":{\"id\":\"4402\"}},\"id\":\"4398\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4905\"},\"group\":null,\"major_label_policy\":{\"id\":\"4906\"},\"ticker\":{\"id\":\"4128\"}},\"id\":\"4127\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4399\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"4780\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4400\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"3660\"}},\"id\":\"3665\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4154\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4156\"},\"nonselection_glyph\":{\"id\":\"4155\"},\"view\":{\"id\":\"4158\"}},\"id\":\"4157\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"3513\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"4127\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"4130\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"4782\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4128\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4402\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"4977\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"4396\"},{\"id\":\"4397\"},{\"id\":\"4398\"},{\"id\":\"4399\"},{\"id\":\"4400\"},{\"id\":\"4401\"},{\"id\":\"4403\"}]},\"id\":\"4404\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"4783\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"4939\"},\"selection_policy\":{\"id\":\"4938\"}},\"id\":\"3499\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4136\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"fy\":[355],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"4797\"},\"selection_policy\":{\"id\":\"4796\"}},\"id\":\"3500\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4131\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"4978\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"3512\"}],\"center\":[{\"id\":\"3515\"},{\"id\":\"3519\"},{\"id\":\"3673\"}],\"height\":200,\"left\":[{\"id\":\"3516\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"3580\"},{\"id\":\"3586\"},{\"id\":\"3592\"},{\"id\":\"3664\"},{\"id\":\"3670\"},{\"id\":\"3679\"},{\"id\":\"3685\"}],\"title\":{\"id\":\"3502\"},\"toolbar\":{\"id\":\"3527\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"3504\"},\"x_scale\":{\"id\":\"3508\"},\"y_range\":{\"id\":\"3506\"},\"y_scale\":{\"id\":\"3510\"}},\"id\":\"3501\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4446\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"4137\"}},\"id\":\"4133\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"3545\"}],\"center\":[{\"id\":\"3548\"},{\"id\":\"3552\"},{\"id\":\"3604\"},{\"id\":\"3613\"}],\"left\":[{\"id\":\"3549\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"3571\"},{\"id\":\"3598\"},{\"id\":\"3610\"},{\"id\":\"3619\"}],\"title\":{\"id\":\"3535\"},\"toolbar\":{\"id\":\"3560\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"3537\"},\"x_scale\":{\"id\":\"3541\"},\"y_range\":{\"id\":\"3539\"},\"y_scale\":{\"id\":\"3543\"}},\"id\":\"3534\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"4979\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3508\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4134\",\"type\":\"SaveTool\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"3506\",\"type\":\"Range1d\"},{\"attributes\":{\"source\":{\"id\":\"4444\"}},\"id\":\"4449\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4135\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"3502\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"4980\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4445\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"3512\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"3515\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4444\"},\"glyph\":{\"id\":\"4445\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4447\"},\"nonselection_glyph\":{\"id\":\"4446\"},\"view\":{\"id\":\"4449\"}},\"id\":\"4448\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4137\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"3510\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"4763\"},\"group\":null,\"major_label_policy\":{\"id\":\"4764\"},\"ticker\":{\"id\":\"3513\"}},\"id\":\"3512\",\"type\":\"LinearAxis\"},{\"attributes\":{\"tools\":[{\"id\":\"4131\"},{\"id\":\"4132\"},{\"id\":\"4133\"},{\"id\":\"4134\"},{\"id\":\"4135\"},{\"id\":\"4136\"},{\"id\":\"4138\"}]},\"id\":\"4139\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4447\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"3525\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"4760\"},\"group\":null,\"major_label_policy\":{\"id\":\"4761\"},\"ticker\":{\"id\":\"3517\"},\"visible\":false},\"id\":\"3516\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4431\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4433\"},\"nonselection_glyph\":{\"id\":\"4432\"},\"view\":{\"id\":\"4435\"}},\"id\":\"4434\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"3516\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"3519\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3517\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3568\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"4177\"}},\"id\":\"4182\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3521\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"3520\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4180\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"3526\"}},\"id\":\"3522\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"3523\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4178\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"3524\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4177\"},\"glyph\":{\"id\":\"4178\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4180\"},\"nonselection_glyph\":{\"id\":\"4179\"},\"view\":{\"id\":\"4182\"}},\"id\":\"4181\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4412\"},\"glyph\":{\"id\":\"4413\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4415\"},\"nonselection_glyph\":{\"id\":\"4414\"},\"view\":{\"id\":\"4417\"}},\"id\":\"4416\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3526\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"3520\"},{\"id\":\"3521\"},{\"id\":\"3522\"},{\"id\":\"3523\"},{\"id\":\"3524\"},{\"id\":\"3525\"}]},\"id\":\"3527\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"4861\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4862\",\"type\":\"AllLabels\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"3752\",\"type\":\"Div\"},{\"attributes\":{\"source\":{\"id\":\"3654\"}},\"id\":\"3659\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4892\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4047\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"4893\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"4028\"},{\"id\":\"4029\"},{\"id\":\"4030\"},{\"id\":\"4031\"},{\"id\":\"4032\"},{\"id\":\"4033\"},{\"id\":\"4035\"}]},\"id\":\"4036\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3654\"},\"glyph\":{\"id\":\"3655\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3657\"},\"nonselection_glyph\":{\"id\":\"3656\"},\"view\":{\"id\":\"3659\"}},\"id\":\"3658\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4895\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4056\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4053\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4049\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"4896\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"4045\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3661\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"4055\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"4058\",\"type\":\"Grid\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3667\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"3672\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"4051\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"4834\"},\"selection_policy\":{\"id\":\"4833\"}},\"id\":\"3660\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"4902\"},\"group\":null,\"major_label_policy\":{\"id\":\"4903\"},\"ticker\":{\"id\":\"4056\"}},\"id\":\"4055\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"4070\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3660\"},\"glyph\":{\"id\":\"3661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3663\"},\"nonselection_glyph\":{\"id\":\"3662\"},\"view\":{\"id\":\"3665\"}},\"id\":\"3664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4064\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3662\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"4934\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3672\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"4765\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"3673\",\"type\":\"Arrow\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4899\"},\"group\":null,\"major_label_policy\":{\"id\":\"4900\"},\"ticker\":{\"id\":\"4060\"},\"visible\":false},\"id\":\"4059\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3663\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"4059\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"4062\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3666\"},\"glyph\":{\"id\":\"3667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3669\"},\"nonselection_glyph\":{\"id\":\"3668\"},\"view\":{\"id\":\"3671\"}},\"id\":\"3670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4978\"},\"selection_policy\":{\"id\":\"4977\"}},\"id\":\"4897\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4060\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"4836\"},\"selection_policy\":{\"id\":\"4835\"}},\"id\":\"3666\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4935\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"3666\"}},\"id\":\"3671\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4936\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4068\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"3675\"}},\"id\":\"3680\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4063\",\"type\":\"PanTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3668\",\"type\":\"Text\"},{\"attributes\":{\"overlay\":{\"id\":\"4069\"}},\"id\":\"4065\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"4937\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3682\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"4864\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4066\",\"type\":\"SaveTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3669\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"4067\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3500\"},\"glyph\":{\"id\":\"3688\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3690\"},\"nonselection_glyph\":{\"id\":\"3689\"},\"view\":{\"id\":\"3692\"}},\"id\":\"3691\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3675\"},\"glyph\":{\"id\":\"3676\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3678\"},\"nonselection_glyph\":{\"id\":\"3677\"},\"view\":{\"id\":\"3680\"}},\"id\":\"3679\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4865\",\"type\":\"AllLabels\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4069\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"4838\"},\"selection_policy\":{\"id\":\"4837\"}},\"id\":\"3675\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3676\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"4867\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3500\"},\"glyph\":{\"id\":\"3682\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3684\"},\"nonselection_glyph\":{\"id\":\"3683\"},\"view\":{\"id\":\"3686\"}},\"id\":\"3685\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3677\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3683\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"4868\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4101\",\"type\":\"ResetTool\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3678\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"3742\"}},\"id\":\"3747\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3684\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"4104\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"3500\"}},\"id\":\"3686\",\"type\":\"CDSView\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"4466\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"3751\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{},\"id\":\"4938\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"4462\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"3749\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"4100\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"3689\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"4939\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"3688\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"4102\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3745\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3497\"},\"glyph\":{\"id\":\"3694\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3696\"},\"nonselection_glyph\":{\"id\":\"3695\"},\"view\":{\"id\":\"3698\"}},\"id\":\"3697\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"3500\"}},\"id\":\"3692\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"3690\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3699\"},\"glyph\":{\"id\":\"3700\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3702\"},\"nonselection_glyph\":{\"id\":\"3701\"},\"view\":{\"id\":\"3704\"}},\"id\":\"3703\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3694\",\"type\":\"Line\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"3750\",\"type\":\"Div\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3695\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4899\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"3712\",\"type\":\"Patch\"},{\"attributes\":{\"tools\":[{\"id\":\"4063\"},{\"id\":\"4064\"},{\"id\":\"4065\"},{\"id\":\"4066\"},{\"id\":\"4067\"},{\"id\":\"4068\"},{\"id\":\"4070\"}]},\"id\":\"4071\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3696\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"3498\"}},\"id\":\"3710\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4900\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"3497\"}},\"id\":\"3698\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"3699\"}},\"id\":\"3704\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4902\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"4940\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3700\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3702\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"4801\"},\"selection_policy\":{\"id\":\"4800\"}},\"id\":\"3699\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4903\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"4941\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3701\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3707\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"4082\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"4089\"}],\"center\":[{\"id\":\"4092\"},{\"id\":\"4096\"}],\"height\":200,\"renderers\":[{\"id\":\"4416\"},{\"id\":\"4448\"},{\"id\":\"4454\"},{\"id\":\"4460\"}],\"right\":[{\"id\":\"4093\"}],\"title\":{\"id\":\"4080\"},\"toolbar\":{\"id\":\"4105\"},\"toolbar_location\":null,\"width\":240,\"x_range\":{\"id\":\"4082\"},\"x_scale\":{\"id\":\"4085\"},\"y_range\":{\"id\":\"3912\"},\"y_scale\":{\"id\":\"4087\"}},\"id\":\"4079\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3744\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3743\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"4090\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3706\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3498\"},\"glyph\":{\"id\":\"3706\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3708\"},\"nonselection_glyph\":{\"id\":\"3707\"},\"view\":{\"id\":\"3710\"}},\"id\":\"3709\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"4089\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"4092\",\"type\":\"Grid\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"4467\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"3748\",\"type\":\"Slider\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"4889\"},\"group\":null,\"major_label_policy\":{\"id\":\"4890\"},\"ticker\":{\"id\":\"4090\"}},\"id\":\"4089\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"3714\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress (green=yield) and N.A.\"},\"id\":\"4080\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3708\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"4085\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4870\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"3713\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3742\"},\"glyph\":{\"id\":\"3743\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3745\"},\"nonselection_glyph\":{\"id\":\"3744\"},\"view\":{\"id\":\"3747\"}},\"id\":\"3746\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"4087\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"3982\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4914\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4953\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3583\",\"type\":\"Patch\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3590\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"3987\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4915\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3579\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4954\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"3496\"}},\"id\":\"3581\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4875\"},\"group\":null,\"major_label_policy\":{\"id\":\"4876\"},\"ticker\":{\"id\":\"3991\"},\"visible\":false},\"id\":\"3990\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"3977\",\"type\":\"Title\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4920\"},\"selection_policy\":{\"id\":\"4919\"}},\"id\":\"4825\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"3582\"}},\"id\":\"3587\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"3986\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"3989\",\"type\":\"Grid\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"4464\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"3602\",\"type\":\"Slider\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"4001\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"3984\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3595\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3584\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"4796\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"4922\"},\"selection_policy\":{\"id\":\"4921\"}},\"id\":\"4826\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"4830\"},\"selection_policy\":{\"id\":\"4829\"}},\"id\":\"3582\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"4878\"},\"group\":null,\"major_label_policy\":{\"id\":\"4879\"},\"ticker\":{\"id\":\"3987\"}},\"id\":\"3986\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"3995\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4797\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"3549\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"3552\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"4913\"},\"selection_policy\":{\"id\":\"4912\"}},\"id\":\"3594\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"4832\"},\"selection_policy\":{\"id\":\"4831\"}},\"id\":\"3588\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3589\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"3990\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"3993\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"3594\"}},\"id\":\"3599\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3991\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4916\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3591\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3596\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"3539\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3597\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"3999\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"3994\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"4917\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3588\"},\"glyph\":{\"id\":\"3589\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3591\"},\"nonselection_glyph\":{\"id\":\"3590\"},\"view\":{\"id\":\"3593\"}},\"id\":\"3592\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"4000\"}},\"id\":\"3996\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"3588\"}},\"id\":\"3593\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3997\",\"type\":\"SaveTool\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"4463\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"3601\",\"type\":\"Slider\"},{\"attributes\":{},\"id\":\"3554\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4845\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3537\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3594\"},\"glyph\":{\"id\":\"3595\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3597\"},\"nonselection_glyph\":{\"id\":\"3596\"},\"view\":{\"id\":\"3599\"}},\"id\":\"3598\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"3998\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"3603\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"4846\",\"type\":\"Selection\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"3600\",\"type\":\"Div\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4000\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3603\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"4825\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"3604\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"4911\"},\"selection_policy\":{\"id\":\"4910\"}},\"id\":\"3567\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"4795\"},\"selection_policy\":{\"id\":\"4794\"}},\"id\":\"3654\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"4035\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"3541\",\"type\":\"LinearScale\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3607\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3606\"},\"glyph\":{\"id\":\"3607\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3609\"},\"nonselection_glyph\":{\"id\":\"3608\"},\"view\":{\"id\":\"3611\"}},\"id\":\"3610\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4870\"},\"group\":null,\"major_label_policy\":{\"id\":\"4871\"},\"ticker\":{\"id\":\"4025\"},\"visible\":false},\"id\":\"4024\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4798\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"3535\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"3606\"}},\"id\":\"3611\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4955\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4823\"},\"group\":null,\"major_label_policy\":{\"id\":\"4824\"},\"ticker\":{\"id\":\"3573\"}},\"id\":\"3545\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4799\",\"type\":\"Selection\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3608\",\"type\":\"Text\"},{\"attributes\":{\"axis\":{\"id\":\"3545\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"3548\",\"type\":\"Grid\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3609\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"4025\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"4915\"},\"selection_policy\":{\"id\":\"4914\"}},\"id\":\"3606\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4956\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"4821\"},\"group\":null,\"major_label_policy\":{\"id\":\"4822\"},\"ticker\":{\"id\":\"3573\"}},\"id\":\"3549\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"3615\"}},\"id\":\"3620\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3543\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"4024\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"4027\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"3612\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"3612\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"4826\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"3613\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3569\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3578\",\"type\":\"Line\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3616\",\"type\":\"Text\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3618\",\"type\":\"Text\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3577\",\"type\":\"Line\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3617\",\"type\":\"Text\"},{\"attributes\":{\"overlay\":{\"id\":\"4034\"}},\"id\":\"4030\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"4917\"},\"selection_policy\":{\"id\":\"4916\"}},\"id\":\"3615\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3615\"},\"glyph\":{\"id\":\"3616\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3618\"},\"nonselection_glyph\":{\"id\":\"3617\"},\"view\":{\"id\":\"3620\"}},\"id\":\"3619\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"3558\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3655\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"3553\",\"type\":\"PanTool\"},{\"attributes\":{\"below\":[{\"id\":\"3632\"}],\"center\":[{\"id\":\"3635\"},{\"id\":\"3639\"},{\"id\":\"3718\"},{\"id\":\"3721\"},{\"id\":\"3724\"},{\"id\":\"3727\"},{\"id\":\"3730\"},{\"id\":\"3733\"}],\"height\":200,\"left\":[{\"id\":\"3636\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"3658\"},{\"id\":\"3691\"},{\"id\":\"3697\"},{\"id\":\"3703\"},{\"id\":\"3709\"},{\"id\":\"3715\"},{\"id\":\"3740\"},{\"id\":\"3746\"}],\"title\":{\"id\":\"3622\"},\"toolbar\":{\"id\":\"3647\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"3624\"},\"x_scale\":{\"id\":\"3628\"},\"y_range\":{\"id\":\"3626\"},\"y_scale\":{\"id\":\"3630\"}},\"id\":\"3621\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"overlay\":{\"id\":\"3559\"}},\"id\":\"3555\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3656\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"4800\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3556\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"3624\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"4020\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"4023\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3557\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"3626\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"4827\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4828\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"3628\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4801\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"4750\"},\"group\":null,\"major_label_policy\":{\"id\":\"4751\"},\"ticker\":{\"id\":\"3633\"},\"visible\":false},\"id\":\"3632\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"4747\"},\"group\":null,\"major_label_policy\":{\"id\":\"4748\"},\"ticker\":{\"id\":\"3637\"},\"visible\":false},\"id\":\"3636\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3559\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"4872\"},\"group\":null,\"major_label_policy\":{\"id\":\"4873\"},\"ticker\":{\"id\":\"4257\"}},\"id\":\"4020\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"4919\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3496\"},\"glyph\":{\"id\":\"3577\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3579\"},\"nonselection_glyph\":{\"id\":\"3578\"},\"view\":{\"id\":\"3581\"}},\"id\":\"3580\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"3632\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"3635\",\"type\":\"Grid\"},{\"attributes\":{\"interval\":50},\"id\":\"3573\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{},\"id\":\"3630\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"4920\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"3622\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"3759\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"3636\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"3639\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"4011\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"3765\"}],\"center\":[{\"id\":\"3768\"},{\"id\":\"3772\"}],\"height\":160,\"left\":[{\"id\":\"3769\"}],\"renderers\":[{\"id\":\"3857\"},{\"id\":\"3863\"},{\"id\":\"3893\"}],\"title\":{\"id\":\"3756\"},\"toolbar\":{\"id\":\"3781\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"3504\"},\"x_scale\":{\"id\":\"3761\"},\"y_range\":{\"id\":\"3759\"},\"y_scale\":{\"id\":\"3763\"}},\"id\":\"3755\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"3645\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"4029\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"3633\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4033\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"3567\"}},\"id\":\"3572\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"4337\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"4921\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3637\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"4028\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3657\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"4829\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4031\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"4922\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"3641\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"4802\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"4032\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"3640\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"3646\"}},\"id\":\"3642\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"4830\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"3643\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"4803\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4034\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"4055\"}],\"center\":[{\"id\":\"4058\"},{\"id\":\"4062\"}],\"height\":200,\"left\":[{\"id\":\"4059\"}],\"renderers\":[{\"id\":\"4187\"},{\"id\":\"4193\"},{\"id\":\"4199\"}],\"title\":{\"id\":\"4045\"},\"toolbar\":{\"id\":\"4071\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"4047\"},\"x_scale\":{\"id\":\"4051\"},\"y_range\":{\"id\":\"4049\"},\"y_scale\":{\"id\":\"4053\"}},\"id\":\"4044\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"3644\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"4958\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"3646\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3570\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"4959\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"3640\"},{\"id\":\"3641\"},{\"id\":\"3642\"},{\"id\":\"3643\"},{\"id\":\"3644\"},{\"id\":\"3645\"}]},\"id\":\"3647\",\"type\":\"Toolbar\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"4465\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"3753\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"4123\"}],\"center\":[{\"id\":\"4126\"},{\"id\":\"4130\"}],\"height\":200,\"renderers\":[{\"id\":\"4205\"},{\"id\":\"4211\"},{\"id\":\"4217\"}],\"right\":[{\"id\":\"4127\"}],\"title\":{\"id\":\"4114\"},\"toolbar\":{\"id\":\"4139\"},\"toolbar_location\":null,\"width\":240,\"x_range\":{\"id\":\"4116\"},\"x_scale\":{\"id\":\"4119\"},\"y_range\":{\"id\":\"4049\"},\"y_scale\":{\"id\":\"4121\"}},\"id\":\"4113\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"3754\",\"type\":\"Div\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"4103\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"3553\"},{\"id\":\"3554\"},{\"id\":\"3555\"},{\"id\":\"3556\"},{\"id\":\"3557\"},{\"id\":\"3558\"}]},\"id\":\"3560\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3567\"},\"glyph\":{\"id\":\"3568\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3570\"},\"nonselection_glyph\":{\"id\":\"3569\"},\"view\":{\"id\":\"3572\"}},\"id\":\"3571\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0],\"y\":[0,0.0,0.10005002501250625,0.2001000500250125,0.3001500750375187,0.400200100050025,0.5002501250625312,0.6003001500750375,0.7003501750875437,0.80040020010005,0.9004502251125562,1.0005002501250624,1.1005502751375686,1.200600300150075,1.3006503251625812,1.4007003501750874,1.5007503751875937,1.6008004002001,1.7008504252126062,1.8009004502251125,1.9009504752376187,2.0010005002501248,2.101050525262631,2.2011005502751373,2.3011505752876436,2.40120060030015,2.501250625312656,2.6013006503251623,2.7013506753376686,2.801400700350175,2.901450725362681,3.0015007503751874,3.1015507753876936,3.2016008004002,3.301650825412706,3.4017008504252124,3.5017508754377187,3.601800900450225,3.701850925462731,3.8019009504752375,3.9019509754877437,4.0020010005002495,4.102051025512756,4.202101050525262,4.302151075537768,4.402201100550275,4.502251125562781,4.602301150575287,4.702351175587793,4.8024012006003,4.902451225612806,5.002501250625312,5.102551275637818,5.202601300650325,5.302651325662831,5.402701350675337,5.5027513756878434,5.60280140070035,5.702851425712856,5.802901450725362,5.9029514757378685,6.003001500750375,6.103051525762881,6.203101550775387,6.3031515757878935,6.4032016008004,6.503251625812906,6.603301650825412,6.703351675837919,6.803401700850425,6.903451725862931,7.003501750875437,7.103551775887944,7.20360180090045,7.303651825912956,7.403701850925462,7.503751875937969,7.603801900950475,7.703851925962981,7.8039019509754874,7.903951975987994,8.004002001000499,8.104052026013006,8.204102051025512,8.304152076038019,8.404202101050524,8.504252126063031,8.604302151075537,8.704352176088044,8.80440220110055,8.904452226113056,9.004502251125562,9.104552276138069,9.204602301150574,9.304652326163081,9.404702351175587,9.504752376188094,9.6048024012006,9.704852426213106,9.804902451225612,9.904952476238119,10.005002501250624,10.105052526263131,10.205102551275637,10.305152576288144,10.40520260130065,10.505252626313156,10.605302651325662,10.705352676338169,10.805402701350674,10.905452726363182,11.005502751375687,11.105552776388194,11.2056028014007,11.305652826413207,11.405702851425712,11.505752876438219,11.605802901450724,11.705852926463232,11.805902951475737,11.905952976488244,12.00600300150075,12.106053026513257,12.206103051525762,12.30615307653827,12.406203101550775,12.506253126563282,12.606303151575787,12.706353176588294,12.8064032016008,12.906453226613305,13.006503251625812,13.106553276638317,13.206603301650825,13.30665332666333,13.406703351675837,13.506753376688343,13.60680340170085,13.706853426713355,13.806903451725862,13.906953476738368,14.007003501750875,14.10705352676338,14.207103551775887,14.307153576788393,14.4072036018009,14.507253626813405,14.607303651825912,14.707353676838418,14.807403701850925,14.90745372686343,15.007503751875937,15.107553776888443,15.20760380190095,15.307653826913455,15.407703851925962,15.507753876938468,15.607803901950975,15.70785392696348,15.807903951975987,15.907953976988493,16.008004002000998,16.108054027013505,16.208104052026012,16.30815407703852,16.408204102051023,16.50825412706353,16.608304152076037,16.708354177088545,16.80840420210105,16.908454227113555,17.008504252126063,17.10855427713857,17.208604302151073,17.30865432716358,17.408704352176088,17.508754377188595,17.6088044022011,17.708854427213605,17.808904452226113,17.90895447723862,18.009004502251123,18.10905452726363,18.209104552276138,18.309154577288645,18.40920460230115,18.509254627313656,18.609304652326163,18.70935467733867,18.809404702351173,18.90945472736368,19.009504752376188,19.109554777388695,19.2096048024012,19.309654827413706,19.409704852426213,19.509754877438716,19.609804902451224,19.70985492746373,19.809904952476238,19.90995497748874,20.01000500250125,20.110055027513756,20.210105052526263,20.310155077538766,20.410205102551274,20.51025512756378,20.610305152576288,20.71035517758879,20.8104052026013,20.910455227613806,21.010505252626313,21.110555277638817,21.210605302651324,21.31065532766383,21.410705352676338,21.51075537768884,21.61080540270135,21.710855427713856,21.810905452726363,21.910955477738867,22.011005502751374,22.11105552776388,22.211105552776388,22.31115557778889,22.4112056028014,22.511255627813906,22.611305652826413,22.711355677838917,22.811405702851424,22.91145572786393,23.011505752876438,23.11155577788894,23.21160580290145,23.311655827913956,23.411705852926463,23.511755877938967,23.611805902951474,23.71185592796398,23.81190595297649,23.911955977988992,24.0120060030015,24.112056028014006,24.212106053026513,24.312156078039017,24.412206103051524,24.51225612806403,24.61230615307654,24.712356178089042,24.81240620310155,24.912456228114056,25.012506253126563,25.112556278139067,25.212606303151574,25.31265632816408,25.41270635317659,25.512756378189092,25.6128064032016,25.712856428214106,25.81290645322661,25.912956478239117,26.013006503251624,26.11305652826413,26.213106553276635,26.313156578289142,26.41320660330165,26.513256628314156,26.61330665332666,26.713356678339167,26.813406703351674,26.91345672836418,27.013506753376685,27.113556778389192,27.2136068034017,27.313656828414207,27.41370685342671,27.513756878439217,27.613806903451724,27.71385692846423,27.813906953476735,27.913956978489242,28.01400700350175,28.114057028514257,28.21410705352676,28.314157078539267,28.414207103551774,28.51425712856428,28.614307153576785,28.714357178589292,28.8144072036018,28.914457228614307,29.01450725362681,29.114557278639317,29.214607303651825,29.31465732866433,29.414707353676835,29.514757378689342,29.61480740370185,29.714857428714357,29.81490745372686,29.914957478739368,30.015007503751875,30.115057528764382,30.215107553776885,30.315157578789393,30.4152076038019,30.515257628814407,30.61530765382691,30.715357678839418,30.815407703851925,30.915457728864432,31.015507753876935,31.115557778889443,31.21560780390195,31.315657828914457,31.41570785392696,31.515757878939468,31.615807903951975,31.715857928964482,31.815907953976986,31.915957978989493,32.016008004001996,32.1160580290145,32.21610805402701,32.31615807903952,32.416208104052025,32.51625812906453,32.61630815407704,32.71635817908954,32.816408204102046,32.91645822911455,33.01650825412706,33.11655827913957,33.216608304152075,33.31665832916458,33.41670835417709,33.51675837918959,33.6168084042021,33.716858429214604,33.81690845422711,33.91695847923962,34.017008504252125,34.11705852926463,34.21710855427714,34.31715857928964,34.41720860430215,34.517258629314654,34.61730865432716,34.71735867933967,34.817408704352175,34.91745872936468,35.01750875437719,35.11755877938969,35.2176088044022,35.317658829414704,35.41770885442721,35.51775887943972,35.617808904452225,35.71785892946473,35.81790895447724,35.91795897948974,36.01800900450225,36.118059029514754,36.21810905452726,36.31815907953977,36.418209104552275,36.51825912956478,36.61830915457729,36.71835917958979,36.8184092046023,36.918459229614804,37.01850925462731,37.11855927963982,37.218609304652325,37.31865932966483,37.41870935467734,37.51875937968984,37.61880940470235,37.718859429714854,37.81890945472736,37.91895947973987,38.019009504752376,38.11905952976488,38.21910955477739,38.31915957978989,38.4192096048024,38.519259629814904,38.61930965482741,38.71935967983992,38.819409704852426,38.91945972986493,39.01950975487743,39.11955977988994,39.21960980490245,39.319659829914954,39.41970985492746,39.51975987993997,39.619809904952476,39.71985992996498,39.81990995497748,39.91995997998999,40.0200100050025,40.120060030015004,40.22011005502751,40.32016008004002,40.420210105052526,40.52026013006503,40.62031015507753,40.72036018009004,40.82041020510255,40.920460230115054,41.02051025512756,41.12056028014007,41.220610305152576,41.32066033016508,41.42071035517758,41.52076038019009,41.6208104052026,41.720860430215104,41.82091045522761,41.92096048024012,42.021010505252626,42.12106053026513,42.22111055527763,42.32116058029014,42.42121060530265,42.521260630315155,42.62131065532766,42.72136068034017,42.821410705352676,42.92146073036518,43.02151075537768,43.12156078039019,43.2216108054027,43.321660830415205,43.42171085542771,43.52176088044022,43.621810905452726,43.72186093046523,43.82191095547773,43.92196098049024,44.02201100550275,44.122061030515255,44.22211105552776,44.32216108054027,44.422211105552776,44.52226113056528,44.62231115557778,44.72236118059029,44.8224112056028,44.922461230615305,45.02251125562781,45.12256128064032,45.222611305652826,45.322661330665326,45.42271135567783,45.52276138069034,45.62281140570285,45.722861430715355,45.82291145572786,45.92296148074037,46.023011505752876,46.123061530765376,46.22311155577788,46.32316158079039,46.4232116058029,46.523261630815405,46.62331165582791,46.72336168084042,46.823411705852926,46.92346173086543,47.023511755877934,47.12356178089044,47.22361180590295,47.323661830915455,47.42371185592796,47.52376188094047,47.62381190595298,47.72386193096548,47.823911955977984,47.92396198099049,48.024012006003,48.124062031015505,48.22411205602801,48.32416208104052,48.42421210605303,48.52426213106553,48.624312156078034,48.72436218109054,48.82441220610305,48.924462231115555,49.02451225612806,49.12456228114057,49.22461230615308,49.32466233116558,49.424712356178084,49.52476238119059,49.6248124062031,49.724862431215605,49.82491245622811,49.92496248124062,50.02501250625313,50.12506253126563,50.225112556278134,50.32516258129064,50.42521260630315,50.525262631315655,50.62531265632816,50.72536268134067,50.82541270635318,50.92546273136568,51.025512756378184,51.12556278139069,51.2256128064032,51.325662831415706,51.42571285642821,51.52576288144072,51.62581290645322,51.72586293146573,51.825912956478234,51.92596298149074,52.02601300650325,52.126063031515756,52.22611305652826,52.32616308154077,52.42621310655327,52.52626313156578,52.626313156578284,52.72636318159079,52.8264132066033,52.926463231615806,53.02651325662831,53.12656328164082,53.22661330665332,53.32666333166583,53.426713356678334,53.52676338169084,53.62681340670335,53.726863431715856,53.82691345672836,53.92696348174087,54.02701350675337,54.12706353176588,54.227113556778384,54.32716358179089,54.4272136068034,54.527263631815906,54.62731365682841,54.72736368184092,54.82741370685342,54.92746373186593,55.027513756878434,55.12756378189094,55.22761380690345,55.327663831915956,55.42771385692846,55.52776388194097,55.62781390695347,55.72786393196598,55.827913956978485,55.92796398199099,56.0280140070035,56.128064032016006,56.22811405702851,56.32816408204102,56.42821410705352,56.52826413206603,56.628314157078535,56.72836418209104,56.82841420710355,56.928464232116056,57.02851425712856,57.12856428214107,57.22861430715357,57.32866433216608,57.428714357178585,57.52876438219109,57.6288144072036,57.728864432216106,57.82891445722861,57.92896448224111,58.02901450725362,58.12906453226613,58.229114557278635,58.32916458229114,58.42921460730365,58.529264632316156,58.62931465732866,58.72936468234116,58.82941470735367,58.92946473236618,59.029514757378685,59.12956478239119,59.2296148074037,59.329664832416206,59.42971485742871,59.529764882441214,59.62981490745372,59.72986493246623,59.829914957478735,59.92996498249124,60.03001500750375,60.13006503251626,60.230115057528764,60.330165082541264,60.43021510755377,60.53026513256628,60.630315157578785,60.73036518259129,60.8304152076038,60.93046523261631,61.030515257628814,61.130565282641314,61.23061530765382,61.33066533266633,61.430715357678835,61.53076538269134,61.63081540770385,61.73086543271636,61.830915457728864,61.930965482741364,62.03101550775387,62.13106553276638,62.231115557778885,62.33116558279139,62.4312156078039,62.53126563281641,62.631315657828914,62.731365682841414,62.83141570785392,62.93146573286643,63.031515757878935,63.13156578289144,63.23161580790395,63.33166583291646,63.431715857928964,63.531765882941464,63.63181590795397,63.73186593296648,63.831915957978985,63.93196598299149,64.03201600800399,64.1320660330165,64.232116058029,64.33216608304151,64.43221610805402,64.53226613306653,64.63231615807904,64.73236618309154,64.83241620810405,64.93246623311656,65.03251625812906,65.13256628314157,65.23261630815408,65.33266633316659,65.43271635817908,65.53276638319159,65.63281640820409,65.7328664332166,65.8329164582291,65.93296648324161,66.03301650825412,66.13306653326663,66.23311655827914,66.33316658329164,66.43321660830415,66.53326663331666,66.63331665832916,66.73336668334167,66.83341670835418,66.93346673336669,67.03351675837918,67.13356678339169,67.2336168084042,67.3336668334167,67.43371685842921,67.53376688344171,67.63381690845422,67.73386693346673,67.83391695847924,67.93396698349174,68.03401700850425,68.13406703351676,68.23411705852926,68.33416708354177,68.43421710855428,68.53426713356679,68.63431715857928,68.73436718359179,68.8344172086043,68.9344672336168,69.03451725862931,69.13456728364181,69.23461730865432,69.33466733366683,69.43471735867934,69.53476738369184,69.63481740870435,69.73486743371686,69.83491745872936,69.93496748374187,70.03501750875438,70.13506753376689,70.23511755877938,70.33516758379189,70.4352176088044,70.5352676338169,70.63531765882941,70.73536768384191,70.83541770885442,70.93546773386693,71.03551775887944,71.13556778389194,71.23561780890445,71.33566783391696,71.43571785892946,71.53576788394197,71.63581790895448,71.73586793396697,71.83591795897948,71.93596798399199,72.0360180090045,72.136068034017,72.23611805902951,72.33616808404201,72.43621810905452,72.53626813406703,72.63631815907954,72.73636818409204,72.83641820910455,72.93646823411706,73.03651825912956,73.13656828414207,73.23661830915458,73.33666833416707,73.43671835917958,73.53676838419209,73.6368184092046,73.7368684342171,73.83691845922961,73.93696848424212,74.03701850925462,74.13706853426713,74.23711855927964,74.33716858429214,74.43721860930465,74.53726863431716,74.63731865932967,74.73736868434217,74.83741870935468,74.93746873436717,75.03751875937968,75.13756878439219,75.2376188094047,75.3376688344172,75.43771885942971,75.53776888444222,75.63781890945472,75.73786893446723,75.83791895947974,75.93796898449224,76.03801900950475,76.13806903451726,76.23811905952977,76.33816908454227,76.43821910955478,76.53826913456727,76.63831915957978,76.73836918459229,76.8384192096048,76.9384692346173,77.03851925962981,77.13856928464232,77.23861930965482,77.33866933466733,77.43871935967984,77.53876938469234,77.63881940970485,77.73886943471736,77.83891945972987,77.93896948474237,78.03901950975487,78.13906953476737,78.23911955977988,78.33916958479239,78.4392196098049,78.5392696348174,78.63931965982991,78.73936968484242,78.83941970985492,78.93946973486743,79.03951975987994,79.13956978489244,79.23961980990495,79.33966983491746,79.43971985992997,79.53976988494247,79.63981990995497,79.73986993496747,79.83991995997998,79.93996998499249,80.040020010005,80.1400700350175,80.24012006003001,80.34017008504252,80.44022011005502,80.54027013506753,80.64032016008004,80.74037018509254,80.84042021010505,80.94047023511756,81.04052026013007,81.14057028514257,81.24062031015507,81.34067033516757,81.44072036018008,81.54077038519259,81.6408204102051,81.7408704352176,81.84092046023011,81.94097048524262,82.04102051025512,82.14107053526763,82.24112056028014,82.34117058529264,82.44122061030515,82.54127063531766,82.64132066033017,82.74137068534267,82.84142071035517,82.94147073536767,83.04152076038018,83.14157078539269,83.2416208104052,83.3416708354177,83.44172086043021,83.54177088544272,83.64182091045522,83.74187093546773,83.84192096048024,83.94197098549274,84.04202101050525,84.14207103551776,84.24212106053027,84.34217108554276,84.44222111055527,84.54227113556777,84.64232116058028,84.74237118559279,84.8424212106053,84.9424712356178,85.04252126063031,85.14257128564282,85.24262131065532,85.34267133566783,85.44272136068034,85.54277138569284,85.64282141070535,85.74287143571786,85.84292146073037,85.94297148574286,86.04302151075537,86.14307153576787,86.24312156078038,86.34317158579289,86.4432216108054,86.5432716358179,86.64332166083041,86.74337168584292,86.84342171085542,86.94347173586793,87.04352176088044,87.14357178589295,87.24362181090545,87.34367183591796,87.44372186093047,87.54377188594296,87.64382191095547,87.74387193596797,87.84392196098048,87.94397198599299,88.0440220110055,88.144072036018,88.24412206103051,88.34417208604302,88.44422211105552,88.54427213606803,88.64432216108054,88.74437218609305,88.84442221110555,88.94447223611806,89.04452226113057,89.14457228614306,89.24462231115557,89.34467233616807,89.44472236118058,89.54477238619309,89.6448224112056,89.7448724362181,89.84492246123061,89.94497248624312,90.04502251125562,90.14507253626813,90.24512256128064,90.34517258629315,90.44522261130565,90.54527263631816,90.64532266133065,90.74537268634316,90.84542271135567,90.94547273636817,91.04552276138068,91.14557278639319,91.2456228114057,91.3456728364182,91.44572286143071,91.54577288644322,91.64582291145572,91.74587293646823,91.84592296148074,91.94597298649325,92.04602301150575,92.14607303651826,92.24612306153075,92.34617308654326,92.44622311155577,92.54627313656827,92.64632316158078,92.74637318659329,92.8464232116058,92.9464732366183,93.04652326163081,93.14657328664332,93.24662331165582,93.34667333666833,93.44672336168084,93.54677338669335,93.64682341170585,93.74687343671836,93.84692346173085,93.94697348674336,94.04702351175587,94.14707353676837,94.24712356178088,94.34717358679339,94.4472236118059,94.5472736368184,94.64732366183091,94.74737368684342,94.84742371185592,94.94747373686843,95.04752376188094,95.14757378689345,95.24762381190595,95.34767383691846,95.44772386193095,95.54777388694346,95.64782391195597,95.74787393696847,95.84792396198098,95.94797398699349,96.048024012006,96.1480740370185,96.24812406203101,96.34817408704352,96.44822411205602,96.54827413706853,96.64832416208104,96.74837418709355,96.84842421210605,96.94847423711855,97.04852426213105,97.14857428714356,97.24862431215607,97.34867433716857,97.44872436218108,97.54877438719359,97.6488244122061,97.7488744372186,97.84892446223111,97.94897448724362,98.04902451225612,98.14907453726863,98.24912456228114,98.34917458729365,98.44922461230615,98.54927463731865,98.64932466233115,98.74937468734366,98.84942471235617,98.94947473736867,99.04952476238118,99.14957478739369,99.2496248124062,99.3496748374187,99.44972486243121,99.54977488744372,99.64982491245622,99.74987493746873,99.84992496248124,99.94997498749375,100.05002501250625,100.15007503751875,100.25012506253125,100.35017508754376,100.45022511255627,100.55027513756878,100.65032516258128,100.75037518759379,100.8504252126063,100.9504752376188,101.05052526263131,101.15057528764382,101.25062531265633,101.35067533766883,101.45072536268134,101.55077538769385,101.65082541270635,101.75087543771885,101.85092546273135,101.95097548774386,102.05102551275637,102.15107553776888,102.25112556278138,102.35117558779389,102.4512256128064,102.5512756378189,102.65132566283141,102.75137568784392,102.85142571285643,102.95147573786893,103.05152576288144,103.15157578789395,103.25162581290644,103.35167583791895,103.45172586293145,103.55177588794396,103.65182591295647,103.75187593796898,103.85192596298148,103.95197598799399,104.0520260130065,104.152076038019,104.25212606303151,104.35217608804402,104.45222611305653,104.55227613806903,104.65232616308154,104.75237618809405,104.85242621310654,104.95247623811905,105.05252626313155,105.15257628814406,105.25262631315657,105.35267633816908,105.45272636318158,105.55277638819409,105.6528264132066,105.7528764382191,105.85292646323161,105.95297648824412,106.05302651325663,106.15307653826913,106.25312656328164,106.35317658829415,106.45322661330664,106.55327663831915,106.65332666333165,106.75337668834416,106.85342671335667,106.95347673836918,107.05352676338168,107.15357678839419,107.2536268134067,107.3536768384192,107.45372686343171,107.55377688844422,107.65382691345673,107.75387693846923,107.85392696348174,107.95397698849425,108.05402701350674,108.15407703851925,108.25412706353175,108.35417708854426,108.45422711355677,108.55427713856928,108.65432716358178,108.75437718859429,108.8544272136068,108.9544772386193,109.05452726363181,109.15457728864432,109.25462731365683,109.35467733866933,109.45472736368184,109.55477738869433,109.65482741370684,109.75487743871935,109.85492746373185,109.95497748874436,110.05502751375687,110.15507753876938,110.25512756378188,110.35517758879439,110.4552276138069,110.5552776388194,110.65532766383191,110.75537768884442,110.85542771385693,110.95547773886943,111.05552776388194,111.15557778889443,111.25562781390694,111.35567783891945,111.45572786393195,111.55577788894446,111.65582791395697,111.75587793896948,111.85592796398198,111.95597798899449,112.056028014007,112.1560780390195,112.25612806403201,112.35617808904452,112.45622811405703,112.55627813906953,112.65632816408204,112.75637818909453,112.85642821410704,112.95647823911955,113.05652826413206,113.15657828914456,113.25662831415707,113.35667833916958,113.45672836418208,113.55677838919459,113.6568284142071,113.7568784392196,113.85692846423211,113.95697848924462,114.05702851425713,114.15707853926963,114.25712856428214,114.35717858929463,114.45722861430714,114.55727863931965,114.65732866433216,114.75737868934466,114.85742871435717,114.95747873936968,115.05752876438218,115.15757878939469,115.2576288144072,115.3576788394197,115.45772886443221,115.55777888944472,115.65782891445723,115.75787893946973,115.85792896448223,115.95797898949473,116.05802901450724,116.15807903951975,116.25812906453226,116.35817908954476,116.45822911455727,116.55827913956978,116.65832916458228,116.75837918959479,116.8584292146073,116.9584792396198,117.05852926463231,117.15857928964482,117.25862931465733,117.35867933966983,117.45872936468233,117.55877938969483,117.65882941470734,117.75887943971985,117.85892946473236,117.95897948974486,118.05902951475737,118.15907953976988,118.25912956478238,118.35917958979489,118.4592296148074,118.5592796398199,118.65932966483241,118.75937968984492,118.85942971485743,118.95947973986993,119.05952976488243,119.15957978989493,119.25962981490744,119.35967983991995,119.45972986493246,119.55977988994496,119.65982991495747,119.75987993996998,119.85992996498248,119.95997998999499,120.0600300150075,120.16008004002,120.26013006503251,120.36018009004502,120.46023011505753,120.56028014007003,120.66033016508253,120.76038019009503,120.86043021510754,120.96048024012005,121.06053026513256,121.16058029014506,121.26063031515757,121.36068034017008,121.46073036518258,121.56078039019509,121.6608304152076,121.7608804402201,121.86093046523261,121.96098049024512,122.06103051525763,122.16108054027012,122.26113056528263,122.36118059029513,122.46123061530764,122.56128064032015,122.66133066533266,122.76138069034516,122.86143071535767,122.96148074037018,123.06153076538268,123.16158079039519,123.2616308154077,123.3616808404202,123.46173086543271,123.56178089044522,123.66183091545773,123.76188094047022,123.86193096548273,123.96198099049523,124.06203101550774,124.16208104052025,124.26213106553276,124.36218109054526,124.46223111555777,124.56228114057028,124.66233116558278,124.76238119059529,124.8624312156078,124.9624812406203,125.06253126563281,125.16258129064532,125.26263131565783,125.36268134067032,125.46273136568283,125.56278139069533,125.66283141570784,125.76288144072035,125.86293146573286,125.96298149074536,126.06303151575787,126.16308154077038,126.26313156578288,126.36318159079539,126.4632316158079,126.5632816408204,126.66333166583291,126.76338169084542,126.86343171585793,126.96348174087042,127.06353176588293,127.16358179089544,127.26363181590794,127.36368184092045,127.46373186593296,127.56378189094546,127.66383191595797,127.76388194097048,127.86393196598299,127.96398199099549,128.06403201600799,128.1640820410205,128.264132066033,128.3641820910455,128.464232116058,128.56428214107052,128.66433216608303,128.76438219109554,128.86443221610804,128.96448224112055,129.06453226613306,129.16458229114556,129.26463231615807,129.36468234117058,129.46473236618309,129.5647823911956,129.6648324162081,129.7648824412206,129.8649324662331,129.96498249124562,130.06503251625813,130.16508254127064,130.26513256628314,130.36518259129565,130.46523261630816,130.56528264132066,130.66533266633317,130.76538269134568,130.86543271635816,130.96548274137066,131.06553276638317,131.16558279139568,131.26563281640819,131.3656828414207,131.4657328664332,131.5657828914457,131.6658329164582,131.76588294147072,131.86593296648323,131.96598299149574,132.06603301650824,132.16608304152075,132.26613306653326,132.36618309154576,132.46623311655827,132.56628314157078,132.66633316658329,132.7663831915958,132.8664332166083,132.9664832416208,133.06653326663331,133.16658329164582,133.26663331665833,133.36668334167084,133.46673336668334,133.56678339169585,133.66683341670836,133.76688344172086,133.86693346673337,133.96698349174588,134.06703351675836,134.16708354177086,134.26713356678337,134.36718359179588,134.4672336168084,134.5672836418209,134.6673336668334,134.7673836918459,134.86743371685841,134.96748374187092,135.06753376688343,135.16758379189594,135.26763381690844,135.36768384192095,135.46773386693346,135.56778389194596,135.66783391695847,135.76788394197098,135.8679339669835,135.967983991996,136.0680340170085,136.168084042021,136.26813406703351,136.36818409204602,136.46823411705853,136.56828414207104,136.66833416708354,136.76838419209605,136.86843421710856,136.96848424212106,137.06853426713357,137.16858429214605,137.26863431715856,137.36868434217106,137.46873436718357,137.56878439219608,137.6688344172086,137.7688844422211,137.8689344672336,137.9689844922461,138.06903451725861,138.16908454227112,138.26913456728363,138.36918459229614,138.46923461730864,138.56928464232115,138.66933466733366,138.76938469234616,138.86943471735867,138.96948474237118,139.0695347673837,139.1695847923962,139.2696348174087,139.3696848424212,139.46973486743371,139.56978489244622,139.66983491745873,139.76988494247124,139.86993496748374,139.96998499249625,140.07003501750876,140.17008504252126,140.27013506753377,140.37018509254625,140.47023511755876,140.57028514257127,140.67033516758377,140.77038519259628,140.8704352176088,140.9704852426213,141.0705352676338,141.1705852926463,141.27063531765882,141.37068534267132,141.47073536768383,141.57078539269634,141.67083541770884,141.77088544272135,141.87093546773386,141.97098549274637,142.07103551775887,142.17108554277138,142.2711355677839,142.3711855927964,142.4712356178089,142.5712856428214,142.67133566783392,142.77138569284642,142.87143571785893,142.97148574287144,143.07153576788394,143.17158579289645,143.27163581790896,143.37168584292147,143.47173586793394,143.57178589294645,143.67183591795896,143.77188594297147,143.87193596798397,143.97198599299648,144.072036018009,144.1720860430215,144.272136068034,144.3721860930465,144.47223611805902,144.57228614307152,144.67233616808403,144.77238619309654,144.87243621810904,144.97248624312155,145.07253626813406,145.17258629314657,145.27263631815907,145.37268634317158,145.4727363681841,145.5727863931966,145.6728364182091,145.7728864432216,145.87293646823412,145.97298649324662,146.07303651825913,146.17308654327164,146.27313656828414,146.37318659329665,146.47323661830916,146.57328664332167,146.67333666833414,146.77338669334665,146.87343671835916,146.97348674337167,147.07353676838417,147.17358679339668,147.2736368184092,147.3736868434217,147.4737368684342,147.5737868934467,147.67383691845922,147.77388694347172,147.87393696848423,147.97398699349674,148.07403701850924,148.17408704352175,148.27413706853426,148.37418709354677,148.47423711855927,148.57428714357178,148.6743371685843,148.7743871935968,148.8744372186093,148.9744872436218,149.07453726863432,149.17458729364682,149.27463731865933,149.37468734367184,149.47473736868434,149.57478739369685,149.67483741870936,149.77488744372184,149.87493746873434,149.97498749374685,150.07503751875936,150.17508754377187,150.27513756878437,150.37518759379688,150.4752376188094,150.5752876438219,150.6753376688344,150.7753876938469,150.87543771885942,150.97548774387192,151.07553776888443,151.17558779389694,151.27563781890944,151.37568784392195,151.47573786893446,151.57578789394697,151.67583791895947,151.77588794397198,151.8759379689845,151.975987993997,152.0760380190095,152.176088044022,152.27613806903452,152.37618809404702,152.47623811905953,152.57628814407204,152.67633816908454,152.77638819409705,152.87643821910956,152.97648824412204,153.07653826913455,153.17658829414705,153.27663831915956,153.37668834417207,153.47673836918457,153.57678839419708,153.6768384192096,153.7768884442221,153.8769384692346,153.9769884942471,154.07703851925962,154.17708854427212,154.27713856928463,154.37718859429714,154.47723861930965,154.57728864432215,154.67733866933466,154.77738869434717,154.87743871935967,154.97748874437218,155.0775387693847,155.1775887943972,155.2776388194097,155.3776888444222,155.47773886943472,155.57778889444722,155.67783891945973,155.77788894447224,155.87793896948475,155.97798899449725,156.07803901950973,156.17808904452224,156.27813906953475,156.37818909454725,156.47823911955976,156.57828914457227,156.67833916958477,156.77838919459728,156.8784392196098,156.9784892446223,157.0785392696348,157.1785892946473,157.27863931965982,157.37868934467232,157.47873936968483,157.57878939469734,157.67883941970985,157.77888944472235,157.87893946973486,157.97898949474737,158.07903951975987,158.17908954477238,158.2791395697849,158.3791895947974,158.4792396198099,158.5792896448224,158.67933966983492,158.77938969484742,158.87943971985993,158.97948974487244,159.07953976988495,159.17958979489745,159.27963981990993,159.37968984492244,159.47973986993495,159.57978989494745,159.67983991995996,159.77988994497247,159.87993996998497,159.97998999499748,160.08004002001,160.1800900450225,160.280140070035,160.3801900950475,160.48024012006002,160.58029014507252,160.68034017008503,160.78039019509754,160.88044022011005,160.98049024512255,161.08054027013506,161.18059029514757,161.28064032016007,161.38069034517258,161.4807403701851,161.5807903951976,161.6808404202101,161.7808904452226,161.88094047023512,161.98099049524762,162.08104052026013,162.18109054527264,162.28114057028515,162.38119059529762,162.48124062031013,162.58129064532264,162.68134067033515,162.78139069534765,162.88144072036016,162.98149074537267,163.08154077038517,163.18159079539768,163.2816408204102,163.3816908454227,163.4817408704352,163.5817908954477,163.68184092046022,163.78189094547272,163.88194097048523,163.98199099549774,164.08204102051025,164.18209104552275,164.28214107053526,164.38219109554777,164.48224112056027,164.58229114557278,164.6823411705853,164.7823911955978,164.8824412206103,164.9824912456228,165.08254127063532,165.18259129564782,165.28264132066033,165.38269134567284,165.48274137068535,165.58279139569783,165.68284142071033,165.78289144572284,165.88294147073535,165.98299149574785,166.08304152076036,166.18309154577287,166.28314157078538,166.38319159579788,166.4832416208104,166.5832916458229,166.6833416708354,166.7833916958479,166.88344172086042,166.98349174587293,167.08354177088543,167.18359179589794,167.28364182091045,167.38369184592295,167.48374187093546,167.58379189594797,167.68384192096048,167.78389194597298,167.8839419709855,167.983991995998,168.0840420210105,168.184092046023,168.28414207103552,168.38419209604803,168.48424212106053,168.58429214607304,168.68434217108552,168.78439219609803,168.88444222111053,168.98449224612304,169.08454227113555,169.18459229614805,169.28464232116056,169.38469234617307,169.48474237118558,169.58479239619808,169.6848424212106,169.7848924462231,169.8849424712356,169.9849924962481,170.08504252126062,170.18509254627313,170.28514257128563,170.38519259629814,170.48524262131065,170.58529264632315,170.68534267133566,170.78539269634817,170.88544272136068,170.98549274637318,171.0855427713857,171.1855927963982,171.2856428214107,171.3856928464232,171.48574287143572,171.58579289644823,171.68584292146073,171.78589294647324,171.88594297148572,171.98599299649823,172.08604302151073,172.18609304652324,172.28614307153575,172.38619309654825,172.48624312156076,172.58629314657327,172.68634317158578,172.78639319659828,172.8864432216108,172.9864932466233,173.0865432716358,173.1865932966483,173.28664332166082,173.38669334667333,173.48674337168583,173.58679339669834,173.68684342171085,173.78689344672335,173.88694347173586,173.98699349674837,174.08704352176088,174.18709354677338,174.2871435717859,174.3871935967984,174.4872436218109,174.5872936468234,174.68734367183592,174.78739369684843,174.88744372186093,174.9874937468734,175.08754377188592,175.18759379689843,175.28764382191093,175.38769384692344,175.48774387193595,175.58779389694845,175.68784392196096,175.78789394697347,175.88794397198598,175.98799399699848,176.088044022011,176.1880940470235,176.288144072036,176.3881940970485,176.48824412206102,176.58829414707353,176.68834417208603,176.78839419709854,176.88844422211105,176.98849424712355,177.08854427213606,177.18859429714857,177.28864432216108,177.38869434717358,177.4887443721861,177.5887943971986,177.6888444222111,177.7888944472236,177.88894447223612,177.98899449724863,178.08904452226113,178.1890945472736,178.28914457228612,178.38919459729863,178.48924462231113,178.58929464732364,178.68934467233615,178.78939469734865,178.88944472236116,178.98949474737367,179.08954477238618,179.18959479739868,179.2896448224112,179.3896948474237,179.4897448724362,179.5897948974487,179.68984492246122,179.78989494747373,179.88994497248623,179.98999499749874,180.09004502251125,180.19009504752376,180.29014507253626,180.39019509754877,180.49024512256128,180.59029514757378,180.6903451725863,180.7903951975988,180.8904452226113,180.9904952476238,181.09054527263632,181.19059529764883,181.2906453226613,181.3906953476738,181.49074537268632,181.59079539769883,181.69084542271133,181.79089544772384,181.89094547273635,181.99099549774886,182.09104552276136,182.19109554777387,182.29114557278638,182.39119559779888,182.4912456228114,182.5912956478239,182.6913456728364,182.7913956978489,182.89144572286142,182.99149574787393,183.09154577288643,183.19159579789894,183.29164582291145,183.39169584792396,183.49174587293646,183.59179589794897,183.69184592296148,183.79189594797398,183.8919459729865,183.991995997999,184.0920460230115,184.192096048024,184.29214607303652,184.39219609804903,184.4922461230615,184.592296148074,184.69234617308652,184.79239619809903,184.89244622311153,184.99249624812404,185.09254627313655,185.19259629814906,185.29264632316156,185.39269634817407,185.49274637318658,185.59279639819908,185.6928464232116,185.7928964482241,185.8929464732366,185.9929964982491,186.09304652326162,186.19309654827413,186.29314657328663,186.39319659829914,186.49324662331165,186.59329664832416,186.69334667333666,186.79339669834917,186.89344672336168,186.99349674837418,187.0935467733867,187.1935967983992,187.2936468234117,187.3936968484242,187.49374687343672,187.5937968984492,187.6938469234617,187.7938969484742,187.89394697348672,187.99399699849923,188.09404702351173,188.19409704852424,188.29414707353675,188.39419709854926,188.49424712356176,188.59429714857427,188.69434717358678,188.79439719859928,188.8944472236118,188.9944972486243,189.0945472736368,189.1945972986493,189.29464732366182,189.39469734867433,189.49474737368683,189.59479739869934,189.69484742371185,189.79489744872436,189.89494747373686,189.99499749874937,190.09504752376188,190.19509754877438,190.2951475737869,190.3951975987994,190.4952476238119,190.5952976488244,190.69534767383692,190.7953976988494,190.8954477238619,190.9954977488744,191.09554777388692,191.19559779889943,191.29564782391193,191.39569784892444,191.49574787393695,191.59579789894946,191.69584792396196,191.79589794897447,191.89594797398698,191.99599799899948,192.096048024012,192.1960980490245,192.296148074037,192.3961980990495,192.49624812406202,192.59629814907453,192.69634817408703,192.79639819909954,192.89644822411205,192.99649824912456,193.09654827413706,193.19659829914957,193.29664832416208,193.39669834917459,193.4967483741871,193.5967983991996,193.6968484242121,193.7968984492246,193.8969484742371,193.9969984992496,194.0970485242621,194.1970985492746,194.29714857428712,194.39719859929963,194.49724862431214,194.59729864932464,194.69734867433715,194.79739869934966,194.89744872436216,194.99749874937467,195.09754877438718,195.19759879939969,195.2976488244122,195.3976988494247,195.4977488744372,195.5977988994497,195.69784892446222,195.79789894947473,195.89794897448724,195.99799899949974,196.09804902451225,196.19809904952476,196.29814907453726,196.39819909954977,196.49824912456228,196.59829914957479,196.6983491745873,196.7983991995998,196.8984492246123,196.9984992496248,197.0985492746373,197.1985992996498,197.2986493246623,197.3986993496748,197.49874937468732,197.59879939969983,197.69884942471234,197.79889944972484,197.89894947473735,197.99899949974986,198.09904952476236,198.19909954977487,198.29914957478738,198.39919959979989,198.4992496248124,198.5992996498249,198.6993496748374,198.79939969984991,198.89944972486242,198.99949974987493,199.09954977488744,199.19959979989994,199.29964982491245,199.39969984992496,199.49974987493746,199.59979989994997,199.69984992496248,199.79989994997499,199.8999499749875,200.0,200]},\"selected\":{\"id\":\"4966\"},\"selection_policy\":{\"id\":\"4965\"}},\"id\":\"4412\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4413\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4148\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4419\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"4944\"},\"selection_policy\":{\"id\":\"4943\"}},\"id\":\"4147\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4415\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4412\"}},\"id\":\"4417\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4414\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4425\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4192\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[2000]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAC/h2Th4Jy5P7+HZOHgnMk/z2ULqag10z+/h2Th4JzZP9fU3owMAuA/z2ULqag14z/H9jfFRGnmP7+HZOHgnOk/txiR/XzQ7D/X1N6MDALwP1Md9Zram/E/z2ULqag18z9LriG3ds/0P8f2N8VEafY/Qz9O0xID+D+/h2Th4Jz5PzvQeu+uNvs/txiR/XzQ/D8zYacLS2r+P9fU3owMAgBAFfnpk/POAEBTHfWa2psBQJFBAKLBaAJAz2ULqag1A0ANihawjwIEQEuuIbd2zwRAidIsvl2cBUDH9jfFRGkGQAUbQ8wrNgdAQz9O0xIDCECBY1na+c8IQL+HZOHgnAlA/atv6MdpCkA70HrvrjYLQHn0hfaVAwxAtxiR/XzQDED1PJwEZJ0NQDNhpwtLag5AcYWyEjI3D0DX1N6MDAIQQPZmZBCAaBBAFfnpk/POEEA0i28XZzURQFMd9ZramxFAcq96Hk4CEkCRQQCiwWgSQLDThSU1zxJAz2ULqag1E0Du95AsHJwTQA2KFrCPAhRALBycMwNpFEBLriG3ds8UQGpApzrqNRVAidIsvl2cFUCoZLJB0QIWQMf2N8VEaRZA5oi9SLjPFkAFG0PMKzYXQCStyE+fnBdAQz9O0xIDGEBi0dNWhmkYQIFjWdr5zxhAoPXeXW02GUC/h2Th4JwZQN4Z6mRUAxpA/atv6MdpGkAcPvVrO9AaQDvQeu+uNhtAWmIAcyKdG0B59IX2lQMcQJiGC3oJahxAtxiR/XzQHEDWqhaB8DYdQPU8nARknR1AFM8hiNcDHkAzYacLS2oeQFLzLI++0B5AcYWyEjI3H0CQFziWpZ0fQNfU3owMAiBA552hTkY1IED2ZmQQgGggQAYwJ9K5myBAFfnpk/POIEAlwqxVLQIhQDSLbxdnNSFARFQy2aBoIUBTHfWa2pshQGPmt1wUzyFAcq96Hk4CIkCCeD3ghzUiQJFBAKLBaCJAoQrDY/ubIkCw04UlNc8iQMCcSOduAiNAz2ULqag1I0DfLs5q4mgjQO73kCwcnCNA/sBT7lXPI0ANihawjwIkQB1T2XHJNSRALBycMwNpJEA85V71PJwkQEuuIbd2zyRAW3fkeLACJUBqQKc66jUlQHoJavwjaSVAidIsvl2cJUCZm+9/l88lQKhkskHRAiZAuC11Aws2JkDH9jfFRGkmQNe/+oZ+nCZA5oi9SLjPJkD2UYAK8gInQAUbQ8wrNidAFeQFjmVpJ0AkrchPn5wnQDR2ixHZzydAQz9O0xIDKEBTCBGVTDYoQGLR01aGaShAcpqWGMCcKECBY1na+c8oQJEsHJwzAylAoPXeXW02KUCwvqEfp2kpQL+HZOHgnClAzlAnoxrQKUDeGepkVAMqQO3irCaONipA/atv6MdpKkAMdTKqAZ0qQBw+9Ws70CpAKwe4LXUDK0A70HrvrjYrQEqZPbHoaStAWmIAcyKdK0BpK8M0XNArQHn0hfaVAyxAiL1IuM82LECYhgt6CWosQKdPzjtDnSxAtxiR/XzQLEDG4VO/tgMtQNaqFoHwNi1A5XPZQipqLUD1PJwEZJ0tQAQGX8ad0C1AFM8hiNcDLkAjmORJETcuQDNhpwtLai5AQipqzYSdLkBS8yyPvtAuQGG871D4Ay9AcYWyEjI3L0CATnXUa2ovQJAXOJalnS9An+D6V9/QL0DX1N6MDAIwQF85wG2pGzBA552hTkY1MEBvAoMv404wQPZmZBCAaDBAfstF8RyCMEAGMCfSuZswQI6UCLNWtTBAFfnpk/POMECdXct0kOgwQCXCrFUtAjFArSaONsobMUA0i28XZzUxQLzvUPgDTzFARFQy2aBoMUDMuBO6PYIxQFMd9ZramzFA24HWe3e1MUBj5rdcFM8xQOtKmT2x6DFAcq96Hk4CMkD6E1z/6hsyQIJ4PeCHNTJACt0ewSRPMkCRQQCiwWgyQBmm4YJegjJAoQrDY/ubMkApb6REmLUyQLDThSU1zzJAODhnBtLoMkDAnEjnbgIzQEgBKsgLHDNAz2ULqag1M0BXyuyJRU8zQN8uzmriaDNAZpOvS3+CM0Du95AsHJwzQHZccg25tTNA/sBT7lXPM0CFJTXP8ugzQA2KFrCPAjRAle73kCwcNEAdU9lxyTU0QKS3ulJmTzRALBycMwNpNEC0gH0UoII0QDzlXvU8nDRAw0lA1tm1NEBLriG3ds80QNMSA5gT6TRAW3fkeLACNUDi28VZTRw1QGpApzrqNTVA8qSIG4dPNUB6CWr8I2k1QAFuS93AgjVAidIsvl2cNUARNw6f+rU1QJmb73+XzzVAIADRYDTpNUCoZLJB0QI2QDDJkyJuHDZAuC11Aws2NkA/klbkp082QMf2N8VEaTZAT1sZpuGCNkDXv/qGfpw2QF4k3GcbtjZA5oi9SLjPNkBu7Z4pVek2QPZRgAryAjdAfbZh644cN0AFG0PMKzY3QI1/JK3ITzdAFeQFjmVpN0CcSOduAoM3QCStyE+fnDdArBGqMDy2N0A0dosR2c83QLvabPJ16TdAQz9O0xIDOEDLoy+0rxw4QFMIEZVMNjhA2mzydelPOEBi0dNWhmk4QOo1tTcjgzhAcpqWGMCcOED5/nf5XLY4QIFjWdr5zzhACcg6u5bpOECRLBycMwM5QBiR/XzQHDlAoPXeXW02OUAoWsA+ClA5QLC+oR+naTlANyODAESDOUC/h2Th4Jw5QEfsRcJ9tjlAzlAnoxrQOUBWtQiEt+k5QN4Z6mRUAzpAZn7LRfEcOkDt4qwmjjY6QHVHjgcrUDpA/atv6MdpOkCFEFHJZIM6QAx1MqoBnTpAlNkTi562OkAcPvVrO9A6QKSi1kzY6TpAKwe4LXUDO0Cza5kOEh07QDvQeu+uNjtAwzRc0EtQO0BKmT2x6Gk7QNL9HpKFgztAWmIAcyKdO0DixuFTv7Y7QGkrwzRc0DtA8Y+kFfnpO0B59IX2lQM8QAFZZ9cyHTxAiL1IuM82PEAQIiqZbFA8QJiGC3oJajxAIOvsWqaDPECnT847Q508QC+0rxzgtjxAtxiR/XzQPEA/fXLeGeo8QMbhU7+2Az1ATkY1oFMdPUDWqhaB8DY9QF4P+GGNUD1A5XPZQipqPUBt2Lojx4M9QPU8nARknT1AfaF95QC3PUAEBl/GndA9QIxqQKc66j1AFM8hiNcDPkCcMwNpdB0+QCOY5EkRNz5Aq/zFKq5QPkAzYacLS2o+QLvFiOzngz5AQipqzYSdPkDKjkuuIbc+QFLzLI++0D5A2lcOcFvqPkBhvO9Q+AM/QOkg0TGVHT9AcYWyEjI3P0D56ZPzzlA/QIBOddRraj9ACLNWtQiEP0CQFziWpZ0/QBh8GXdCtz9An+D6V9/QP0AnRdw4fOo/QNfU3owMAkBAG4dP/doOQEBfOcBtqRtAQKPrMN53KEBA552hTkY1QEArUBK/FEJAQG8Cgy/jTkBAsrTzn7FbQED2ZmQQgGhAQDoZ1YBOdUBAfstF8RyCQEDCfbZh645AQAYwJ9K5m0BASuKXQoioQECOlAizVrVAQNFGeSMlwkBAFfnpk/POQEBZq1oEwttAQJ1dy3SQ6EBA4Q885V71QEAlwqxVLQJBQGl0Hcb7DkFArSaONsobQUDw2P6mmChBQDSLbxdnNUFAeD3ghzVCQUC871D4A09BQACiwWjSW0FARFQy2aBoQUCIBqNJb3VBQMy4E7o9gkFAD2uEKgyPQUBTHfWa2ptBQJfPZQupqEFA24HWe3e1QUAfNEfsRcJBQGPmt1wUz0FAp5gozeLbQUDrSpk9sehBQC79Ca5/9UFAcq96Hk4CQkC2YeuOHA9CQPoTXP/qG0JAPsbMb7koQkCCeD3ghzVCQMYqrlBWQkJACt0ewSRPQkBNj48x81tCQJFBAKLBaEJA1fNwEpB1QkAZpuGCXoJCQF1YUvMsj0JAoQrDY/ubQkDlvDPUyahCQClvpESYtUJAbCEVtWbCQkCw04UlNc9CQPSF9pUD3EJAODhnBtLoQkB86td2oPVCQMCcSOduAkNABE+5Vz0PQ0BIASrICxxDQIuzmjjaKENAz2ULqag1Q0ATGHwZd0JDQFfK7IlFT0NAm3xd+hNcQ0DfLs5q4mhDQCPhPtuwdUNAZpOvS3+CQ0CqRSC8TY9DQO73kCwcnENAMqoBneqoQ0B2XHINubVDQLoO432HwkNA/sBT7lXPQ0BCc8ReJNxDQIUlNc/y6ENAydelP8H1Q0ANihawjwJEQFE8hyBeD0RAle73kCwcREDZoGgB+yhEQB1T2XHJNURAYQVK4pdCRECkt7pSZk9EQOhpK8M0XERALBycMwNpREBwzgyk0XVEQLSAfRSggkRA+DLuhG6PREA85V71PJxEQICXz2ULqURAw0lA1tm1REAH/LBGqMJEQEuuIbd2z0RAj2CSJ0XcREDTEgOYE+lEQBfFcwji9URAW3fkeLACRUCfKVXpfg9FQOLbxVlNHEVAJo42yhspRUBqQKc66jVFQK7yF6u4QkVA8qSIG4dPRUA2V/mLVVxFQHoJavwjaUVAvrvabPJ1RUABbkvdwIJFQEUgvE2Pj0VAidIsvl2cRUDNhJ0uLKlFQBE3Dp/6tUVAVel+D8nCRUCZm+9/l89FQN1NYPBl3EVAIADRYDTpRUBkskHRAvZFQKhkskHRAkZA7BYjsp8PRkAwyZMibhxGQHR7BJM8KUZAuC11Aws2RkD83+Vz2UJGQD+SVuSnT0ZAg0THVHZcRkDH9jfFRGlGQAupqDUTdkZAT1sZpuGCRkCTDYoWsI9GQNe/+oZ+nEZAGnJr90ypRkBeJNxnG7ZGQKLWTNjpwkZA5oi9SLjPRkAqOy65htxGQG7tnilV6UZAsp8PmiP2RkD2UYAK8gJHQDkE8XrAD0dAfbZh644cR0DBaNJbXSlHQAUbQ8wrNkdASc2zPPpCR0CNfyStyE9HQNExlR2XXEdAFeQFjmVpR0BYlnb+M3ZHQJxI524Cg0dA4PpX39CPR0AkrchPn5xHQGhfOcBtqUdArBGqMDy2R0DwwxqhCsNHQDR2ixHZz0dAdyj8gafcR0C72mzydelHQP+M3WJE9kdAQz9O0xIDSECH8b5D4Q9IQMujL7SvHEhAD1agJH4pSEBTCBGVTDZIQJa6gQUbQ0hA2mzydelPSEAeH2Pmt1xIQGLR01aGaUhApoNEx1R2SEDqNbU3I4NIQC7oJajxj0hAcpqWGMCcSEC1TAeJjqlIQPn+d/lctkhAPbHoaSvDSECBY1na+c9IQMUVykrI3EhACcg6u5bpSEBNeqsrZfZIQJEsHJwzA0lA1N6MDAIQSUAYkf180BxJQFxDbu2eKUlAoPXeXW02SUDkp0/OO0NJQChawD4KUElAbAwxr9hcSUCwvqEfp2lJQPNwEpB1dklANyODAESDSUB71fNwEpBJQL+HZOHgnElAAzrVUa+pSUBH7EXCfbZJQIuetjJMw0lAzlAnoxrQSUASA5gT6dxJQFa1CIS36UlAmmd59IX2SUDeGepkVANKQCLMWtUiEEpAZn7LRfEcSkCqMDy2vylKQO3irCaONkpAMZUdl1xDSkB1R44HK1BKQLn5/nf5XEpA/atv6MdpSkBBXuBYlnZKQIUQUclkg0pAycLBOTOQSkAMdTKqAZ1KQFAnoxrQqUpAlNkTi562SkDYi4T7bMNKQBw+9Ws70EpAYPBl3AndSkCkotZM2OlKQOhUR72m9kpAKwe4LXUDS0BvuSieQxBLQLNrmQ4SHUtA9x0Kf+ApS0A70HrvrjZLQH+C6199Q0tAwzRc0EtQS0AH58xAGl1LQEqZPbHoaUtAjkuuIbd2S0DS/R6ShYNLQBawjwJUkEtAWmIAcyKdS0CeFHHj8KlLQOLG4VO/tktAJnlSxI3DS0BpK8M0XNBLQK3dM6Uq3UtA8Y+kFfnpS0A1QhWGx/ZLQHn0hfaVA0xAvab2ZmQQTEABWWfXMh1MQEUL2EcBKkxAiL1IuM82TEDMb7konkNMQBAiKplsUExAVNSaCTtdTECYhgt6CWpMQNw4fOrXdkxAIOvsWqaDTEBknV3LdJBMQKdPzjtDnUxA6wE/rBGqTEAvtK8c4LZMQHNmII2uw0xAtxiR/XzQTED7ygFuS91MQD99ct4Z6kxAgi/jTuj2TEDG4VO/tgNNQAqUxC+FEE1ATkY1oFMdTUCS+KUQIipNQNaqFoHwNk1AGl2H8b5DTUBeD/hhjVBNQKHBaNJbXU1A5XPZQipqTUApJkqz+HZNQG3YuiPHg01AsYorlJWQTUD1PJwEZJ1NQDnvDHUyqk1AfaF95QC3TUDAU+5Vz8NNQAQGX8ad0E1ASLjPNmzdTUCMakCnOupNQNAcsRcJ901AFM8hiNcDTkBYgZL4pRBOQJwzA2l0HU5A3+Vz2UIqTkAjmORJETdOQGdKVbrfQ05Aq/zFKq5QTkDvrjabfF1OQDNhpwtLak5AdxMYfBl3TkC7xYjs54NOQP53+Vy2kE5AQipqzYSdTkCG3No9U6pOQMqOS64ht05ADkG8HvDDTkBS8yyPvtBOQJalnf+M3U5A2lcOcFvqTkAdCn/gKfdOQGG871D4A09ApW5gwcYQT0DpINExlR1PQC3TQaJjKk9AcYWyEjI3T0C1NyODAERPQPnpk/POUE9APJwEZJ1dT0CATnXUa2pPQMQA5kQ6d09ACLNWtQiET0BMZccl15BPQJAXOJalnU9A1MmoBnSqT0AYfBl3QrdPQFsuiucQxE9An+D6V9/QT0DjkmvIrd1PQCdF3Dh86k9Aa/dMqUr3T0DX1N6MDAJQQPktF8VzCFBAG4dP/doOUEA94Ic1QhVQQF85wG2pG1BAgZL4pRAiUECj6zDedyhQQMVEaRbfLlBA552hTkY1UEAJ99mGrTtQQCtQEr8UQlBATalK93tIUEBvAoMv405QQJFbu2dKVVBAsrTzn7FbUEDUDSzYGGJQQPZmZBCAaFBAGMCcSOduUEA6GdWATnVQQFxyDbm1e1BAfstF8RyCUECgJH4phIhQQMJ9tmHrjlBA5NbumVKVUEAGMCfSuZtQQCiJXwoholBASuKXQoioUEBsO9B6765QQI6UCLNWtVBAsO1A6727UEDRRnkjJcJQQPOfsVuMyFBAFfnpk/POUEA3UiLMWtVQQFmrWgTC21BAewSTPCniUECdXct0kOhQQL+2A6337lBA4Q885V71UEADaXQdxvtQQCXCrFUtAlFARxvljZQIUUBpdB3G+w5RQIvNVf5iFVFArSaONsobUUDPf8ZuMSJRQPDY/qaYKFFAEjI33/8uUUA0i28XZzVRQFbkp0/OO1FAeD3ghzVCUUCalhjAnEhRQLzvUPgDT1FA3kiJMGtVUUAAosFo0ltRQCL7+aA5YlFARFQy2aBoUUBmrWoRCG9RQIgGo0lvdVFAql/bgdZ7UUDMuBO6PYJRQO4RTPKkiFFAD2uEKgyPUUAxxLxic5VRQFMd9Zram1FAdXYt00GiUUCXz2ULqahRQLkonkMQr1FA24HWe3e1UUD92g603rtRQB80R+xFwlFAQY1/JK3IUUBj5rdcFM9RQIU/8JR71VFAp5gozeLbUUDJ8WAFSuJRQOtKmT2x6FFADKTRdRjvUUAu/Qmuf/VRQFBWQubm+1FAcq96Hk4CUkCUCLNWtQhSQLZh644cD1JA2Lojx4MVUkD6E1z/6htSQBxtlDdSIlJAPsbMb7koUkBgHwWoIC9SQIJ4PeCHNVJApNF1GO87UkDGKq5QVkJSQOiD5oi9SFJACt0ewSRPUkArNlf5i1VSQE2PjzHzW1JAb+jHaVpiUkCRQQCiwWhSQLOaONoob1JA1fNwEpB1UkD3TKlK93tSQBmm4YJeglJAO/8Zu8WIUkBdWFLzLI9SQH+xiiuUlVJAoQrDY/ubUkDDY/ubYqJSQOW8M9TJqFJABxZsDDGvUkApb6REmLVSQErI3Hz/u1JAbCEVtWbCUkCOek3tzchSQLDThSU1z1JA0iy+XZzVUkD0hfaVA9xSQBbfLs5q4lJAODhnBtLoUkBakZ8+Oe9SQHzq13ag9VJAnkMQrwf8UkDAnEjnbgJTQOL1gB/WCFNABE+5Vz0PU0AmqPGPpBVTQEgBKsgLHFNAaVpiAHMiU0CLs5o42ihTQK0M03BBL1NAz2ULqag1U0DxvkPhDzxTQBMYfBl3QlNANXG0Ud5IU0BXyuyJRU9TQHkjJcKsVVNAm3xd+hNcU0C91ZUye2JTQN8uzmriaFNAAYgGo0lvU0Aj4T7bsHVTQEU6dxMYfFNAZpOvS3+CU0CI7OeD5ohTQKpFILxNj1NAzJ5Y9LSVU0Du95AsHJxTQBBRyWSDolNAMqoBneqoU0BUAzrVUa9TQHZccg25tVNAmLWqRSC8U0C6DuN9h8JTQNxnG7buyFNA/sBT7lXPU0AgGowmvdVTQEJzxF4k3FNAZMz8loviU0CFJTXP8uhTQKd+bQda71NAydelP8H1U0DrMN53KPxTQA2KFrCPAlRAL+NO6PYIVEBRPIcgXg9UQHOVv1jFFVRAle73kCwcVEC3RzDJkyJUQNmgaAH7KFRA+/mgOWIvVEAdU9lxyTVUQD+sEaowPFRAYQVK4pdCVECDXoIa/0hUQKS3ulJmT1RAxhDzis1VVEDoaSvDNFxUQArDY/ubYlRALBycMwNpVEBOddRram9UQHDODKTRdVRAkidF3Dh8VEC0gH0UoIJUQNbZtUwHiVRA+DLuhG6PVEAajCa91ZVUQDzlXvU8nFRAXj6XLaSiVECAl89lC6lUQKLwB55yr1RAw0lA1tm1VEDlongOQbxUQAf8sEaowlRAKVXpfg/JVEBLriG3ds9UQG0HWu/d1VRAj2CSJ0XcVECxucpfrOJUQNMSA5gT6VRA9Ws70HrvVEAXxXMI4vVUQDkerEBJ/FRAW3fkeLACVUB90ByxFwlVQJ8pVel+D1VAwIKNIeYVVUDi28VZTRxVQAQ1/pG0IlVAJo42yhspVUBI524Cgy9VQGpApzrqNVVAjJnfclE8VUCu8heruEJVQNBLUOMfSVVA8qSIG4dPVUAU/sBT7lVVQDZX+YtVXFVAWLAxxLxiVUB6CWr8I2lVQJxiojSLb1VAvrvabPJ1VUDfFBOlWXxVQAFuS93AglVAI8eDFSiJVUBFILxNj49VQGd59IX2lVVAidIsvl2cVUCrK2X2xKJVQM2EnS4sqVVA793VZpOvVUARNw6f+rVVQDOQRtdhvFVAVel+D8nCVUB3QrdHMMlVQJmb73+Xz1VAu/QnuP7VVUDdTWDwZdxVQP6mmCjN4lVAIADRYDTpVUBCWQmZm+9VQGSyQdEC9lVAhgt6CWr8VUCoZLJB0QJWQMq96nk4CVZA7BYjsp8PVkAOcFvqBhZWQDDJkyJuHFZAUiLMWtUiVkB0ewSTPClWQJbUPMujL1ZAuC11Aws2VkDahq07cjxWQPzf5XPZQlZAHTkerEBJVkA/klbkp09WQGHrjhwPVlZAg0THVHZcVkClnf+M3WJWQMf2N8VEaVZA6U9w/atvVkALqag1E3ZWQC0C4W16fFZAT1sZpuGCVkBxtFHeSIlWQJMNihawj1ZAtWbCTheWVkDXv/qGfpxWQPkYM7/lolZAGnJr90ypVkA8y6MvtK9WQF4k3GcbtlZAgH0UoIK8VkCi1kzY6cJWQMQvhRBRyVZA5oi9SLjPVkAI4vWAH9ZWQCo7LrmG3FZATJRm8e3iVkBu7Z4pVelWQJBG12G871ZAsp8PmiP2VkDU+EfSivxWQPZRgAryAldAGKu4QlkJV0A5BPF6wA9XQFtdKbMnFldAfbZh644cV0CfD5oj9iJXQMFo0ltdKVdA48EKlMQvV0AFG0PMKzZXQCd0ewSTPFdASc2zPPpCV0BrJux0YUlXQI1/JK3IT1dAr9hc5S9WV0DRMZUdl1xXQPOKzVX+YldAFeQFjmVpV0A3PT7GzG9XQFiWdv4zdldAeu+uNpt8V0CcSOduAoNXQL6hH6dpiVdA4PpX39CPV0ACVJAXOJZXQCStyE+fnFdARgYBiAajV0BoXznAbalXQIq4cfjUr1dArBGqMDy2V0DOauJoo7xXQPDDGqEKw1dAEh1T2XHJV0A0dosR2c9XQFbPw0lA1ldAdyj8gafcV0CZgTS6DuNXQLvabPJ16VdA3TOlKt3vV0D/jN1iRPZXQCHmFZur/FdAQz9O0xIDWEBlmIYLeglYQIfxvkPhD1hAqUr3e0gWWEDLoy+0rxxYQO38Z+wWI1hAD1agJH4pWEAxr9hc5S9YQFMIEZVMNlhAdGFJzbM8WECWuoEFG0NYQLgTuj2CSVhA2mzydelPWED8xSquUFZYQB4fY+a3XFhAQHibHh9jWEBi0dNWhmlYQIQqDI/tb1hApoNEx1R2WEDI3Hz/u3xYQOo1tTcjg1hADI/tb4qJWEAu6CWo8Y9YQFBBXuBYllhAcpqWGMCcWECT885QJ6NYQLVMB4mOqVhA16U/wfWvWED5/nf5XLZYQBtYsDHEvFhAPbHoaSvDWEBfCiGikslYQIFjWdr5z1hAo7yREmHWWEDFFcpKyNxYQOduAoMv41hACcg6u5bpWEArIXPz/e9YQE16qytl9lhAb9PjY8z8WECRLBycMwNZQLKFVNSaCVlA1N6MDAIQWUD2N8VEaRZZQBiR/XzQHFlAOuo1tTcjWUBcQ27tnilZQH6cpiUGMFlAoPXeXW02WUDCTheW1DxZQOSnT847Q1lABgGIBqNJWUAoWsA+ClBZQEqz+HZxVllAbAwxr9hcWUCOZWnnP2NZQLC+oR+naVlA0RfaVw5wWUDzcBKQdXZZQBXKSsjcfFlANyODAESDWUBZfLs4q4lZQHvV83ASkFlAnS4sqXmWWUC/h2Th4JxZQOHgnBlIo1lAAzrVUa+pWUAlkw2KFrBZQEfsRcJ9tllAaUV++uS8WUCLnrYyTMNZQK337mqzyVlAzlAnoxrQWUDwqV/bgdZZQBIDmBPp3FlANFzQS1DjWUBWtQiEt+lZQHgOQbwe8FlAmmd59IX2WUC8wLEs7fxZQN4Z6mRUA1pAAHMinbsJWkAizFrVIhBaQEQlkw2KFlpAZn7LRfEcWkCI1wN+WCNaQKowPLa/KVpAzIl07iYwWkDt4qwmjjZaQA885V71PFpAMZUdl1xDWkBT7lXPw0laQHVHjgcrUFpAl6DGP5JWWkC5+f53+VxaQNtSN7BgY1pA/atv6MdpWkAfBaggL3BaQEFe4FiWdlpAY7cYkf18WkCFEFHJZINaQKdpiQHMiVpAycLBOTOQWkDrG/pxmpZaQAx1MqoBnVpALs5q4mijWkBQJ6Ma0KlaQHKA21I3sFpAlNkTi562WkC2MkzDBb1aQNiLhPtsw1pA+uS8M9TJWkAcPvVrO9BaQD6XLaSi1lpAYPBl3AndWkCCSZ4UceNaQKSi1kzY6VpAxvsOhT/wWkDoVEe9pvZaQAquf/UN/VpAKwe4LXUDW0BNYPBl3AlbQG+5KJ5DEFtAkRJh1qoWW0Cza5kOEh1bQNXE0UZ5I1tA9x0Kf+ApW0AZd0K3RzBbQDvQeu+uNltAXSmzJxY9W0B/gutffUNbQKHbI5jkSVtAwzRc0EtQW0DljZQIs1ZbQAfnzEAaXVtAKEAFeYFjW0BKmT2x6GlbQGzydelPcFtAjkuuIbd2W0CwpOZZHn1bQNL9HpKFg1tA9FZXyuyJW0AWsI8CVJBbQDgJyDq7lltAWmIAcyKdW0B8uziriaNbQJ4UcePwqVtAwG2pG1iwW0DixuFTv7ZbQAQgGowmvVtAJnlSxI3DW0BH0or89MlbQGkrwzRc0FtAi4T7bMPWW0Ct3TOlKt1bQM82bN2R41tA8Y+kFfnpW0AT6dxNYPBbQDVCFYbH9ltAV5tNvi79W0B59IX2lQNcQJtNvi79CVxAvab2ZmQQXEDf/y6fyxZcQAFZZ9cyHVxAI7KfD5ojXEBFC9hHASpcQGZkEIBoMFxAiL1IuM82XECqFoHwNj1cQMxvuSieQ1xA7sjxYAVKXEAQIiqZbFBcQDJ7YtHTVlxAVNSaCTtdXEB2LdNBomNcQJiGC3oJalxAut9DsnBwXEDcOHzq13ZcQP6RtCI/fVxAIOvsWqaDXEBCRCWTDYpcQGSdXct0kFxAhfaVA9yWXECnT847Q51cQMmoBnSqo1xA6wE/rBGqXEANW3fkeLBcQC+0rxzgtlxAUQ3oVEe9XEBzZiCNrsNcQJW/WMUVylxAtxiR/XzQXEDZcck15NZcQPvKAW5L3VxAHSQ6prLjXEA/fXLeGepcQGHWqhaB8FxAgi/jTuj2XECkiBuHT/1cQMbhU7+2A11A6DqM9x0KXUAKlMQvhRBdQCzt/GfsFl1ATkY1oFMdXUBwn23YuiNdQJL4pRAiKl1AtFHeSIkwXUDWqhaB8DZdQPgDT7lXPV1AGl2H8b5DXUA8tr8pJkpdQF4P+GGNUF1AgGgwmvRWXUChwWjSW11dQMMaoQrDY11A5XPZQipqXUAHzRF7kXBdQCkmSrP4dl1AS3+C6199XUBt2Lojx4NdQI8x81suil1AsYorlJWQXUDT42PM/JZdQPU8nARknV1AF5bUPMujXUA57wx1MqpdQFtIRa2ZsF1AfaF95QC3XUCf+rUdaL1dQMBT7lXPw11A4qwmjjbKXUAEBl/GndBdQCZfl/4E111ASLjPNmzdXUBqEQhv0+NdQIxqQKc66l1ArsN436HwXUDQHLEXCfddQPJ16U9w/V1AFM8hiNcDXkA2KFrAPgpeQFiBkvilEF5AetrKMA0XXkCcMwNpdB1eQL6MO6HbI15A3+Vz2UIqXkABP6wRqjBeQCOY5EkRN15ARfEcgng9XkBnSlW630NeQImjjfJGSl5Aq/zFKq5QXkDNVf5iFVdeQO+uNpt8XV5AEQhv0+NjXkAzYacLS2peQFW630OycF5AdxMYfBl3XkCZbFC0gH1eQLvFiOzng15A3B7BJE+KXkD+d/lctpBeQCDRMZUdl15AQipqzYSdXkBkg6IF7KNeQIbc2j1Tql5AqDUTdrqwXkDKjkuuIbdeQOzng+aIvV5ADkG8HvDDXkAwmvRWV8peQFLzLI++0F5AdExlxyXXXkCWpZ3/jN1eQLj+1Tf0415A2lcOcFvqXkD7sEaowvBeQB0Kf+Ap915AP2O3GJH9XkBhvO9Q+ANfQIMVKIlfCl9ApW5gwcYQX0DHx5j5LRdfQOkg0TGVHV9AC3oJavwjX0At00GiYypfQE8setrKMF9AcYWyEjI3X0CT3upKmT1fQLU3I4MARF9A15Bbu2dKX0D56ZPzzlBfQBpDzCs2V19APJwEZJ1dX0Be9TycBGRfQIBOddRral9AoqetDNNwX0DEAOZEOndfQOZZHn2hfV9ACLNWtQiEX0AqDI/tb4pfQExlxyXXkF9Abr7/XT6XX0CQFziWpZ1fQLJwcM4MpF9A1MmoBnSqX0D2IuE+27BfQBh8GXdCt19AOdVRr6m9X0BbLornEMRfQH2Hwh94yl9An+D6V9/QX0DBOTOQRtdfQOOSa8it3V9ABeyjABXkX0AnRdw4fOpfQEmeFHHj8F9Aa/dMqUr3X0CNUIXhsf1fQNfU3owMAmBAaAH7KEAFYED5LRfFcwhgQIpaM2GnC2BAG4dP/doOYECss2uZDhJgQD3ghzVCFWBAzgyk0XUYYEBfOcBtqRtgQPBl3AndHmBAgZL4pRAiYEASvxRCRCVgQKPrMN53KGBANBhNeqsrYEDFRGkW3y5gQFZxhbISMmBA552hTkY1YEB4yr3qeThgQAn32YatO2BAmiP2IuE+YEArUBK/FEJgQLx8LltIRWBATalK93tIYEDe1WaTr0tgQG8Cgy/jTmBAAC+fyxZSYECRW7tnSlVgQCKI1wN+WGBAsrTzn7FbYEBD4Q885V5gQNQNLNgYYmBAZTpIdExlYED2ZmQQgGhgQIeTgKyza2BAGMCcSOduYECp7LjkGnJgQDoZ1YBOdWBAy0XxHIJ4YEBccg25tXtgQO2eKVXpfmBAfstF8RyCYEAP+GGNUIVgQKAkfimEiGBAMVGaxbeLYEDCfbZh645gQFOq0v0ekmBA5NbumVKVYEB1Aws2hphgQAYwJ9K5m2BAl1xDbu2eYEAoiV8KIaJgQLm1e6ZUpWBASuKXQoioYEDbDrTeu6tgQGw70HrvrmBA/WfsFiOyYECOlAizVrVgQB/BJE+KuGBAsO1A6727YEBBGl2H8b5gQNFGeSMlwmBAYnOVv1jFYEDzn7FbjMhgQITMzfe/y2BAFfnpk/POYECmJQYwJ9JgQDdSIsxa1WBAyH4+aI7YYEBZq1oEwttgQOrXdqD13mBAewSTPCniYEAMMa/YXOVgQJ1dy3SQ6GBALornEMTrYEC/tgOt9+5gQFDjH0kr8mBA4Q885V71YEByPFiBkvhgQANpdB3G+2BAlJWQufn+YEAlwqxVLQJhQLbuyPFgBWFARxvljZQIYUDYRwEqyAthQGl0Hcb7DmFA+qA5Yi8SYUCLzVX+YhVhQBz6cZqWGGFArSaONsobYUA+U6rS/R5hQM9/xm4xImFAX6ziCmUlYUDw2P6mmChhQIEFG0PMK2FAEjI33/8uYUCjXlN7MzJhQDSLbxdnNWFAxbeLs5o4YUBW5KdPzjthQOcQxOsBP2FAeD3ghzVCYUAJavwjaUVhQJqWGMCcSGFAK8M0XNBLYUC871D4A09hQE0cbZQ3UmFA3kiJMGtVYUBvdaXMnlhhQACiwWjSW2FAkc7dBAZfYUAi+/mgOWJhQLMnFj1tZWFARFQy2aBoYUDVgE511GthQGatahEIb2FA99mGrTtyYUCIBqNJb3VhQBkzv+WieGFAql/bgdZ7YUA7jPcdCn9hQMy4E7o9gmFAXeUvVnGFYUDuEUzypIhhQH4+aI7Yi2FAD2uEKgyPYUCgl6DGP5JhQDHEvGJzlWFAwvDY/qaYYUBTHfWa2pthQORJETcOn2FAdXYt00GiYUAGo0lvdaVhQJfPZQupqGFAKPyBp9yrYUC5KJ5DEK9hQEpVut9DsmFA24HWe3e1YUBsrvIXq7hhQP3aDrTeu2FAjgcrUBK/YUAfNEfsRcJhQLBgY4h5xWFAQY1/JK3IYUDSuZvA4MthQGPmt1wUz2FA9BLU+EfSYUCFP/CUe9VhQBZsDDGv2GFAp5gozeLbYUA4xURpFt9hQMnxYAVK4mFAWh59oX3lYUDrSpk9sehhQHx3tdnk62FADKTRdRjvYUCd0O0RTPJhQC79Ca5/9WFAvykmSrP4YUBQVkLm5vthQOGCXoIa/2FAcq96Hk4CYkAD3Ja6gQViQJQIs1a1CGJAJTXP8ugLYkC2YeuOHA9iQEeOBytQEmJA2Lojx4MVYkBp5z9jtxhiQPoTXP/qG2JAi0B4mx4fYkAcbZQ3UiJiQK2ZsNOFJWJAPsbMb7koYkDP8ugL7StiQGAfBaggL2JA8UshRFQyYkCCeD3ghzViQBOlWXy7OGJApNF1GO87YkA1/pG0Ij9iQMYqrlBWQmJAV1fK7IlFYkDog+aIvUhiQHmwAiXxS2JACt0ewSRPYkCbCTtdWFJiQCs2V/mLVWJAvGJzlb9YYkBNj48x81tiQN67q80mX2JAb+jHaVpiYkAAFeQFjmViQJFBAKLBaGJAIm4cPvVrYkCzmjjaKG9iQETHVHZccmJA1fNwEpB1YkBmII2uw3hiQPdMqUr3e2JAiHnF5ip/YkAZpuGCXoJiQKrS/R6ShWJAO/8Zu8WIYkDMKzZX+YtiQF1YUvMsj2JA7oRuj2CSYkB/sYorlJViQBDepsfHmGJAoQrDY/ubYkAyN9//Lp9iQMNj+5tiomJAVJAXOJalYkDlvDPUyahiQHbpT3D9q2JABxZsDDGvYkCYQoioZLJiQClvpESYtWJAuZvA4Mu4YkBKyNx8/7tiQNv0+Bgzv2JAbCEVtWbCYkD9TTFRmsViQI56Te3NyGJAH6dpiQHMYkCw04UlNc9iQEEAosFo0mJA0iy+XZzVYkBjWdr5z9hiQPSF9pUD3GJAhbISMjffYkAW3y7OauJiQKcLS2qe5WJAODhnBtLoYkDJZIOiBexiQFqRnz4572JA67272mzyYkB86td2oPViQA0X9BLU+GJAnkMQrwf8YkAvcCxLO/9iQMCcSOduAmNAUclkg6IFY0Di9YAf1ghjQHMinbsJDGNABE+5Vz0PY0CVe9XzcBJjQCao8Y+kFWNAt9QNLNgYY0BIASrICxxjQNgtRmQ/H2NAaVpiAHMiY0D6hn6cpiVjQIuzmjjaKGNAHOC21A0sY0CtDNNwQS9jQD457wx1MmNAz2ULqag1Y0BgkidF3DhjQPG+Q+EPPGNAgutffUM/Y0ATGHwZd0JjQKREmLWqRWNANXG0Ud5IY0DGndDtEUxjQFfK7IlFT2NA6PYIJnlSY0B5IyXCrFVjQApQQV7gWGNAm3xd+hNcY0AsqXmWR19jQL3VlTJ7YmNATgKyzq5lY0DfLs5q4mhjQHBb6gYWbGNAAYgGo0lvY0CStCI/fXJjQCPhPtuwdWNAtA1bd+R4Y0BFOncTGHxjQNZmk69Lf2NAZpOvS3+CY0D3v8vnsoVjQIjs54PmiGNAGRkEIBqMY0CqRSC8TY9jQDtyPFiBkmNAzJ5Y9LSVY0Bdy3SQ6JhjQO73kCwcnGNAfyStyE+fY0AQUclkg6JjQKF95QC3pWNAMqoBneqoY0DD1h05HqxjQFQDOtVRr2NA5S9WcYWyY0B2XHINubVjQAeJjqnsuGNAmLWqRSC8Y0Ap4sbhU79jQLoO432HwmNASzv/GbvFY0DcZxu27shjQG2UN1IizGNA/sBT7lXPY0CP7W+KidJjQCAajCa91WNAsUaowvDYY0BCc8ReJNxjQNOf4PpX32NAZMz8loviY0D1+Bgzv+VjQIUlNc/y6GNAFlJRaybsY0Cnfm0HWu9jQDiriaON8mNAydelP8H1Y0BaBMLb9PhjQOsw3nco/GNAfF36E1z/Y0ANihawjwJkQJ62MkzDBWRAL+NO6PYIZEDAD2uEKgxkQFE8hyBeD2RA4mijvJESZEBzlb9YxRVkQATC2/T4GGRAle73kCwcZEAmGxQtYB9kQLdHMMmTImRASHRMZcclZEDZoGgB+yhkQGrNhJ0uLGRA+/mgOWIvZECMJr3VlTJkQB1T2XHJNWRArn/1Df04ZEA/rBGqMDxkQNDYLUZkP2RAYQVK4pdCZEDyMWZ+y0VkQINeghr/SGRAE4uetjJMZECkt7pSZk9kQDXk1u6ZUmRAxhDzis1VZEBXPQ8nAVlkQOhpK8M0XGRAeZZHX2hfZEAKw2P7m2JkQJvvf5fPZWRALBycMwNpZEC9SLjPNmxkQE511Gtqb2RA36HwB55yZEBwzgyk0XVkQAH7KEAFeWRAkidF3Dh8ZEAjVGF4bH9kQLSAfRSggmRARa2ZsNOFZEDW2bVMB4lkQGcG0ug6jGRA+DLuhG6PZECJXwohopJkQBqMJr3VlWRAq7hCWQmZZEA85V71PJxkQM0Re5Fwn2RAXj6XLaSiZEDvarPJ16VkQICXz2ULqWRAEcTrAT+sZECi8Aeecq9kQDIdJDqmsmRAw0lA1tm1ZEBUdlxyDblkQOWieA5BvGRAds+UqnS/ZEAH/LBGqMJkQJgozeLbxWRAKVXpfg/JZEC6gQUbQ8xkQEuuIbd2z2RA3No9U6rSZEBtB1rv3dVkQP4zdosR2WRAj2CSJ0XcZEAgja7DeN9kQLG5yl+s4mRAQubm+9/lZEDTEgOYE+lkQGQ/HzRH7GRA9Ws70HrvZECGmFdsrvJkQBfFcwji9WRAqPGPpBX5ZEA5HqxASfxkQMpKyNx8/2RAW3fkeLACZUDsowAV5AVlQH3QHLEXCWVADv04TUsMZUCfKVXpfg9lQDBWcYWyEmVAwIKNIeYVZUBRr6m9GRllQOLbxVlNHGVAcwji9YAfZUAENf6RtCJlQJVhGi7oJWVAJo42yhspZUC3ulJmTyxlQEjnbgKDL2VA2ROLnrYyZUBqQKc66jVlQPtsw9YdOWVAjJnfclE8ZUAdxvsOhT9lQK7yF6u4QmVAPx80R+xFZUDQS1DjH0llQGF4bH9TTGVA8qSIG4dPZUCD0aS3ulJlQBT+wFPuVWVApSrd7yFZZUA2V/mLVVxlQMeDFSiJX2VAWLAxxLxiZUDp3E1g8GVlQHoJavwjaWVACzaGmFdsZUCcYqI0i29lQC2PvtC+cmVAvrvabPJ1ZUBP6PYIJnllQN8UE6VZfGVAcEEvQY1/ZUABbkvdwIJlQJKaZ3n0hWVAI8eDFSiJZUC085+xW4xlQEUgvE2Pj2VA1kzY6cKSZUBnefSF9pVlQPilECIqmWVAidIsvl2cZUAa/0hakZ9lQKsrZfbEomVAPFiBkvilZUDNhJ0uLKllQF6xucpfrGVA793VZpOvZUCACvICx7JlQBE3Dp/6tWVAomMqOy65ZUAzkEbXYbxlQMS8YnOVv2VAVel+D8nCZUDmFZur/MVlQHdCt0cwyWVACG/T42PMZUCZm+9/l89lQCrICxzL0mVAu/QnuP7VZUBMIURUMtllQN1NYPBl3GVAbXp8jJnfZUD+ppgozeJlQI/TtMQA5mVAIADRYDTpZUCxLO38Z+xlQEJZCZmb72VA04UlNc/yZUBkskHRAvZlQPXeXW02+WVAhgt6CWr8ZUAXOJalnf9lQKhkskHRAmZAOZHO3QQGZkDKvep5OAlmQFvqBhZsDGZA7BYjsp8PZkB9Qz9O0xJmQA5wW+oGFmZAn5x3hjoZZkAwyZMibhxmQMH1r76hH2ZAUiLMWtUiZkDjTuj2CCZmQHR7BJM8KWZABaggL3AsZkCW1DzLoy9mQCcBWWfXMmZAuC11Aws2ZkBJWpGfPjlmQNqGrTtyPGZAa7PJ16U/ZkD83+Vz2UJmQIwMAhANRmZAHTkerEBJZkCuZTpIdExmQD+SVuSnT2ZA0L5ygNtSZkBh644cD1ZmQPIXq7hCWWZAg0THVHZcZkAUcePwqV9mQKWd/4zdYmZANsobKRFmZkDH9jfFRGlmQFgjVGF4bGZA6U9w/atvZkB6fIyZ33JmQAupqDUTdmZAnNXE0UZ5ZkAtAuFtenxmQL4u/Qmuf2ZAT1sZpuGCZkDghzVCFYZmQHG0Ud5IiWZAAuFtenyMZkCTDYoWsI9mQCQ6prLjkmZAtWbCTheWZkBGk97qSplmQNe/+oZ+nGZAaOwWI7KfZkD5GDO/5aJmQIpFT1sZpmZAGnJr90ypZkCrnoeTgKxmQDzLoy+0r2ZAzfe/y+eyZkBeJNxnG7ZmQO9Q+ANPuWZAgH0UoIK8ZkARqjA8tr9mQKLWTNjpwmZAMwNpdB3GZkDEL4UQUclmQFVcoayEzGZA5oi9SLjPZkB3tdnk69JmQAji9YAf1mZAmQ4SHVPZZkAqOy65htxmQLtnSlW632ZATJRm8e3iZkDdwIKNIeZmQG7tnilV6WZA/xm7xYjsZkCQRtdhvO9mQCFz8/3v8mZAsp8PmiP2ZkBDzCs2V/lmQNT4R9KK/GZAZSVkbr7/ZkD2UYAK8gJnQId+nKYlBmdAGKu4QlkJZ0Cp19TejAxnQDkE8XrAD2dAyjANF/QSZ0BbXSmzJxZnQOyJRU9bGWdAfbZh644cZ0AO432Hwh9nQJ8PmiP2ImdAMDy2vykmZ0DBaNJbXSlnQFKV7veQLGdA48EKlMQvZ0B07iYw+DJnQAUbQ8wrNmdAlkdfaF85Z0AndHsEkzxnQLigl6DGP2dASc2zPPpCZ0Da+c/YLUZnQGsm7HRhSWdA/FIIEZVMZ0CNfyStyE9nQB6sQEn8UmdAr9hc5S9WZ0BABXmBY1lnQNExlR2XXGdAYl6xucpfZ0Dzis1V/mJnQIS36fExZmdAFeQFjmVpZ0CmECIqmWxnQDc9PsbMb2dAx2laYgBzZ0BYlnb+M3ZnQOnCkppneWdAeu+uNpt8Z0ALHMvSzn9nQJxI524Cg2dALXUDCzaGZ0C+oR+naYlnQE/OO0OdjGdA4PpX39CPZ0BxJ3R7BJNnQAJUkBc4lmdAk4Css2uZZ0AkrchPn5xnQLXZ5OvSn2dARgYBiAajZ0DXMh0kOqZnQGhfOcBtqWdA+YtVXKGsZ0CKuHH41K9nQBvljZQIs2dArBGqMDy2Z0A9PsbMb7lnQM5q4mijvGdAX5f+BNe/Z0DwwxqhCsNnQIHwNj0+xmdAEh1T2XHJZ0CjSW91pcxnQDR2ixHZz2dAxaKnrQzTZ0BWz8NJQNZnQOb73+Vz2WdAdyj8gafcZ0AIVRge299nQJmBNLoO42dAKq5QVkLmZ0C72mzydelnQEwHiY6p7GdA3TOlKt3vZ0BuYMHGEPNnQP+M3WJE9mdAkLn5/nf5Z0Ah5hWbq/xnQLISMjff/2dAQz9O0xIDaEDUa2pvRgZoQGWYhgt6CWhA9sSip60MaECH8b5D4Q9oQBge298UE2hAqUr3e0gWaEA6dxMYfBloQMujL7SvHGhAXNBLUOMfaEDt/GfsFiNoQH4phIhKJmhAD1agJH4paECggrzAsSxoQDGv2FzlL2hAwtv0+BgzaEBTCBGVTDZoQOQ0LTGAOWhAdGFJzbM8aEAFjmVp5z9oQJa6gQUbQ2hAJ+edoU5GaEC4E7o9gkloQElA1tm1TGhA2mzydelPaEBrmQ4SHVNoQPzFKq5QVmhAjfJGSoRZaEAeH2Pmt1xoQK9Lf4LrX2hAQHibHh9jaEDRpLe6UmZoQGLR01aGaWhA8/3v8rlsaECEKgyP7W9oQBVXKCshc2hApoNEx1R2aEA3sGBjiHloQMjcfP+7fGhAWQmZm+9/aEDqNbU3I4NoQHti0dNWhmhADI/tb4qJaECduwkMvoxoQC7oJajxj2hAvxRCRCWTaEBQQV7gWJZoQOFtenyMmWhAcpqWGMCcaEADx7K0859oQJPzzlAno2hAJCDr7FqmaEC1TAeJjqloQEZ5IyXCrGhA16U/wfWvaEBo0ltdKbNoQPn+d/lctmhAiiuUlZC5aEAbWLAxxLxoQKyEzM33v2hAPbHoaSvDaEDO3QQGX8ZoQF8KIaKSyWhA8DY9PsbMaECBY1na+c9oQBKQdXYt02hAo7yREmHWaEA06a2ulNloQMUVykrI3GhAVkLm5vvfaEDnbgKDL+NoQHibHh9j5mhACcg6u5bpaECa9FZXyuxoQCshc/P972hAvE2PjzHzaEBNeqsrZfZoQN6mx8eY+WhAb9PjY8z8aEAAAAAAAABpQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[2000]}},\"selected\":{\"id\":\"4959\"},\"selection_policy\":{\"id\":\"4958\"}},\"id\":\"4418\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"4967\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4147\"},\"glyph\":{\"id\":\"4148\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4150\"},\"nonselection_glyph\":{\"id\":\"4149\"},\"view\":{\"id\":\"4152\"}},\"id\":\"4151\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4418\"},\"glyph\":{\"id\":\"4419\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4421\"},\"nonselection_glyph\":{\"id\":\"4420\"},\"view\":{\"id\":\"4423\"}},\"id\":\"4422\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4150\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4155\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4421\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4968\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"4147\"}},\"id\":\"4152\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3582\"},\"glyph\":{\"id\":\"3583\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"3585\"},\"nonselection_glyph\":{\"id\":\"3584\"},\"view\":{\"id\":\"3587\"}},\"id\":\"3586\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4149\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4418\"}},\"id\":\"4423\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4172\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4174\"},\"nonselection_glyph\":{\"id\":\"4173\"},\"view\":{\"id\":\"4176\"}},\"id\":\"4175\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4420\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4154\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4431\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"4961\"},\"selection_policy\":{\"id\":\"4960\"}},\"id\":\"4424\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"3770\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"4985\"},\"selection_policy\":{\"id\":\"4984\"}},\"id\":\"4201\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4424\"},\"glyph\":{\"id\":\"4425\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4427\"},\"nonselection_glyph\":{\"id\":\"4426\"},\"view\":{\"id\":\"4429\"}},\"id\":\"4428\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"4954\"},\"selection_policy\":{\"id\":\"4953\"}},\"id\":\"4165\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4156\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4427\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4162\",\"type\":\"Line\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"4442\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3585\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4158\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"4424\"}},\"id\":\"4429\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"3769\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"3772\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4174\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4426\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4160\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4279\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4455\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"4946\"},\"selection_policy\":{\"id\":\"4945\"}},\"id\":\"4159\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4432\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4453\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4159\"},\"glyph\":{\"id\":\"4160\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4162\"},\"nonselection_glyph\":{\"id\":\"4161\"},\"view\":{\"id\":\"4164\"}},\"id\":\"4163\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4433\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4168\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4439\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4161\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4435\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4165\"},\"glyph\":{\"id\":\"4166\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4168\"},\"nonselection_glyph\":{\"id\":\"4167\"},\"view\":{\"id\":\"4170\"}},\"id\":\"4169\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4437\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4159\"}},\"id\":\"4164\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"4963\"},\"selection_policy\":{\"id\":\"4962\"}},\"id\":\"4436\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4166\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4436\"},\"glyph\":{\"id\":\"4437\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4439\"},\"nonselection_glyph\":{\"id\":\"4438\"},\"view\":{\"id\":\"4441\"}},\"id\":\"4440\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4173\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4165\"}},\"id\":\"4170\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4451\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4167\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4438\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4281\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4452\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4172\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4436\"}},\"id\":\"4441\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4457\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4969\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"4968\"},\"selection_policy\":{\"id\":\"4967\"}},\"id\":\"4444\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4208\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4210\"},\"nonselection_glyph\":{\"id\":\"4209\"},\"view\":{\"id\":\"4212\"}},\"id\":\"4211\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"4195\"}},\"id\":\"4200\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"4970\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"4183\"}},\"id\":\"4188\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4176\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4459\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"4169\"},\"N_stress_diag\":{\"id\":\"4151\"},\"V_stress_diag\":{\"id\":\"4187\"},\"arr_head\":{\"id\":\"3746\"},\"axial_strain_diag\":{\"id\":\"4223\"},\"bending_strain_diag\":{\"id\":\"4243\"},\"centroid\":{\"id\":\"4181\"},\"discr_stress\":10,\"div_P\":{\"id\":\"3752\"},\"div_f\":{\"id\":\"3754\"},\"fN\":{\"id\":\"3730\"},\"fP\":{\"id\":\"3718\"},\"fRx\":{\"id\":\"3727\"},\"fRyl\":{\"id\":\"3724\"},\"fRyr\":{\"id\":\"3721\"},\"fV\":{\"id\":\"3733\"},\"label_M_section\":{\"id\":\"4366\"},\"label_N_section\":{\"id\":\"4360\"},\"label_V_section\":{\"id\":\"4372\"},\"neutral_axis\":{\"id\":\"4460\"},\"s_M\":{\"id\":\"3735\"},\"s_q\":{\"id\":\"3498\"},\"s_sb\":{\"id\":\"3497\"},\"s_section_M\":{\"id\":\"4343\"},\"section_M_head\":{\"id\":\"4354\"},\"section_N\":{\"id\":\"4338\"},\"section_V\":{\"id\":\"4341\"},\"sigma_stress_diag\":{\"id\":\"4448\"},\"source\":{\"id\":\"3500\"},\"tau_stress_diag\":{\"id\":\"4205\"},\"total_strain_diag\":{\"id\":\"4428\"},\"total_strain_pl_diag\":{\"id\":\"4422\"},\"total_stress_pl_diag\":{\"id\":\"4416\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2000) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"4462\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4191\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4185\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"4956\"},\"selection_policy\":{\"id\":\"4955\"}},\"id\":\"4177\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"4970\"},\"selection_policy\":{\"id\":\"4969\"}},\"id\":\"4456\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4456\"},\"glyph\":{\"id\":\"4457\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4459\"},\"nonselection_glyph\":{\"id\":\"4458\"},\"view\":{\"id\":\"4461\"}},\"id\":\"4460\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4186\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4456\"}},\"id\":\"4461\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4190\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4458\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4198\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"4169\"},\"N_stress_diag\":{\"id\":\"4151\"},\"V_stress_diag\":{\"id\":\"4187\"},\"axial_strain_diag\":{\"id\":\"4223\"},\"bending_strain_diag\":{\"id\":\"4243\"},\"centroid\":{\"id\":\"4181\"},\"div\":{\"id\":\"3600\"},\"neutral_axis\":{\"id\":\"4460\"},\"s_b\":{\"id\":\"3496\"},\"section\":{\"id\":\"3598\"},\"sigma_stress_diag\":{\"id\":\"4448\"},\"source\":{\"id\":\"3500\"},\"support_r\":{\"id\":\"3592\"},\"tau_stress_diag\":{\"id\":\"4205\"},\"total_strain_diag\":{\"id\":\"4428\"},\"total_strain_pl_diag\":{\"id\":\"4422\"},\"total_stress_pl_diag\":{\"id\":\"4416\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2000) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"4463\",\"type\":\"CustomJS\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4194\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4196\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"4169\"},\"N_stress_diag\":{\"id\":\"4151\"},\"V_stress_diag\":{\"id\":\"4187\"},\"axial_strain_diag\":{\"id\":\"4223\"},\"bending_strain_diag\":{\"id\":\"4243\"},\"centroid\":{\"id\":\"4181\"},\"div\":{\"id\":\"3600\"},\"neutral_axis\":{\"id\":\"4460\"},\"s_b\":{\"id\":\"3496\"},\"s_ss\":{\"id\":\"3499\"},\"section\":{\"id\":\"3598\"},\"sigma_stress_diag\":{\"id\":\"4448\"},\"source\":{\"id\":\"3500\"},\"support_r\":{\"id\":\"3592\"},\"tau_stress_diag\":{\"id\":\"4205\"},\"total_strain_diag\":{\"id\":\"4428\"},\"total_strain_pl_diag\":{\"id\":\"4422\"},\"total_stress_pl_diag\":{\"id\":\"4416\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2000) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"4464\",\"type\":\"CustomJS\"},{\"attributes\":{\"overlay\":{\"id\":\"4284\"}},\"id\":\"4280\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"4982\"},\"selection_policy\":{\"id\":\"4981\"}},\"id\":\"4195\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4195\"},\"glyph\":{\"id\":\"4196\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4198\"},\"nonselection_glyph\":{\"id\":\"4197\"},\"view\":{\"id\":\"4200\"}},\"id\":\"4199\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4204\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"3857\"},\"N_stress_diag\":{\"id\":\"4151\"},\"arr_head\":{\"id\":\"3746\"},\"axial_strain_diag\":{\"id\":\"4223\"},\"div_P\":{\"id\":\"3752\"},\"div_f\":{\"id\":\"3754\"},\"fN\":{\"id\":\"3730\"},\"fP\":{\"id\":\"3718\"},\"fRx\":{\"id\":\"3727\"},\"fRyl\":{\"id\":\"3724\"},\"fRyr\":{\"id\":\"3721\"},\"fV\":{\"id\":\"3733\"},\"label_M_section\":{\"id\":\"4366\"},\"label_N_section\":{\"id\":\"4360\"},\"label_V_section\":{\"id\":\"4372\"},\"neutral_axis\":{\"id\":\"4460\"},\"s_M\":{\"id\":\"3735\"},\"s_section_M\":{\"id\":\"4343\"},\"section_M_head\":{\"id\":\"4354\"},\"section_N\":{\"id\":\"4338\"},\"section_V\":{\"id\":\"4341\"},\"sigma_stress_diag\":{\"id\":\"4448\"},\"source\":{\"id\":\"3500\"},\"tau_stress_diag\":{\"id\":\"4205\"},\"total_strain_diag\":{\"id\":\"4428\"},\"total_strain_pl_diag\":{\"id\":\"4422\"},\"total_stress_pl_diag\":{\"id\":\"4416\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=100) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2000) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \"},\"id\":\"4465\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4197\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4201\"},\"glyph\":{\"id\":\"4202\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4204\"},\"nonselection_glyph\":{\"id\":\"4203\"},\"view\":{\"id\":\"4206\"}},\"id\":\"4205\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"3746\"},\"div_P\":{\"id\":\"3752\"},\"fN\":{\"id\":\"3730\"},\"fP\":{\"id\":\"3718\"},\"fRx\":{\"id\":\"3727\"},\"fRyl\":{\"id\":\"3724\"},\"fRyr\":{\"id\":\"3721\"},\"fV\":{\"id\":\"3733\"},\"label_M_section\":{\"id\":\"4366\"},\"label_N_section\":{\"id\":\"4360\"},\"label_V_section\":{\"id\":\"4372\"},\"s_M\":{\"id\":\"3735\"},\"s_q\":{\"id\":\"3498\"},\"s_sb\":{\"id\":\"3497\"},\"s_section_M\":{\"id\":\"4343\"},\"section_M_head\":{\"id\":\"4354\"},\"section_N\":{\"id\":\"4338\"},\"section_V\":{\"id\":\"4341\"},\"source\":{\"id\":\"3500\"},\"tau_stress_diag\":{\"id\":\"4205\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"4466\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4202\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"3881\"},\"M_stress_diag\":{\"id\":\"4169\"},\"V_diag\":{\"id\":\"3869\"},\"V_stress_diag\":{\"id\":\"4187\"},\"arr_head\":{\"id\":\"3746\"},\"bending_strain_diag\":{\"id\":\"4243\"},\"centroid\":{\"id\":\"4181\"},\"div_P\":{\"id\":\"3752\"},\"div_f\":{\"id\":\"3754\"},\"fN\":{\"id\":\"3730\"},\"fP\":{\"id\":\"3718\"},\"fRx\":{\"id\":\"3727\"},\"fRyl\":{\"id\":\"3724\"},\"fRyr\":{\"id\":\"3721\"},\"fV\":{\"id\":\"3733\"},\"label_M_section\":{\"id\":\"4366\"},\"label_N_section\":{\"id\":\"4360\"},\"label_V_section\":{\"id\":\"4372\"},\"neutral_axis\":{\"id\":\"4460\"},\"s_M\":{\"id\":\"3735\"},\"s_q\":{\"id\":\"3498\"},\"s_section_M\":{\"id\":\"4343\"},\"section_M_head\":{\"id\":\"4354\"},\"section_N\":{\"id\":\"4338\"},\"section_V\":{\"id\":\"4341\"},\"sigma_stress_diag\":{\"id\":\"4448\"},\"source\":{\"id\":\"3500\"},\"tau_stress_diag\":{\"id\":\"4205\"},\"total_strain_diag\":{\"id\":\"4428\"},\"total_strain_pl_diag\":{\"id\":\"4422\"},\"total_stress_pl_diag\":{\"id\":\"4416\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2000) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \"},\"id\":\"4467\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4209\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4201\"}},\"id\":\"4206\",\"type\":\"CDSView\"},{\"attributes\":{\"args\":{\"source\":{\"id\":\"3500\"},\"total_strain_diag\":{\"id\":\"4428\"},\"total_strain_pl_diag\":{\"id\":\"4422\"},\"total_stress_pl_diag\":{\"id\":\"4416\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const fy = cb_obj.value\\n const L = db['L'][0]\\n\\n // update q\\n db['fy'][0] = fy\\n\\n // update\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2000) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \"},\"id\":\"4468\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4203\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"3499\"},\"glyph\":{\"id\":\"4226\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4228\"},\"nonselection_glyph\":{\"id\":\"4227\"},\"view\":{\"id\":\"4230\"}},\"id\":\"4229\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"4169\"},\"N_stress_diag\":{\"id\":\"4151\"},\"axial_strain_diag\":{\"id\":\"4223\"},\"bending_strain_diag\":{\"id\":\"4243\"},\"centroid\":{\"id\":\"4181\"},\"source\":{\"id\":\"3500\"},\"total_strain_diag\":{\"id\":\"4428\"},\"total_strain_pl_diag\":{\"id\":\"4422\"},\"total_stress_pl_diag\":{\"id\":\"4416\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const E = cb_obj.value\\n\\n // update E\\n db['E'][0] = E\\n\\n // update\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_plastic_stress_strain(db, total_strain_diag, total_strain_pl_diag, total_stress_pl_diag)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function update_plastic_stress_strain(data, glyph_strain_el, glyph_strain_pl, glyph_sigma_pl, discr=2000) { \\n // define parameters\\n const h = data['h'][0]\\n const N = data['N'][0]\\n const M = data['M'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const E = data['E'][0]\\n const fy = data['fy'][0]\\n const y_discr = linspace(0, h, discr)\\n let total_epsilon = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var sigma_axial = compute_sigma_axial(N, A)\\n var sigma_bending = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n var epsilon_bending = compute_epsilon_bending(sigma_bending, E)\\n var epsilon_axial = compute_epsilon_axial(sigma_axial, E)\\n total_epsilon[i] = compute_total_epsilon(epsilon_axial, epsilon_bending)\\n }\\n let [stress_pl, strain_pl, y_discr_strain_pl, yNA] = compute_total_stress_strain(h, fy, E, N, M, A, Iy, yG, discr)\\n \\n \\n // change the diagrams\\n update_strain_diagram(glyph_strain_el, total_epsilon, y_discr)\\n update_stress_diagram(glyph_sigma_pl, stress_pl, y_discr)\\n update_strain_diagram(glyph_strain_pl, strain_pl, y_discr_strain_pl)\\n }\\n \\n \\n function compute_Ny(fy, A) {\\n return fy*A/1e3\\n }\\n \\n \\n function compute_My(fy, Iy, yG, H) {\\n if (yG >= H-yG) {\\n var extreme_fiber = yG\\n } else {\\n var extreme_fiber = H-yG\\n }\\n return Iy/extreme_fiber*fy/1e6\\n }\\n \\n \\n function compute_total_stress_strain(H, fy, E, N, M, A, Iy, yG, discr) {\\n // initialization\\n const scale_discr_o = 20\\n var y_discr = linspace(0, H, discr)\\n const Ny = compute_Ny(fy, A)\\n const My = compute_My(fy, Iy, yG, H)\\n const M_norm = __compute_M_norm(M, My)\\n const N_norm = __compute_N_norm(N, Ny)\\n const err_inside = new Array(discr).fill(1e30)\\n const err_outside = new Array(discr*scale_discr_o).fill(1e30)\\n\\n // compute state (elastic)\\n let strain_el = new Array(discr)\\n let stress_el = new Array(discr)\\n for (var i = 0; i < discr; i++) {\\n var sigma_N_el = compute_sigma_axial(N, A)\\n var sigma_M_el = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n stress_el[i] = sigma_M_el + sigma_N_el\\n strain_el[i] = compute_epsilon_axial(sigma_N_el, E)/100 + compute_epsilon_bending(sigma_M_el, E)/100\\n }\\n if (Math.abs(stress_el[0]) > fy || Math.abs(stress_el.slice(-1)[0]) > fy) {\\n if (__check_limit(M_norm, N_norm)) {\\n // double yield check\\n var h = __compute_h_2Y(N_norm)\\n var yNA = h*H\\n var k = __compute_k_2Y(M_norm, N_norm)\\n var chi = __compute_chi_2Y(k, fy, E, H, yNA)\\n var k_prime = __compute_k_prime_2Y(k, h)\\n if (k>=1 && k_prime>=1) {\\n // DOUBLE YIELD CASE\\n console.log(\\\"2 yield case\\\")\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n } else {\\n // one yield, yNA inside check\\n for (var i = 1; i < discr-1; i++) {\\n var yNA = y_discr[i]\\n var h = yNA/H\\n if (__check_validity_yNA(h, N_norm)) {\\n var k = __compute_k_1Y_in(h, N_norm)\\n err_inside[i] = __compute_err_1Y_in(h, k, M_norm, N_norm)\\n }\\n }\\n const index_min_i = err_inside.indexOf(Math.min(...err_inside))\\n var yNA = y_discr[index_min_i]\\n var k = __compute_k_1Y_in(yNA/H, N_norm)\\n var chi = __compute_chi_1Y_in(k, fy, E, H, yNA)\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F = -chi\\n } else {\\n var chi_F = chi\\n }\\n \\n if (index_min_i != 1) {\\n // ONE YIELD (YNA INSIDE) CASE\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // check if it's inside (edge case) or outside\\n const yNA_F_in = yNA_F\\n const chi_F_in = chi_F\\n const err_in = err_inside[index_min_i]\\n \\n const k_discr = linspace(1, 20, discr*scale_discr_o)\\n for (var i = 1; i < discr*scale_discr_o; i++) {\\n var k = k_discr[i]\\n var h = __compute_h_1Y_out(N_norm, k)\\n err_outside[i] = __compute_err_1Y_out(k, h, M_norm, N_norm)\\n }\\n const index_min_o = err_outside.indexOf(Math.min(...err_outside))\\n var k = k_discr[index_min_o]\\n var h = __compute_h_1Y_out(N_norm, k)\\n var yNA = h*H\\n var chi = __compute_chi_1Y_out(k, fy, E, H, yNA)\\n const err_o = err_outside[index_min_o]\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F_o = H+yNA\\n } else {\\n var yNA_F_o = -yNA\\n }\\n if ((N>=0 && M>0) || (N<0 && M>0)) {\\n var chi_F_o = -chi\\n } else {\\n var chi_F_o = chi\\n }\\n \\n if (err_in < err_o) {\\n // ONE YIELD (YNA INSIDE) CASE\\n console.log(\\\"1 yield, yNA in case\\\")\\n var yNA_F = yNA_F_in\\n var chi_F = chi_F_in\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n } else {\\n // ONE YIELD (YNA OUTSIDE) CASE\\n console.log(\\\"1 yield, yNA out case\\\")\\n var yNA_F = yNA_F_o\\n var chi_F = chi_F_o\\n var strain_pl = __compute_strain_pl(y_discr, yNA_F, chi_F)\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yNA_F]\\n \\n }\\n }\\n }\\n } else {\\n // PLASTIC LIMIT CASE\\n console.log(\\\"limit case\\\")\\n var yNA = __compute_h_2Y(N_norm)*H\\n if ((N>=0 && M<0) || (N<0 && M>0)) {\\n var yNA_F = H-yNA\\n } else {\\n var yNA_F = yNA\\n }\\n let strain_pl = new Array(discr)\\n if ((N>=0 && M>=0) || (N<0 && M>0)) {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]<yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n } else {\\n for (var i = 0; i < discr; i++) {\\n if (y_discr[i]>yNA_F) {\\n strain_pl[i] = -fy/E\\n } else {\\n strain_pl[i] = fy/E\\n }\\n }\\n }\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n var strain_pl_ = [Math.min(...strain_el)*100, Math.max(...strain_el)*100]\\n var y_discr = [yNA_F, yNA_F]\\n return [stress_pl, strain_pl_, y_discr, yNA_F]\\n }\\n }else {\\n // ELASTIC CASE\\n console.log(\\\"elastic case\\\")\\n var strain_pl = strain_el\\n var stress_pl = __compute_stress_pl(strain_pl, fy, E)\\n return [stress_pl, strain_pl.map(x => x*100), y_discr, yG]\\n }\\n }\\n \\n \\n function __check_limit(M_norm, N_norm) {\\n const tmp = 2/3*M_norm+N_norm**2\\n if (tmp>1) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_M_norm(M, My){\\n return Math.abs(M/My)\\n }\\n \\n function __compute_N_norm(N, Ny){\\n return Math.abs(N/Ny)\\n }\\n\\n function __compute_strain_pl(y, yNA, chi){\\n return y.map(x => -(x-yNA)*chi) \\n }\\n\\n function __compute_stress_pl(epsilon, fy, E){\\n const sigma = new Array(epsilon.length).fill(0)\\n for (var i = 0; i < epsilon.length; i++) {\\n var tmp = epsilon[i]*E\\n if (tmp > fy){\\n sigma[i] = fy\\n }else if (tmp < -fy){\\n sigma[i] = -fy\\n }else{\\n sigma[i] = tmp\\n }\\n }\\n return sigma\\n }\\n \\n // double yield\\n function __compute_h_2Y(N_norm){\\n return (1-N_norm)/2\\n }\\n \\n function __compute_k_2Y(M_norm, N_norm){\\n return Math.sqrt((1+2*N_norm+N_norm**2) / (3-3*N_norm**2-2*M_norm))\\n }\\n \\n function __compute_k_prime_2Y(k, h){\\n return k*h / (1-h)\\n }\\n\\n function __compute_chi_2Y(k, fy, E, H, yNA){\\n return k*fy/(E*(H-yNA))\\n }\\n\\n \\n // one yield (yNA inside)\\n function __check_validity_yNA(h, N_norm){\\n const tmp = (1-N_norm)**2 -2*h*(1-N_norm)\\n if (tmp<0) {\\n return false\\n }else{\\n return true\\n }\\n }\\n \\n function __compute_k_1Y_in(h, N_norm){\\n return (h-1)*( (h-1+N_norm) + Math.sqrt((1-N_norm)**2 -2*h*(1-N_norm)) ) / h**2\\n }\\n\\n function __compute_err_1Y_in(h, k, M_norm, N_norm){\\n return Math.abs(M_norm + 3*N_norm*(1-2*h) - 2*k*h**3/(1-h) - (3*k**2-1)/k**2*(1-h)**2)\\n }\\n \\n function __compute_chi_1Y_in(k, fy, E, H, yNA){\\n // unit: 1/mm\\n return k*fy/(E*(H-yNA))\\n }\\n\\n // one yield (yNA outside)\\n function __compute_h_1Y_out(N_norm, k){\\n return (k*(2-N_norm)-1-k*Math.sqrt((k-N_norm)**2-(k-1)**2)) / (k-1)**2\\n }\\n \\n function __compute_chi_1Y_out(k, fy, E, H, yNA){\\n return k*fy/(E*(H+yNA))\\n }\\n\\n function __compute_err_1Y_out(k, h, M_norm, N_norm){\\n return Math.abs( M_norm + 3*(N_norm-1) + (1+h-k*h)**3 / (k**2*(1+h)) )\\n }\\n \\n \\n function compute_total_epsilon(epsilon_axial, epsilon_bending) {\\n return epsilon_axial+epsilon_bending\\n }\\n \\n \"},\"id\":\"4469\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4208\",\"type\":\"Line\"},{\"attributes\":{\"width\":10},\"id\":\"4470\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"4282\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"4213\"}},\"id\":\"4218\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4210\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4216\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"3499\"}},\"id\":\"4212\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"3534\"},{\"id\":\"4470\"},{\"id\":\"4472\"}]},\"id\":\"4473\",\"type\":\"Row\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4214\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"3501\"},{\"id\":\"4475\"},{\"id\":\"3755\"},{\"id\":\"3789\"},{\"id\":\"3821\"}]},\"id\":\"4476\",\"type\":\"Column\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"4937\"},\"selection_policy\":{\"id\":\"4936\"}},\"id\":\"4219\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"height\":30},\"id\":\"4471\",\"type\":\"Spacer\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"4987\"},\"selection_policy\":{\"id\":\"4986\"}},\"id\":\"4213\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"4471\"},{\"id\":\"3601\"},{\"id\":\"3602\"},{\"id\":\"3749\"},{\"id\":\"3748\"},{\"id\":\"4374\"},{\"id\":\"4375\"},{\"id\":\"4376\"},{\"id\":\"4377\"},{\"id\":\"3750\"},{\"id\":\"3751\"},{\"id\":\"3752\"},{\"id\":\"3753\"}]},\"id\":\"4472\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"4213\"},\"glyph\":{\"id\":\"4214\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"4216\"},\"nonselection_glyph\":{\"id\":\"4215\"},\"view\":{\"id\":\"4218\"}},\"id\":\"4217\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"height\":10},\"id\":\"4475\",\"type\":\"Spacer\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4220\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"4972\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4215\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"3621\"},{\"id\":\"4473\"}]},\"id\":\"4474\",\"type\":\"Column\"}],\"root_ids\":[\"4488\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
- " const render_items = [{\"docid\":\"cf03a18f-f85a-4414-bd96-45e97dc6b718\",\"root_ids\":[\"4488\"],\"roots\":{\"4488\":\"3c8f723c-8402-4b2c-9417-8d4e32cea55f\"}}];\n",
- " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
- "\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " embed_document(root);\n",
- " } else {\n",
- " let attempts = 0;\n",
- " const timer = setInterval(function(root) {\n",
- " if (root.Bokeh !== undefined) {\n",
- " clearInterval(timer);\n",
- " embed_document(root);\n",
- " } else {\n",
- " attempts++;\n",
- " if (attempts > 100) {\n",
- " clearInterval(timer);\n",
- " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
- " }\n",
- " }\n",
- " }, 10, root)\n",
- " }\n",
- "})(window);"
- ],
- "application/vnd.bokehjs_exec.v0+json": ""
- },
- "metadata": {
- "application/vnd.bokehjs_exec.v0+json": {
- "id": "4488"
- }
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "hidden_code_nb_plastic.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, E_steel, fy, fy_steel, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
- ]
- }
- ],
- "metadata": {
- "interpreter": {
- "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
- },
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/Simple Beam DEMOs/sb_stress.ipynb b/Simple Beam DEMOs/sb_stress.ipynb
deleted file mode 100644
index 026fc24..0000000
--- a/Simple Beam DEMOs/sb_stress.ipynb
+++ /dev/null
@@ -1,600 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# **Simple beam - Stress and Strain**\n",
- "In this fourth notebook, the stresses and strains inside the element are presented."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## **Goals**\n",
- "\n",
- "* Understand the differences between the various strains and stresses\n",
- "* Learn the relations between them\n",
- "* Note how some parameters influence their behaviour"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "## **Tasks and exercises**\n",
- "\n",
- "Answer to the following questions by using and playing with the interactive visualisation tool (bottom of the notebook).\n",
- "\n",
- "1. What are the differences between the centroid and the neutral axis? Is there a way to superimpose them in this studied case?\n",
- "\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " The centroid is dependent only on the geometry of the section; on the other hand, the neutral axis is function of the centroid and the internal forces.\n",
- " \n",
- " Yes, if the external horizontal force P is removed and the axial force N becomes zero, the neutral axis is in the same position of the centroid.\n",
- " </details>\n",
- "\n",
- "<br>\n",
- "\n",
- "2. Does the cross-section influence the maximal stresses and strains? By changing the length of the beam to 8 m, do you ascertain any changes?\n",
- "\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " Yes; the internal forces do not change, but the resistance of the section (area and inertia) is directly influenced by h and b. Note that increasing h has a bigger impact only on the bending strain and bending stress (power of 2); on the other hand b and h have the same influence, because the axial stress and strain is dependent only on the area: $\\sigma_N = N/A$ and $\\epsilon_N = \\sigma_N/E$ and the shear stress is also only dependent on the area: $\\tau_{max} = \\frac{V S}{I_y b} = \\frac{V\\frac{bh^2}{8}}{\\frac{bh^3}{12}b} = \\frac{3V}{2bh} = \\frac{3V}{2A}$.\n",
- " \n",
- " Yes; the parameters responsible for the resistance of the section (area and inertia) do not change, but the amplitude of the shear and the bending moment increase, thus the stress and strain inside the section increase, except for the axial strain and stress, that are independent of the length of the beam and they remain the same.\n",
- " </details>\n",
- "\n",
- "<br>\n",
- "\n",
- "3. Consider the starting configuration; assume that the beam is composed of a material with a yield strength of 27.2 MPa.\n",
- " 1. Will the beam remain elastic everywhere?\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " No, at the position where the bending moment is maximum, the stress in the top compressed fiber is equal to 27.5 MPa, that is bigger than 27.2 MPa.\n",
- " </details>\n",
- "\n",
- " <br>\n",
- " \n",
- " 2. Where will it yield?\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " At the center of the beam, where the bending moment is the highest.\n",
- " </details>\n",
- "\n",
- " <br>\n",
- " \n",
- " 3. If you can change only one parameter to assure that the beam remains always elastic, what will you do?\n",
- "\n",
- " <details>\n",
- " <summary style=\"color: red\">Solution:</summary>\n",
- " The possible solution are:\n",
- " <ul>\n",
- " <li>Increase h</li>\n",
- " <li>Increase b</li>\n",
- " <li>Decrease L</li>\n",
- " <li>Remove (or decrease) the external horizontal force P</li>\n",
- " <li>Decrease the uniform load q</li>\n",
- " </ul>\n",
- " </details>\n",
- "\n",
- " <br>"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## **Build the interactive visualisation tool**"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- " <div class=\"bk-root\">\n",
- " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
- " <span id=\"1002\">Loading BokehJS ...</span>\n",
- " </div>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "\n",
- "(function(root) {\n",
- " function now() {\n",
- " return new Date();\n",
- " }\n",
- "\n",
- " const force = true;\n",
- "\n",
- " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
- " root._bokeh_onload_callbacks = [];\n",
- " root._bokeh_is_loading = undefined;\n",
- " }\n",
- "\n",
- " const JS_MIME_TYPE = 'application/javascript';\n",
- " const HTML_MIME_TYPE = 'text/html';\n",
- " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
- " const CLASS_NAME = 'output_bokeh rendered_html';\n",
- "\n",
- " /**\n",
- " * Render data to the DOM node\n",
- " */\n",
- " function render(props, node) {\n",
- " const script = document.createElement(\"script\");\n",
- " node.appendChild(script);\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when an output is cleared or removed\n",
- " */\n",
- " function handleClearOutput(event, handle) {\n",
- " const cell = handle.cell;\n",
- "\n",
- " const id = cell.output_area._bokeh_element_id;\n",
- " const server_id = cell.output_area._bokeh_server_id;\n",
- " // Clean up Bokeh references\n",
- " if (id != null && id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- "\n",
- " if (server_id !== undefined) {\n",
- " // Clean up Bokeh references\n",
- " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
- " cell.notebook.kernel.execute(cmd_clean, {\n",
- " iopub: {\n",
- " output: function(msg) {\n",
- " const id = msg.content.text.trim();\n",
- " if (id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- " }\n",
- " }\n",
- " });\n",
- " // Destroy server and session\n",
- " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
- " cell.notebook.kernel.execute(cmd_destroy);\n",
- " }\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when a new output is added\n",
- " */\n",
- " function handleAddOutput(event, handle) {\n",
- " const output_area = handle.output_area;\n",
- " const output = handle.output;\n",
- "\n",
- " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
- " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
- " return\n",
- " }\n",
- "\n",
- " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
- "\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
- " // store reference to embed id on output_area\n",
- " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
- " }\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
- " const bk_div = document.createElement(\"div\");\n",
- " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
- " const script_attrs = bk_div.children[0].attributes;\n",
- " for (let i = 0; i < script_attrs.length; i++) {\n",
- " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
- " }\n",
- " // store reference to server id on output_area\n",
- " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
- " }\n",
- " }\n",
- "\n",
- " function register_renderer(events, OutputArea) {\n",
- "\n",
- " function append_mime(data, metadata, element) {\n",
- " // create a DOM node to render to\n",
- " const toinsert = this.create_output_subarea(\n",
- " metadata,\n",
- " CLASS_NAME,\n",
- " EXEC_MIME_TYPE\n",
- " );\n",
- " this.keyboard_manager.register_events(toinsert);\n",
- " // Render to node\n",
- " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
- " render(props, toinsert[toinsert.length - 1]);\n",
- " element.append(toinsert);\n",
- " return toinsert\n",
- " }\n",
- "\n",
- " /* Handle when an output is cleared or removed */\n",
- " events.on('clear_output.CodeCell', handleClearOutput);\n",
- " events.on('delete.Cell', handleClearOutput);\n",
- "\n",
- " /* Handle when a new output is added */\n",
- " events.on('output_added.OutputArea', handleAddOutput);\n",
- "\n",
- " /**\n",
- " * Register the mime type and append_mime function with output_area\n",
- " */\n",
- " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
- " /* Is output safe? */\n",
- " safe: true,\n",
- " /* Index of renderer in `output_area.display_order` */\n",
- " index: 0\n",
- " });\n",
- " }\n",
- "\n",
- " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
- " if (root.Jupyter !== undefined) {\n",
- " const events = require('base/js/events');\n",
- " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
- "\n",
- " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
- " register_renderer(events, OutputArea);\n",
- " }\n",
- " }\n",
- "\n",
- " \n",
- " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
- " root._bokeh_timeout = Date.now() + 5000;\n",
- " root._bokeh_failed_load = false;\n",
- " }\n",
- "\n",
- " const NB_LOAD_WARNING = {'data': {'text/html':\n",
- " \"<div style='background-color: #fdd'>\\n\"+\n",
- " \"<p>\\n\"+\n",
- " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
- " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
- " \"</p>\\n\"+\n",
- " \"<ul>\\n\"+\n",
- " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
- " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
- " \"</ul>\\n\"+\n",
- " \"<code>\\n\"+\n",
- " \"from bokeh.resources import INLINE\\n\"+\n",
- " \"output_notebook(resources=INLINE)\\n\"+\n",
- " \"</code>\\n\"+\n",
- " \"</div>\"}};\n",
- "\n",
- " function display_loaded() {\n",
- " const el = document.getElementById(\"1002\");\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS is loading...\";\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
- " }\n",
- " } else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(display_loaded, 100)\n",
- " }\n",
- " }\n",
- "\n",
- "\n",
- " function run_callbacks() {\n",
- " try {\n",
- " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
- " if (callback != null)\n",
- " callback();\n",
- " });\n",
- " } finally {\n",
- " delete root._bokeh_onload_callbacks\n",
- " }\n",
- " console.debug(\"Bokeh: all callbacks have finished\");\n",
- " }\n",
- "\n",
- " function load_libs(css_urls, js_urls, callback) {\n",
- " if (css_urls == null) css_urls = [];\n",
- " if (js_urls == null) js_urls = [];\n",
- "\n",
- " root._bokeh_onload_callbacks.push(callback);\n",
- " if (root._bokeh_is_loading > 0) {\n",
- " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
- " return null;\n",
- " }\n",
- " if (js_urls == null || js_urls.length === 0) {\n",
- " run_callbacks();\n",
- " return null;\n",
- " }\n",
- " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
- " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
- "\n",
- " function on_load() {\n",
- " root._bokeh_is_loading--;\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
- " run_callbacks()\n",
- " }\n",
- " }\n",
- "\n",
- " function on_error(url) {\n",
- " console.error(\"failed to load \" + url);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < css_urls.length; i++) {\n",
- " const url = css_urls[i];\n",
- " const element = document.createElement(\"link\");\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.rel = \"stylesheet\";\n",
- " element.type = \"text/css\";\n",
- " element.href = url;\n",
- " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < js_urls.length; i++) {\n",
- " const url = js_urls[i];\n",
- " const element = document.createElement('script');\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.async = false;\n",
- " element.src = url;\n",
- " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
- " document.head.appendChild(element);\n",
- " }\n",
- " };\n",
- "\n",
- " function inject_raw_css(css) {\n",
- " const element = document.createElement(\"style\");\n",
- " element.appendChild(document.createTextNode(css));\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " \n",
- " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
- " const css_urls = [];\n",
- " \n",
- "\n",
- " const inline_js = [\n",
- " function(Bokeh) {\n",
- " Bokeh.set_log_level(\"info\");\n",
- " },\n",
- " function(Bokeh) {\n",
- " \n",
- " \n",
- " }\n",
- " ];\n",
- "\n",
- " function run_inline_js() {\n",
- " \n",
- " if (root.Bokeh !== undefined || force === true) {\n",
- " \n",
- " for (let i = 0; i < inline_js.length; i++) {\n",
- " inline_js[i].call(root, root.Bokeh);\n",
- " }\n",
- " if (force === true) {\n",
- " display_loaded();\n",
- " }} else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(run_inline_js, 100);\n",
- " } else if (!root._bokeh_failed_load) {\n",
- " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
- " root._bokeh_failed_load = true;\n",
- " } else if (force !== true) {\n",
- " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
- " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
- " }\n",
- "\n",
- " }\n",
- "\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
- " run_inline_js();\n",
- " } else {\n",
- " load_libs(css_urls, js_urls, function() {\n",
- " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
- " run_inline_js();\n",
- " });\n",
- " }\n",
- "}(window));"
- ],
- "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Import the packages needed\n",
- "import sys\n",
- "sys.path.append('../HiddenCode')\n",
- "import hidden_code_nb_stress\n",
- "import math\n",
- "import numpy as np\n",
- "from cienpy import simplebeam as sb\n",
- "from cienpy import rectangular_section as beam_section\n",
- "from cienpy import stress_strain_elastic as stst"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the geometry, the external actions, the mechanical property and compute the initial configuration."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Choose the dimensions\n",
- "L = 6 # [m]\n",
- "h = 200 # [mm]\n",
- "b = 100 # [mm]\n",
- "q = 4; # [kN/m]\n",
- "P = 10; # [kN]\n",
- "\n",
- "# Choose the material parameters\n",
- "E = 200e3 # [MPa]\n",
- "\n",
- "# compute the internal forces (at x=L)\n",
- "discr_NVM = 100\n",
- "x_discr = np.linspace(0, L, discr_NVM)\n",
- "N_discr = sb.compute_N(x_discr, P)\n",
- "V_discr = sb.compute_V(x_discr, q, L)\n",
- "M_discr = sb.compute_M(x_discr, q, L)\n",
- "N = N_discr[-1]\n",
- "V = V_discr[-1]\n",
- "M = M_discr[-1]\n",
- "\n",
- "# compute the parameters\n",
- "A = beam_section.compute_area(b, h) # [mm2]\n",
- "Iy = beam_section.compute_inertia_y(b, h) # [mm4] strong axis\n",
- "Iz = beam_section.compute_inertia_z(b, h) # [mm4] weak axis\n",
- "yG = beam_section.compute_centroid_y(h)\n",
- "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
- "\n",
- "# compute the reactions\n",
- "Rx = sb.compute_Rx(P)\n",
- "Ry_l = sb.compute_Ry_l(q, L)\n",
- "Ry_r = sb.compute_Ry_r(q, L)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run the complex code to generate the **interactive visualisation tool**:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- " <div class=\"bk-root\" id=\"d94629b0-ef5a-4113-9780-0052e36c0c72\" data-root-id=\"1924\"></div>\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "(function(root) {\n",
- " function embed_document(root) {\n",
- " \n",
- " const docs_json = {\"01c53cca-b8cd-4ae6-a2a0-b26d6b8dbc69\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1923\"}]},\"id\":\"1924\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1423\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1962\"},\"group\":null,\"major_label_policy\":{\"id\":\"1963\"},\"ticker\":{\"id\":\"1305\"},\"visible\":false},\"id\":\"1304\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1415\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1540\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1539\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1928\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1426\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1425\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1428\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1541\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2052\"},\"group\":null,\"major_label_policy\":{\"id\":\"2053\"},\"ticker\":{\"id\":\"1426\"}},\"id\":\"1425\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1440\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1300\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2049\"},\"group\":null,\"major_label_policy\":{\"id\":\"2050\"},\"ticker\":{\"id\":\"1430\"},\"visible\":false},\"id\":\"1429\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1594\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1429\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1432\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1930\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1317\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1959\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1587\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1592\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1438\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1960\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1305\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1304\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1307\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1439\"}},\"id\":\"1435\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1315\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1436\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1962\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1316\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1989\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1963\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1563\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1439\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1990\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1318\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1493\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1496\",\"type\":\"Grid\"},{\"attributes\":{\"tools\":[{\"id\":\"1535\"},{\"id\":\"1536\"},{\"id\":\"1537\"},{\"id\":\"1538\"},{\"id\":\"1539\"},{\"id\":\"1540\"},{\"id\":\"1542\"}]},\"id\":\"1543\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1560\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2060\"},\"group\":null,\"major_label_policy\":{\"id\":\"2061\"},\"ticker\":{\"id\":\"1498\"},\"visible\":false},\"id\":\"1497\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1554\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1562\"}],\"center\":[{\"id\":\"1565\"},{\"id\":\"1569\"}],\"height\":200,\"left\":[{\"id\":\"1566\"}],\"renderers\":[{\"id\":\"1694\"},{\"id\":\"1700\"},{\"id\":\"1706\"}],\"title\":{\"id\":\"1552\"},\"toolbar\":{\"id\":\"1578\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1554\"},\"x_scale\":{\"id\":\"1558\"},\"y_range\":{\"id\":\"1556\"},\"y_scale\":{\"id\":\"1560\"}},\"id\":\"1551\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1991\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1556\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1992\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1573\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1351\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1552\",\"type\":\"Title\"},{\"attributes\":{\"tools\":[{\"id\":\"1433\"},{\"id\":\"1434\"},{\"id\":\"1435\"},{\"id\":\"1436\"},{\"id\":\"1437\"},{\"id\":\"1438\"},{\"id\":\"1440\"}]},\"id\":\"1441\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1562\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1565\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1558\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1771\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1773\"},\"nonselection_glyph\":{\"id\":\"1772\"},\"view\":{\"id\":\"1775\"}},\"id\":\"1774\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2082\"},\"group\":null,\"major_label_policy\":{\"id\":\"2083\"},\"ticker\":{\"id\":\"1563\"}},\"id\":\"1562\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1571\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1577\",\"type\":\"HoverTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1315\"},{\"id\":\"1316\"},{\"id\":\"1317\"},{\"id\":\"1319\"}]},\"id\":\"1320\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2079\"},\"group\":null,\"major_label_policy\":{\"id\":\"2080\"},\"ticker\":{\"id\":\"1567\"},\"visible\":false},\"id\":\"1566\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1566\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1569\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1452\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"BasicTicker\"},{\"attributes\":{\"below\":[{\"id\":\"1459\"}],\"center\":[{\"id\":\"1462\"},{\"id\":\"1466\"}],\"height\":200,\"left\":[{\"id\":\"1463\"}],\"renderers\":[{\"id\":\"1748\"},{\"id\":\"1754\"},{\"id\":\"1760\"}],\"title\":{\"id\":\"1450\"},\"toolbar\":{\"id\":\"1475\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1452\"},\"x_scale\":{\"id\":\"1455\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1457\"}},\"id\":\"1449\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"below\":[{\"id\":\"1336\"}],\"center\":[{\"id\":\"1339\"},{\"id\":\"1343\"}],\"height\":200,\"left\":[{\"id\":\"1340\"}],\"renderers\":[{\"id\":\"1388\"},{\"id\":\"1394\"},{\"id\":\"1412\"}],\"title\":{\"id\":\"1930\"},\"toolbar\":{\"id\":\"1352\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1332\"},\"y_range\":{\"id\":\"1330\"},\"y_scale\":{\"id\":\"1334\"}},\"id\":\"1328\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1965\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1474\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1330\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1575\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1966\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1471\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1570\",\"type\":\"PanTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1968\"},\"group\":null,\"major_label_policy\":{\"id\":\"1969\"},\"ticker\":{\"id\":\"1337\"}},\"id\":\"1336\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1450\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"1576\"}},\"id\":\"1572\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1459\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1462\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1332\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1968\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1468\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1457\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1574\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis\":{\"id\":\"1336\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1339\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1969\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1345\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2046\"},\"group\":null,\"major_label_policy\":{\"id\":\"2047\"},\"ticker\":{\"id\":\"1762\"}},\"id\":\"1459\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1576\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1395\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2063\"},\"group\":null,\"major_label_policy\":{\"id\":\"2064\"},\"ticker\":{\"id\":\"1494\"}},\"id\":\"1493\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"1965\"},\"group\":null,\"major_label_policy\":{\"id\":\"1966\"},\"ticker\":{\"id\":\"1341\"}},\"id\":\"1340\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2044\"},\"group\":null,\"major_label_policy\":{\"id\":\"2045\"},\"ticker\":{\"id\":\"1464\"},\"visible\":false},\"id\":\"1463\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1340\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1343\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1933\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1463\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1466\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"1596\"}],\"center\":[{\"id\":\"1599\"},{\"id\":\"1603\"}],\"height\":200,\"renderers\":[{\"id\":\"1712\"},{\"id\":\"1718\"},{\"id\":\"1724\"}],\"right\":[{\"id\":\"1600\"}],\"title\":{\"id\":\"1587\"},\"toolbar\":{\"id\":\"1612\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1589\"},\"x_scale\":{\"id\":\"1592\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1594\"}},\"id\":\"1586\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1934\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1349\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1472\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1589\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1467\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1936\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1350\"}},\"id\":\"1346\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2120\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1497\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1500\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1473\"}},\"id\":\"1469\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1350\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1470\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1937\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1347\",\"type\":\"SaveTool\"},{\"attributes\":{\"below\":[{\"id\":\"1493\"}],\"center\":[{\"id\":\"1496\"},{\"id\":\"1500\"}],\"height\":200,\"left\":[{\"id\":\"1497\"}],\"renderers\":[{\"id\":\"1676\"},{\"id\":\"1682\"},{\"id\":\"1688\"}],\"title\":{\"id\":\"1484\"},\"toolbar\":{\"id\":\"1509\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1486\"},\"x_scale\":{\"id\":\"1489\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1491\"}},\"id\":\"1483\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1348\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2069\"},\"group\":null,\"major_label_policy\":{\"id\":\"2070\"},\"ticker\":{\"id\":\"1597\"}},\"id\":\"1596\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1367\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1369\"},\"nonselection_glyph\":{\"id\":\"1368\"},\"view\":{\"id\":\"1371\"}},\"id\":\"1370\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1597\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1473\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2114\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1236\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1942\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1237\",\"type\":\"Arrow\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1088\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2115\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1239\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"1943\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1240\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1236\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2116\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1772\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1940\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1239\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2117\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1941\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2121\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1086\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1691\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2044\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1654\"}},\"id\":\"1659\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"1990\"},\"selection_policy\":{\"id\":\"1989\"}},\"id\":\"1242\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2045\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1242\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"2015\"},\"selection_policy\":{\"id\":\"2014\"}},\"id\":\"1089\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1089\"},\"glyph\":{\"id\":\"1090\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1092\"},\"nonselection_glyph\":{\"id\":\"1091\"},\"view\":{\"id\":\"1094\"}},\"id\":\"1093\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1092\",\"type\":\"Patch\"},{\"attributes\":{\"overlay\":{\"id\":\"1318\"}},\"id\":\"1314\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2046\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1089\"}},\"id\":\"1094\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"1992\"},\"selection_policy\":{\"id\":\"1991\"}},\"id\":\"1249\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2093\"},\"selection_policy\":{\"id\":\"2092\"}},\"id\":\"1101\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1242\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"2017\"},\"selection_policy\":{\"id\":\"2016\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2047\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1250\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1252\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1251\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2118\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1257\",\"type\":\"Div\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1103\",\"type\":\"Rect\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1899\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1256\",\"type\":\"Slider\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Circle\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1904\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1255\",\"type\":\"Slider\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"height\":{\"value\":200},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":3},\"width\":{\"value\":100},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1104\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2119\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1249\"},\"glyph\":{\"id\":\"1250\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1252\"},\"nonselection_glyph\":{\"id\":\"1251\"},\"view\":{\"id\":\"1254\"}},\"id\":\"1253\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2124\"},\"selection_policy\":{\"id\":\"2123\"}},\"id\":\"1654\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1249\"}},\"id\":\"1254\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2157\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1101\"},\"glyph\":{\"id\":\"1102\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1104\"},\"nonselection_glyph\":{\"id\":\"1103\"},\"view\":{\"id\":\"1106\"}},\"id\":\"1105\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1903\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1258\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"tools\":[{\"id\":\"1638\"},{\"id\":\"1639\"},{\"id\":\"1640\"},{\"id\":\"1641\"},{\"id\":\"1642\"},{\"id\":\"1643\"},{\"id\":\"1645\"}]},\"id\":\"1646\",\"type\":\"Toolbar\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n L = 6 m<br>\\n A = 2.00e+04 mm<sup>2</sup><br>\\n Iy = 6.67e+07 mm<sup>4</sup><br>\\n Iz = 1.67e+07 mm<sup>4</sup>\",\"width\":170},\"id\":\"1107\",\"type\":\"Div\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1698\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2158\",\"type\":\"Selection\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1259\",\"type\":\"Div\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1110\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1657\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1654\"},\"glyph\":{\"id\":\"1655\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1657\"},\"nonselection_glyph\":{\"id\":\"1656\"},\"view\":{\"id\":\"1659\"}},\"id\":\"1658\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1101\"}},\"id\":\"1106\",\"type\":\"CDSView\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1261\",\"type\":\"Div\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1900\"}]},\"start\":10,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"1901\"}]},\"start\":20,\"step\":20,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1109\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1672\"},\"glyph\":{\"id\":\"1673\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1675\"},\"nonselection_glyph\":{\"id\":\"1674\"},\"view\":{\"id\":\"1677\"}},\"id\":\"1676\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1110\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2010\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1111\",\"type\":\"Arrow\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1287\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1656\",\"type\":\"Line\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"1902\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1260\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2134\"},\"selection_policy\":{\"id\":\"2133\"}},\"id\":\"1672\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1272\"}],\"center\":[{\"id\":\"1275\"},{\"id\":\"1279\"}],\"height\":160,\"left\":[{\"id\":\"1276\"}],\"renderers\":[{\"id\":\"1364\"},{\"id\":\"1370\"},{\"id\":\"1400\"}],\"title\":{\"id\":\"1263\"},\"toolbar\":{\"id\":\"1288\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1268\"},\"y_range\":{\"id\":\"1266\"},\"y_scale\":{\"id\":\"1270\"}},\"id\":\"1262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Text\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1266\",\"type\":\"DataRange1d\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1268\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2095\"},\"selection_policy\":{\"id\":\"2094\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2030\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1272\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1275\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2126\"},\"selection_policy\":{\"id\":\"2125\"}},\"id\":\"1666\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1263\",\"type\":\"Title\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1119\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1711\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1270\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1119\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2011\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1120\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2031\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1281\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1956\"},\"group\":null,\"major_label_policy\":{\"id\":\"1957\"},\"ticker\":{\"id\":\"1273\"},\"visible\":false},\"id\":\"1272\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1125\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1273\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"1980\"},\"selection_policy\":{\"id\":\"1979\"}},\"id\":\"1161\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1666\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1953\"},\"group\":null,\"major_label_policy\":{\"id\":\"1954\"},\"ticker\":{\"id\":\"1277\"}},\"id\":\"1276\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2097\"},\"selection_policy\":{\"id\":\"2096\"}},\"id\":\"1122\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1139\"}],\"center\":[{\"id\":\"1142\"},{\"id\":\"1146\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"},{\"id\":\"1237\"},{\"id\":\"1240\"}],\"height\":200,\"left\":[{\"id\":\"1143\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1165\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1222\"},{\"id\":\"1247\"},{\"id\":\"1253\"}],\"title\":{\"id\":\"1129\"},\"toolbar\":{\"id\":\"1154\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1131\"},\"x_scale\":{\"id\":\"1135\"},\"y_range\":{\"id\":\"1133\"},\"y_scale\":{\"id\":\"1137\"}},\"id\":\"1128\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"1276\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1279\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1702\"}},\"id\":\"1707\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1285\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1666\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2049\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1936\"},\"group\":null,\"major_label_policy\":{\"id\":\"1937\"},\"ticker\":{\"id\":\"1140\"},\"visible\":false},\"id\":\"1139\",\"type\":\"LinearAxis\"},{\"attributes\":{\"overlay\":{\"id\":\"1286\"}},\"id\":\"1282\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1933\"},\"group\":null,\"major_label_policy\":{\"id\":\"1934\"},\"ticker\":{\"id\":\"1144\"},\"visible\":false},\"id\":\"1143\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2050\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1672\"}},\"id\":\"1677\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1685\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1674\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1139\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1142\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2052\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1286\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1684\"}},\"id\":\"1689\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1129\",\"type\":\"Title\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1679\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1143\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1146\",\"type\":\"Grid\"},{\"attributes\":{\"tools\":[{\"id\":\"1280\"},{\"id\":\"1281\"},{\"id\":\"1282\"},{\"id\":\"1283\"},{\"id\":\"1284\"},{\"id\":\"1285\"},{\"id\":\"1287\"}]},\"id\":\"1288\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2053\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1686\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1690\"}},\"id\":\"1695\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1312\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2151\"},\"selection_policy\":{\"id\":\"2150\"}},\"id\":\"1690\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1690\"},\"glyph\":{\"id\":\"1691\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1693\"},\"nonselection_glyph\":{\"id\":\"1692\"},\"view\":{\"id\":\"1695\"}},\"id\":\"1694\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"1959\"},\"group\":null,\"major_label_policy\":{\"id\":\"1960\"},\"ticker\":{\"id\":\"1309\"}},\"id\":\"1308\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1692\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2139\"},\"selection_policy\":{\"id\":\"2138\"}},\"id\":\"1708\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1319\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1697\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1153\"}},\"id\":\"1149\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"ResetTool\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2153\"},\"selection_policy\":{\"id\":\"2152\"}},\"id\":\"1702\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1701\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1699\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1153\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1710\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"},{\"id\":\"1152\"}]},\"id\":\"1154\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1705\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1702\"},\"glyph\":{\"id\":\"1703\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1705\"},\"nonselection_glyph\":{\"id\":\"1704\"},\"view\":{\"id\":\"1707\"}},\"id\":\"1706\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2123\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1708\"}},\"id\":\"1713\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1708\"},\"glyph\":{\"id\":\"1709\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1711\"},\"nonselection_glyph\":{\"id\":\"1710\"},\"view\":{\"id\":\"1713\"}},\"id\":\"1712\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"1304\"}],\"center\":[{\"id\":\"1307\"},{\"id\":\"1311\"}],\"height\":160,\"left\":[{\"id\":\"1308\"}],\"renderers\":[{\"id\":\"1376\"},{\"id\":\"1382\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"1928\"},\"toolbar\":{\"id\":\"1320\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1300\"},\"y_range\":{\"id\":\"1298\"},\"y_scale\":{\"id\":\"1302\"}},\"id\":\"1296\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1704\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2124\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2135\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1946\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2136\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1947\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1949\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1950\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2104\"},\"selection_policy\":{\"id\":\"2103\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2106\"},\"selection_policy\":{\"id\":\"2105\"}},\"id\":\"1868\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1865\",\"type\":\"VeeHead\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2026\"},\"selection_policy\":{\"id\":\"2025\"}},\"id\":\"1951\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1865\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2077\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1866\",\"type\":\"Arrow\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2108\"},\"selection_policy\":{\"id\":\"2107\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2079\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1868\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2080\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2082\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1868\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2083\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Scatter\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2138\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2110\"},\"selection_policy\":{\"id\":\"2109\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1895\",\"type\":\"Text\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2112\"},\"selection_policy\":{\"id\":\"2111\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1953\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1954\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[0]},\"selected\":{\"id\":\"2146\"},\"selection_policy\":{\"id\":\"2145\"}},\"id\":\"1893\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1956\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1893\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1894\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1957\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1896\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1893\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1676\"},\"N_stress_diag\":{\"id\":\"1658\"},\"V_stress_diag\":{\"id\":\"1694\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \"},\"id\":\"1900\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1676\"},\"N_stress_diag\":{\"id\":\"1658\"},\"V_stress_diag\":{\"id\":\"1694\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \"},\"id\":\"1899\",\"type\":\"CustomJS\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1676\"},\"N_stress_diag\":{\"id\":\"1658\"},\"V_stress_diag\":{\"id\":\"1694\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_b\":{\"id\":\"1003\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h)\\n const Iy = compute_inertia_y(b, h)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n glyph_section.glyph.width = data['b'][0]\\n glyph_section.glyph.height = data['h'][0]\\n }\\n \\n \\n function compute_area(b, h) {\\n return b*h\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h) {\\n return h*b**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \"},\"id\":\"1901\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1364\"},\"N_stress_diag\":{\"id\":\"1658\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_M\":{\"id\":\"1242\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=100) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1902\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2085\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1253\"},\"div_P\":{\"id\":\"1259\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1903\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2141\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2086\",\"type\":\"AllLabels\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1388\"},\"M_stress_diag\":{\"id\":\"1676\"},\"V_diag\":{\"id\":\"1376\"},\"V_stress_diag\":{\"id\":\"1694\"},\"arr_head\":{\"id\":\"1253\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=10) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n \\n total_tau[i] = compute_total_tau(tau_shear[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y, b, h, yG) {\\n return b/2*(h**2/4-(y-yG)**2)\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"1904\",\"type\":\"CustomJS\"},{\"attributes\":{\"width\":10},\"id\":\"1905\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2088\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"height\":10},\"id\":\"1906\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2089\",\"type\":\"AllLabels\"},{\"attributes\":{\"children\":[{\"id\":\"1107\"},{\"id\":\"1261\"}]},\"id\":\"1907\",\"type\":\"Row\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2006\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2007\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2008\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1777\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1995\"},\"selection_policy\":{\"id\":\"1994\"}},\"id\":\"1938\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2141\"},\"selection_policy\":{\"id\":\"2140\"}},\"id\":\"1720\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2009\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1997\"},\"selection_policy\":{\"id\":\"1996\"}},\"id\":\"1939\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1981\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1734\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1999\"},\"selection_policy\":{\"id\":\"1998\"}},\"id\":\"1940\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1982\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1504\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1733\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1735\"},\"nonselection_glyph\":{\"id\":\"1734\"},\"view\":{\"id\":\"1737\"}},\"id\":\"1736\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1507\"}},\"id\":\"1503\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1720\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1720\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2001\"},\"selection_policy\":{\"id\":\"2000\"}},\"id\":\"1941\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1726\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1984\"},\"selection_policy\":{\"id\":\"1983\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1726\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2100\"},\"selection_policy\":{\"id\":\"2099\"}},\"id\":\"2010\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1775\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2003\"},\"selection_policy\":{\"id\":\"2002\"}},\"id\":\"1942\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,22.22222222222222,44.44444444444444,66.66666666666666,88.88888888888889,111.11111111111111,133.33333333333331,155.55555555555554,177.77777777777777,200.0,200]},\"selected\":{\"id\":\"2156\"},\"selection_policy\":{\"id\":\"2155\"}},\"id\":\"1726\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2099\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2102\"},\"selection_policy\":{\"id\":\"2101\"}},\"id\":\"2011\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2117\"},\"selection_policy\":{\"id\":\"2116\"}},\"id\":\"1744\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1733\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2100\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2005\"},\"selection_policy\":{\"id\":\"2004\"}},\"id\":\"1943\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2158\"},\"selection_policy\":{\"id\":\"2157\"}},\"id\":\"1738\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2101\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1983\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1737\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1739\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1984\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2131\"},\"selection_policy\":{\"id\":\"2130\"}},\"id\":\"1776\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2102\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2013\"},\"selection_policy\":{\"id\":\"2012\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1751\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1753\"},\"nonselection_glyph\":{\"id\":\"1752\"},\"view\":{\"id\":\"1755\"}},\"id\":\"1754\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1738\"},\"glyph\":{\"id\":\"1739\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1741\"},\"nonselection_glyph\":{\"id\":\"1740\"},\"view\":{\"id\":\"1743\"}},\"id\":\"1742\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"1988\"},\"selection_policy\":{\"id\":\"1987\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1740\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1744\"},\"glyph\":{\"id\":\"1745\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1747\"},\"nonselection_glyph\":{\"id\":\"1746\"},\"view\":{\"id\":\"1749\"}},\"id\":\"1748\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1738\"}},\"id\":\"1743\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1745\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2119\"},\"selection_policy\":{\"id\":\"2118\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"A\":[20000],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[66666666.666666664],\"Iz\":[16666666.666666666],\"L\":[6],\"M\":[0.0],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"1982\"},\"selection_policy\":{\"id\":\"1981\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1752\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1744\"}},\"id\":\"1749\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1087\"},{\"id\":\"1093\"},{\"id\":\"1099\"},{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1186\"},{\"id\":\"1192\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1746\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1767\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1052\"}],\"center\":[{\"id\":\"1055\"},{\"id\":\"1059\"},{\"id\":\"1111\"},{\"id\":\"1120\"}],\"left\":[{\"id\":\"1056\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1078\"},{\"id\":\"1105\"},{\"id\":\"1117\"},{\"id\":\"1126\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1067\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1048\"},\"y_range\":{\"id\":\"1046\"},\"y_scale\":{\"id\":\"1050\"}},\"id\":\"1041\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1751\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1791\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1985\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2121\"},\"selection_policy\":{\"id\":\"2120\"}},\"id\":\"1756\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1753\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1986\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1755\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1757\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1759\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1762\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"1949\"},\"group\":null,\"major_label_policy\":{\"id\":\"1950\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1756\"},\"glyph\":{\"id\":\"1757\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1759\"},\"nonselection_glyph\":{\"id\":\"1758\"},\"view\":{\"id\":\"1761\"}},\"id\":\"1760\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1758\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1946\"},\"group\":null,\"major_label_policy\":{\"id\":\"1947\"},\"ticker\":{\"id\":\"1024\"},\"visible\":false},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1764\"},\"glyph\":{\"id\":\"1765\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1767\"},\"nonselection_glyph\":{\"id\":\"1766\"},\"view\":{\"id\":\"1769\"}},\"id\":\"1768\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2012\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1756\"}},\"id\":\"1761\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1779\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2091\"},\"selection_policy\":{\"id\":\"2090\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2013\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAACO4ziO4zg2QI7jOI7jOEZAqqqqqqqqUECO4ziO4zhWQHIcx3Ecx1tAqqqqqqqqYEAcx3Ecx3FjQI7jOI7jOGZAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2129\"},\"selection_policy\":{\"id\":\"2128\"}},\"id\":\"1764\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1987\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1764\"}},\"id\":\"1769\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1766\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1782\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1988\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1773\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1776\"},\"glyph\":{\"id\":\"1777\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1779\"},\"nonselection_glyph\":{\"id\":\"1778\"},\"view\":{\"id\":\"1781\"}},\"id\":\"1780\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1778\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1795\"}],\"center\":[{\"id\":\"1798\"},{\"id\":\"1802\"},{\"id\":\"1863\"}],\"height\":200,\"left\":[{\"id\":\"1799\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1785\"},\"toolbar\":{\"id\":\"1810\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1787\"},\"x_scale\":{\"id\":\"1791\"},\"y_range\":{\"id\":\"1789\"},\"y_scale\":{\"id\":\"1793\"}},\"id\":\"1784\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1501\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1776\"}},\"id\":\"1781\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1789\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2014\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1796\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1066\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2040\"},\"group\":null,\"major_label_policy\":{\"id\":\"2041\"},\"ticker\":{\"id\":\"1796\"},\"visible\":false},\"id\":\"1795\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2015\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1508\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1793\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2148\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1413\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2107\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2149\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2150\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2108\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1994\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2151\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1995\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2130\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1996\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2028\"},\"selection_policy\":{\"id\":\"2027\"}},\"id\":\"1360\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2066\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2131\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1997\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2067\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2069\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1998\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2070\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2109\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1344\"},{\"id\":\"1345\"},{\"id\":\"1346\"},{\"id\":\"1347\"},{\"id\":\"1348\"},{\"id\":\"1349\"},{\"id\":\"1351\"}]},\"id\":\"1352\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1999\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1360\"},\"glyph\":{\"id\":\"1361\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1363\"},\"nonselection_glyph\":{\"id\":\"1362\"},\"view\":{\"id\":\"1365\"}},\"id\":\"1364\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2110\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1506\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1372\"}},\"id\":\"1377\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2000\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1368\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1360\"}},\"id\":\"1365\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2111\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2001\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1527\"}],\"center\":[{\"id\":\"1530\"},{\"id\":\"1534\"}],\"height\":200,\"left\":[{\"id\":\"1531\"}],\"renderers\":[{\"id\":\"1768\"},{\"id\":\"1774\"},{\"id\":\"1780\"}],\"title\":{\"id\":\"1518\"},\"toolbar\":{\"id\":\"1543\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1520\"},\"x_scale\":{\"id\":\"1523\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1525\"}},\"id\":\"1517\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1065\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2152\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1367\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2002\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2037\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2153\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-12.0,-11.757575757575758,-11.515151515151516,-11.272727272727273,-11.030303030303031,-10.787878787878787,-10.545454545454545,-10.303030303030303,-10.06060606060606,-9.818181818181818,-9.575757575757576,-9.333333333333332,-9.09090909090909,-8.848484848484848,-8.606060606060606,-8.363636363636363,-8.121212121212121,-7.878787878787879,-7.636363636363637,-7.393939393939394,-7.151515151515151,-6.909090909090909,-6.666666666666666,-6.424242424242424,-6.181818181818182,-5.9393939393939394,-5.696969696969697,-5.454545454545454,-5.212121212121212,-4.96969696969697,-4.727272727272727,-4.484848484848484,-4.242424242424242,-4.0,-3.757575757575758,-3.5151515151515156,-3.2727272727272734,-3.0303030303030294,-2.787878787878787,-2.545454545454545,-2.3030303030303028,-2.0606060606060606,-1.8181818181818183,-1.5757575757575761,-1.3333333333333321,-1.09090909090909,-0.8484848484848477,-0.6060606060606055,-0.3636363636363633,-0.1212121212121211,0.1212121212121211,0.3636363636363633,0.6060606060606055,0.8484848484848495,1.0909090909090917,1.333333333333334,1.5757575757575761,1.8181818181818183,2.0606060606060606,2.3030303030303028,2.5454545454545467,2.787878787878789,3.030303030303031,3.2727272727272734,3.5151515151515156,3.757575757575758,4.0,4.242424242424242,4.484848484848484,4.727272727272727,4.969696969696969,5.212121212121211,5.454545454545453,5.696969696969699,5.939393939393941,6.181818181818183,6.424242424242426,6.666666666666668,6.90909090909091,7.151515151515152,7.3939393939393945,7.636363636363637,7.878787878787879,8.121212121212121,8.363636363636363,8.606060606060606,8.848484848484848,9.09090909090909,9.333333333333336,9.575757575757578,9.81818181818182,10.060606060606062,10.303030303030305,10.545454545454547,10.787878787878789,11.030303030303031,11.272727272727273,11.515151515151516,11.757575757575758,12.0,0]},\"selected\":{\"id\":\"2031\"},\"selection_policy\":{\"id\":\"2030\"}},\"id\":\"1372\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2003\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2038\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1371\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1373\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2112\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1380\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2040\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2004\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2025\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1379\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1381\"},\"nonselection_glyph\":{\"id\":\"1380\"},\"view\":{\"id\":\"1383\"}},\"id\":\"1382\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"interval\":50},\"id\":\"1080\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{},\"id\":\"2041\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1372\"},\"glyph\":{\"id\":\"1373\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1375\"},\"nonselection_glyph\":{\"id\":\"1374\"},\"view\":{\"id\":\"1377\"}},\"id\":\"1376\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1084\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1086\"},\"nonselection_glyph\":{\"id\":\"1085\"},\"view\":{\"id\":\"1088\"}},\"id\":\"1087\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2005\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1425\"}],\"center\":[{\"id\":\"1428\"},{\"id\":\"1432\"}],\"height\":200,\"left\":[{\"id\":\"1429\"}],\"renderers\":[{\"id\":\"1658\"},{\"id\":\"1664\"},{\"id\":\"1670\"}],\"title\":{\"id\":\"1415\"},\"toolbar\":{\"id\":\"1441\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1417\"},\"x_scale\":{\"id\":\"1421\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1423\"}},\"id\":\"1414\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2026\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1374\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2027\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1409\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1411\"},\"nonselection_glyph\":{\"id\":\"1410\"},\"view\":{\"id\":\"1413\"}},\"id\":\"1412\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2133\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1381\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2028\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1379\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2134\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1391\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1393\"},\"nonselection_glyph\":{\"id\":\"1392\"},\"view\":{\"id\":\"1395\"}},\"id\":\"1394\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1502\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"},{\"id\":\"1065\"}]},\"id\":\"1067\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-0.0,-0.7199265381083563,-1.4251606978879707,-2.115702479338843,-2.7915518824609737,-3.452708907254362,-4.099173553719009,-4.730945821854913,-5.348025711662076,-5.950413223140496,-6.5381083562901745,-7.111111111111112,-7.669421487603306,-8.213039485766759,-8.74196510560147,-9.25619834710744,-9.755739210284665,-10.240587695133149,-10.710743801652892,-11.166207529843895,-11.606978879706153,-12.03305785123967,-12.444444444444445,-12.841138659320476,-13.223140495867767,-13.590449954086317,-13.943067033976122,-14.28099173553719,-14.604224058769512,-14.912764003673093,-15.206611570247935,-15.485766758494032,-15.750229568411386,-16.0,-16.235078053259873,-16.455463728191,-16.661157024793386,-16.852157943067034,-17.02846648301194,-17.1900826446281,-17.33700642791552,-17.469237832874196,-17.58677685950413,-17.689623507805326,-17.77777777777778,-17.85123966942149,-17.910009182736456,-17.95408631772268,-17.983471074380166,-17.99816345270891,-17.99816345270891,-17.983471074380166,-17.95408631772268,-17.910009182736456,-17.85123966942149,-17.77777777777778,-17.689623507805326,-17.58677685950413,-17.469237832874196,-17.33700642791552,-17.1900826446281,-17.028466483011936,-16.852157943067034,-16.661157024793386,-16.455463728191,-16.235078053259873,-16.0,-15.750229568411386,-15.485766758494032,-15.206611570247935,-14.912764003673095,-14.604224058769514,-14.280991735537192,-13.943067033976122,-13.590449954086315,-13.223140495867765,-12.841138659320475,-12.444444444444443,-12.033057851239668,-11.606978879706151,-11.166207529843893,-10.710743801652892,-10.240587695133149,-9.755739210284665,-9.25619834710744,-8.741965105601471,-8.21303948576676,-7.669421487603308,-7.111111111111105,-6.538108356290169,-5.950413223140491,-5.348025711662071,-4.730945821854909,-4.099173553719005,-3.452708907254359,-2.791551882460971,-2.1157024793388413,-1.4251606978879694,-0.7199265381083556,0.0,0]},\"selected\":{\"id\":\"2034\"},\"selection_policy\":{\"id\":\"2033\"}},\"id\":\"1384\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2115\"},\"selection_policy\":{\"id\":\"2114\"}},\"id\":\"2042\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1505\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2072\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1383\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2073\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1387\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1384\"},\"glyph\":{\"id\":\"1385\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1387\"},\"nonselection_glyph\":{\"id\":\"1386\"},\"view\":{\"id\":\"1389\"}},\"id\":\"1388\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2075\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1392\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1384\"}},\"id\":\"1389\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1386\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1066\"}},\"id\":\"1062\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2076\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1393\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1391\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1409\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2155\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1411\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2156\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2149\"},\"selection_policy\":{\"id\":\"2148\"}},\"id\":\"2077\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1410\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{\"height\":10},\"id\":\"1908\",\"type\":\"Spacer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2037\"},\"group\":null,\"major_label_policy\":{\"id\":\"2038\"},\"ticker\":{\"id\":\"1800\"},\"visible\":false},\"id\":\"1799\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1785\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1804\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1799\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1802\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1795\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1798\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2066\"},\"group\":null,\"major_label_policy\":{\"id\":\"2067\"},\"ticker\":{\"id\":\"1601\"}},\"id\":\"1600\",\"type\":\"LinearAxis\"},{\"attributes\":{\"children\":[{\"id\":\"1041\"},{\"id\":\"1905\"},{\"id\":\"1909\"}]},\"id\":\"1910\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1906\"},{\"id\":\"1108\"},{\"id\":\"1109\"},{\"id\":\"1907\"},{\"id\":\"1908\"},{\"id\":\"1256\"},{\"id\":\"1255\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"},{\"id\":\"1260\"}]},\"id\":\"1909\",\"type\":\"Column\"},{\"attributes\":{\"below\":[{\"id\":\"1828\"}],\"center\":[{\"id\":\"1831\"},{\"id\":\"1835\"},{\"id\":\"1866\"}],\"height\":200,\"left\":[{\"id\":\"1832\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1860\"},{\"id\":\"1897\"}],\"title\":{\"id\":\"1818\"},\"toolbar\":{\"id\":\"1843\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1820\"},\"x_scale\":{\"id\":\"1824\"},\"y_range\":{\"id\":\"1822\"},\"y_scale\":{\"id\":\"1826\"}},\"id\":\"1817\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"BasicTicker\"},{\"attributes\":{\"width\":200},\"id\":\"1916\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2090\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"1128\"},{\"id\":\"1910\"}]},\"id\":\"1911\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1489\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1808\",\"type\":\"HelpTool\"},{\"attributes\":{\"height\":10},\"id\":\"1912\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1803\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2091\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1911\"},{\"id\":\"1913\"}]},\"id\":\"1914\",\"type\":\"Row\"},{\"attributes\":{\"overlay\":{\"id\":\"1809\"}},\"id\":\"1805\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"1912\"},{\"id\":\"1262\"},{\"id\":\"1296\"},{\"id\":\"1328\"}]},\"id\":\"1913\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1806\",\"type\":\"SaveTool\"},{\"attributes\":{\"width\":200},\"id\":\"1917\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1807\",\"type\":\"ResetTool\"},{\"attributes\":{\"width\":200},\"id\":\"1918\",\"type\":\"Spacer\"},{\"attributes\":{\"children\":[{\"id\":\"1817\"},{\"id\":\"1916\"},{\"id\":\"1551\"},{\"id\":\"1917\"},{\"id\":\"1918\"},{\"id\":\"1620\"}]},\"id\":\"1919\",\"type\":\"Row\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1809\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"children\":[{\"id\":\"1784\"},{\"id\":\"1449\"},{\"id\":\"1414\"},{\"id\":\"1517\"},{\"id\":\"1483\"},{\"id\":\"1586\"}]},\"id\":\"1915\",\"type\":\"Row\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1858\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"1915\"},{\"id\":\"1919\"}]},\"id\":\"1920\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"1920\"}]},\"id\":\"1921\",\"type\":\"Row\"},{\"attributes\":{\"source\":{\"id\":\"1856\"}},\"id\":\"1861\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1467\"},{\"id\":\"1468\"},{\"id\":\"1469\"},{\"id\":\"1470\"},{\"id\":\"1471\"},{\"id\":\"1472\"},{\"id\":\"1474\"}]},\"id\":\"1475\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1862\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2042\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1863\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1486\",\"type\":\"DataRange1d\"},{\"attributes\":{\"children\":[{\"id\":\"1914\"},{\"id\":\"1921\"}]},\"id\":\"1922\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2092\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1859\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1523\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2093\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1484\",\"type\":\"Title\"},{\"attributes\":{\"children\":[{\"id\":\"1922\"}]},\"id\":\"1923\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1837\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1491\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1822\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1507\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2075\"},\"group\":null,\"major_label_policy\":{\"id\":\"2076\"},\"ticker\":{\"id\":\"1829\"},\"visible\":false},\"id\":\"1828\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1596\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1599\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1601\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1538\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2094\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1803\"},{\"id\":\"1804\"},{\"id\":\"1805\"},{\"id\":\"1806\"},{\"id\":\"1807\"},{\"id\":\"1808\"}]},\"id\":\"1810\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2055\"},\"group\":null,\"major_label_policy\":{\"id\":\"2056\"},\"ticker\":{\"id\":\"1532\"},\"visible\":false},\"id\":\"1531\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1531\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1534\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2072\"},\"group\":null,\"major_label_policy\":{\"id\":\"2073\"},\"ticker\":{\"id\":\"1833\"},\"visible\":false},\"id\":\"1832\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1824\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2095\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1828\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1831\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1818\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1829\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1518\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1832\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1835\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2096\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1826\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1862\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1841\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1836\",\"type\":\"PanTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1501\"},{\"id\":\"1502\"},{\"id\":\"1503\"},{\"id\":\"1504\"},{\"id\":\"1505\"},{\"id\":\"1506\"},{\"id\":\"1508\"}]},\"id\":\"1509\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"1842\"}},\"id\":\"1838\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2097\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1520\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1839\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1542\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1840\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis\":{\"id\":\"1527\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1530\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2144\"},\"selection_policy\":{\"id\":\"2143\"}},\"id\":\"1856\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1541\"}},\"id\":\"1537\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1536\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1842\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1525\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"1836\"},{\"id\":\"1837\"},{\"id\":\"1838\"},{\"id\":\"1839\"},{\"id\":\"1840\"},{\"id\":\"1841\"}]},\"id\":\"1843\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2057\"},\"group\":null,\"major_label_policy\":{\"id\":\"2058\"},\"ticker\":{\"id\":\"1782\"}},\"id\":\"1527\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1857\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1535\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1856\"},\"glyph\":{\"id\":\"1857\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1859\"},\"nonselection_glyph\":{\"id\":\"1858\"},\"view\":{\"id\":\"1861\"}},\"id\":\"1860\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1532\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1938\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1605\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1221\",\"type\":\"Patch\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1611\",\"type\":\"HoverTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1570\"},{\"id\":\"1571\"},{\"id\":\"1572\"},{\"id\":\"1573\"},{\"id\":\"1574\"},{\"id\":\"1575\"},{\"id\":\"1577\"}]},\"id\":\"1578\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1609\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis\":{\"id\":\"1600\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1603\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1161\"}},\"id\":\"1166\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1604\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2016\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1610\"}},\"id\":\"1606\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1607\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1608\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2017\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1161\"},\"glyph\":{\"id\":\"1162\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1164\"},\"nonselection_glyph\":{\"id\":\"1163\"},\"view\":{\"id\":\"1166\"}},\"id\":\"1165\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1610\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"2019\"},\"selection_policy\":{\"id\":\"2018\"}},\"id\":\"1167\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.2]},\"selected\":{\"id\":\"2023\"},\"selection_policy\":{\"id\":\"2022\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1684\"},\"glyph\":{\"id\":\"1685\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1687\"},\"nonselection_glyph\":{\"id\":\"1686\"},\"view\":{\"id\":\"1689\"}},\"id\":\"1688\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1167\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1680\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1697\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1699\"},\"nonselection_glyph\":{\"id\":\"1698\"},\"view\":{\"id\":\"1701\"}},\"id\":\"1700\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"2021\"},\"selection_policy\":{\"id\":\"2020\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1683\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1167\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2018\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1621\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2019\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"1951\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"DataRange1d\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Text\"},{\"attributes\":{\"tools\":[{\"id\":\"1604\"},{\"id\":\"1605\"},{\"id\":\"1606\"},{\"id\":\"1607\"},{\"id\":\"1608\"},{\"id\":\"1609\"},{\"id\":\"1611\"}]},\"id\":\"1612\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2088\"},\"group\":null,\"major_label_policy\":{\"id\":\"2089\"},\"ticker\":{\"id\":\"1631\"}},\"id\":\"1630\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"1939\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{\"axis\":{\"id\":\"1056\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1059\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1631\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"1986\"},\"selection_policy\":{\"id\":\"1985\"}},\"id\":\"1206\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2006\"},\"group\":null,\"major_label_policy\":{\"id\":\"2007\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1056\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2008\"},\"group\":null,\"major_label_policy\":{\"id\":\"2009\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1052\",\"type\":\"LinearAxis\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"below\":[{\"id\":\"1630\"}],\"center\":[{\"id\":\"1633\"},{\"id\":\"1637\"}],\"height\":200,\"renderers\":[{\"id\":\"1730\"},{\"id\":\"1736\"},{\"id\":\"1742\"}],\"right\":[{\"id\":\"1634\"}],\"title\":{\"id\":\"1621\"},\"toolbar\":{\"id\":\"1646\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1623\"},\"x_scale\":{\"id\":\"1626\"},\"y_range\":{\"id\":\"1556\"},\"y_scale\":{\"id\":\"1628\"}},\"id\":\"1620\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"1308\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1311\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1052\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1055\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1628\",\"type\":\"LinearScale\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2020\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1642\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1626\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2021\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1645\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1223\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"1630\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1633\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1219\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1221\"},\"nonselection_glyph\":{\"id\":\"1220\"},\"view\":{\"id\":\"1223\"}},\"id\":\"1222\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1639\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1679\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1681\"},\"nonselection_glyph\":{\"id\":\"1680\"},\"view\":{\"id\":\"1683\"}},\"id\":\"1682\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2022\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2085\"},\"group\":null,\"major_label_policy\":{\"id\":\"2086\"},\"ticker\":{\"id\":\"1635\"}},\"id\":\"1634\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1634\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1637\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1635\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1219\",\"type\":\"Patch\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1979\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1643\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1638\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1980\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1122\"}},\"id\":\"1127\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2136\"},\"selection_policy\":{\"id\":\"2135\"}},\"id\":\"1684\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1644\"}},\"id\":\"1640\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1641\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{\"source\":{\"id\":\"1206\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2023\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1206\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1644\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1220\",\"type\":\"Patch\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1122\"},\"glyph\":{\"id\":\"1123\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1125\"},\"nonselection_glyph\":{\"id\":\"1124\"},\"view\":{\"id\":\"1127\"}},\"id\":\"1126\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2055\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2056\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2057\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2058\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2033\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2034\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2143\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2126\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2144\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2145\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2146\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2103\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2104\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2060\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2061\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2063\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2064\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2105\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2129\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2106\",\"type\":\"Selection\"}],\"root_ids\":[\"1924\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
- " const render_items = [{\"docid\":\"01c53cca-b8cd-4ae6-a2a0-b26d6b8dbc69\",\"root_ids\":[\"1924\"],\"roots\":{\"1924\":\"d94629b0-ef5a-4113-9780-0052e36c0c72\"}}];\n",
- " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
- "\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " embed_document(root);\n",
- " } else {\n",
- " let attempts = 0;\n",
- " const timer = setInterval(function(root) {\n",
- " if (root.Bokeh !== undefined) {\n",
- " clearInterval(timer);\n",
- " embed_document(root);\n",
- " } else {\n",
- " attempts++;\n",
- " if (attempts > 100) {\n",
- " clearInterval(timer);\n",
- " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
- " }\n",
- " }\n",
- " }, 10, root)\n",
- " }\n",
- "})(window);"
- ],
- "application/vnd.bokehjs_exec.v0+json": ""
- },
- "metadata": {
- "application/vnd.bokehjs_exec.v0+json": {
- "id": "1924"
- }
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "hidden_code_nb_stress.main_code(L, h, b, A, Iy, Iz, yG, y_n_axis, q, P, E, N, V, M, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "tags": []
- },
- "source": [
- "## **Legend**\n",
- "\n",
- "Brief description on how to use the interactive visualization tool. For more information on specific features, check the comments in the desired file in the HiddenCode folder.\n",
- "\n",
- "* **Slider of the width b:** move the slider to change the width b of the cross-section of the beam.\n",
- "* **Slider of height h:** move the slider to change the height h of the cross-section of the beam.\n",
- "* **Slider of the position x:** move the slider to change the position x along the beam.\n",
- "* **Slider of the uniform load q:** move the slider to change the uniform load q.\n",
- "* **Textbox \"Geometrical and mechanical parameters:** small summary with the value of h, b, L, A (area), Iy (inertia with respect to the strong axis) and Iz (inertia with respect to the weak axis).\n",
- "* **Textbox \"Forces and Moments:** small summary with the value of the magnitude of the reaction forces and the internal forces at the position x.\n",
- "* **Figure \"Simple supported beam\":** in this figure, the initial state is presented with the static scheme, the length of the beam, the horizontal force P and the uniform load q.\n",
- "* **Figure \"Cross-section of the beam\":** in this figure, the cross section (constant along the beam) and the remaining two axis (y and z) are depicted.\n",
- "* **Figure \"Forces and Moments Scheme\":** this figure has a dynamic representation of the studied case with the position x indicated by a magenta dot, the internal forces shown in with red arrows, the reaction forces with yellow arrows, the external force P with a green arrow and the uniform load q in blue.\n",
- "* **Radio buttons of the FBD:** choose between right-hand or left-hand free-body diagram.\n",
- "* **Button of the force P:** apply or remove the external force P.\n",
- "* **Figures \"N V M Diagrams\":** plots that show the axial force N, shear force V and bending moment M diagrams, with a magenta dot that represents the x position. By hovering with the cursor over the desired position, a small window will show the position and the value of the internal force.\n",
- "* **9 small bottom figures:** plots that show the strains, stresses and right-hand free-body diagram section (with N, V and M). By hovering with the cursor over the desired position, a small window will show the height and the value of the stress or strain.\n",
- "\n",
- "### Recommendations\n",
- "\n",
- "Considering the innate graphical nature of the interactive visualization tool, the input in the definition of the variables with extreme configuration can lead to small glitches or unclear plots; it's recommended to change these values carefully.\n",
- "\n",
- "### EXTRA: Note on the slow reactivity of the tool\n",
- "\n",
- "The slow reactivity of the tool is given by the two textboxes (called Div Widgets) which automatically call a specific funtion every time they are modified. This function redraws everything in the tool (figures, plots, diagrams, textboxes, sliders, ...), generating this problem. Considering that a real solution does not exist in the current version of the lib used (Bokeh 2.4.2), these textboxes will be removed in the next DEMOs."
- ]
- }
- ],
- "metadata": {
- "interpreter": {
- "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
- },
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/Simple Beam DEMOs/sb_torsion.ipynb b/Simple Beam DEMOs/sb_torsion.ipynb
deleted file mode 100644
index e136c34..0000000
--- a/Simple Beam DEMOs/sb_torsion.ipynb
+++ /dev/null
@@ -1,488 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Simple beam - Torsion\n",
- "In this first notebook, the torsion is presented. Considering the complexity of the problem with this new cross-section geometry and the introduction of the torsion, the focus of the notebook in the stress and strain analysis is placed on the left web."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- " <div class=\"bk-root\">\n",
- " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
- " <span id=\"1002\">Loading BokehJS ...</span>\n",
- " </div>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "\n",
- "(function(root) {\n",
- " function now() {\n",
- " return new Date();\n",
- " }\n",
- "\n",
- " const force = true;\n",
- "\n",
- " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
- " root._bokeh_onload_callbacks = [];\n",
- " root._bokeh_is_loading = undefined;\n",
- " }\n",
- "\n",
- " const JS_MIME_TYPE = 'application/javascript';\n",
- " const HTML_MIME_TYPE = 'text/html';\n",
- " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
- " const CLASS_NAME = 'output_bokeh rendered_html';\n",
- "\n",
- " /**\n",
- " * Render data to the DOM node\n",
- " */\n",
- " function render(props, node) {\n",
- " const script = document.createElement(\"script\");\n",
- " node.appendChild(script);\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when an output is cleared or removed\n",
- " */\n",
- " function handleClearOutput(event, handle) {\n",
- " const cell = handle.cell;\n",
- "\n",
- " const id = cell.output_area._bokeh_element_id;\n",
- " const server_id = cell.output_area._bokeh_server_id;\n",
- " // Clean up Bokeh references\n",
- " if (id != null && id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- "\n",
- " if (server_id !== undefined) {\n",
- " // Clean up Bokeh references\n",
- " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
- " cell.notebook.kernel.execute(cmd_clean, {\n",
- " iopub: {\n",
- " output: function(msg) {\n",
- " const id = msg.content.text.trim();\n",
- " if (id in Bokeh.index) {\n",
- " Bokeh.index[id].model.document.clear();\n",
- " delete Bokeh.index[id];\n",
- " }\n",
- " }\n",
- " }\n",
- " });\n",
- " // Destroy server and session\n",
- " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
- " cell.notebook.kernel.execute(cmd_destroy);\n",
- " }\n",
- " }\n",
- "\n",
- " /**\n",
- " * Handle when a new output is added\n",
- " */\n",
- " function handleAddOutput(event, handle) {\n",
- " const output_area = handle.output_area;\n",
- " const output = handle.output;\n",
- "\n",
- " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
- " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
- " return\n",
- " }\n",
- "\n",
- " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
- "\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
- " // store reference to embed id on output_area\n",
- " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
- " }\n",
- " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
- " const bk_div = document.createElement(\"div\");\n",
- " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
- " const script_attrs = bk_div.children[0].attributes;\n",
- " for (let i = 0; i < script_attrs.length; i++) {\n",
- " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
- " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
- " }\n",
- " // store reference to server id on output_area\n",
- " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
- " }\n",
- " }\n",
- "\n",
- " function register_renderer(events, OutputArea) {\n",
- "\n",
- " function append_mime(data, metadata, element) {\n",
- " // create a DOM node to render to\n",
- " const toinsert = this.create_output_subarea(\n",
- " metadata,\n",
- " CLASS_NAME,\n",
- " EXEC_MIME_TYPE\n",
- " );\n",
- " this.keyboard_manager.register_events(toinsert);\n",
- " // Render to node\n",
- " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
- " render(props, toinsert[toinsert.length - 1]);\n",
- " element.append(toinsert);\n",
- " return toinsert\n",
- " }\n",
- "\n",
- " /* Handle when an output is cleared or removed */\n",
- " events.on('clear_output.CodeCell', handleClearOutput);\n",
- " events.on('delete.Cell', handleClearOutput);\n",
- "\n",
- " /* Handle when a new output is added */\n",
- " events.on('output_added.OutputArea', handleAddOutput);\n",
- "\n",
- " /**\n",
- " * Register the mime type and append_mime function with output_area\n",
- " */\n",
- " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
- " /* Is output safe? */\n",
- " safe: true,\n",
- " /* Index of renderer in `output_area.display_order` */\n",
- " index: 0\n",
- " });\n",
- " }\n",
- "\n",
- " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
- " if (root.Jupyter !== undefined) {\n",
- " const events = require('base/js/events');\n",
- " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
- "\n",
- " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
- " register_renderer(events, OutputArea);\n",
- " }\n",
- " }\n",
- "\n",
- " \n",
- " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
- " root._bokeh_timeout = Date.now() + 5000;\n",
- " root._bokeh_failed_load = false;\n",
- " }\n",
- "\n",
- " const NB_LOAD_WARNING = {'data': {'text/html':\n",
- " \"<div style='background-color: #fdd'>\\n\"+\n",
- " \"<p>\\n\"+\n",
- " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
- " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
- " \"</p>\\n\"+\n",
- " \"<ul>\\n\"+\n",
- " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
- " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
- " \"</ul>\\n\"+\n",
- " \"<code>\\n\"+\n",
- " \"from bokeh.resources import INLINE\\n\"+\n",
- " \"output_notebook(resources=INLINE)\\n\"+\n",
- " \"</code>\\n\"+\n",
- " \"</div>\"}};\n",
- "\n",
- " function display_loaded() {\n",
- " const el = document.getElementById(\"1002\");\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS is loading...\";\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " if (el != null) {\n",
- " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
- " }\n",
- " } else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(display_loaded, 100)\n",
- " }\n",
- " }\n",
- "\n",
- "\n",
- " function run_callbacks() {\n",
- " try {\n",
- " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
- " if (callback != null)\n",
- " callback();\n",
- " });\n",
- " } finally {\n",
- " delete root._bokeh_onload_callbacks\n",
- " }\n",
- " console.debug(\"Bokeh: all callbacks have finished\");\n",
- " }\n",
- "\n",
- " function load_libs(css_urls, js_urls, callback) {\n",
- " if (css_urls == null) css_urls = [];\n",
- " if (js_urls == null) js_urls = [];\n",
- "\n",
- " root._bokeh_onload_callbacks.push(callback);\n",
- " if (root._bokeh_is_loading > 0) {\n",
- " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
- " return null;\n",
- " }\n",
- " if (js_urls == null || js_urls.length === 0) {\n",
- " run_callbacks();\n",
- " return null;\n",
- " }\n",
- " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
- " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
- "\n",
- " function on_load() {\n",
- " root._bokeh_is_loading--;\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
- " run_callbacks()\n",
- " }\n",
- " }\n",
- "\n",
- " function on_error(url) {\n",
- " console.error(\"failed to load \" + url);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < css_urls.length; i++) {\n",
- " const url = css_urls[i];\n",
- " const element = document.createElement(\"link\");\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.rel = \"stylesheet\";\n",
- " element.type = \"text/css\";\n",
- " element.href = url;\n",
- " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " for (let i = 0; i < js_urls.length; i++) {\n",
- " const url = js_urls[i];\n",
- " const element = document.createElement('script');\n",
- " element.onload = on_load;\n",
- " element.onerror = on_error.bind(null, url);\n",
- " element.async = false;\n",
- " element.src = url;\n",
- " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
- " document.head.appendChild(element);\n",
- " }\n",
- " };\n",
- "\n",
- " function inject_raw_css(css) {\n",
- " const element = document.createElement(\"style\");\n",
- " element.appendChild(document.createTextNode(css));\n",
- " document.body.appendChild(element);\n",
- " }\n",
- "\n",
- " \n",
- " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n",
- " const css_urls = [];\n",
- " \n",
- "\n",
- " const inline_js = [\n",
- " function(Bokeh) {\n",
- " Bokeh.set_log_level(\"info\");\n",
- " },\n",
- " function(Bokeh) {\n",
- " \n",
- " \n",
- " }\n",
- " ];\n",
- "\n",
- " function run_inline_js() {\n",
- " \n",
- " if (root.Bokeh !== undefined || force === true) {\n",
- " \n",
- " for (let i = 0; i < inline_js.length; i++) {\n",
- " inline_js[i].call(root, root.Bokeh);\n",
- " }\n",
- " if (force === true) {\n",
- " display_loaded();\n",
- " }} else if (Date.now() < root._bokeh_timeout) {\n",
- " setTimeout(run_inline_js, 100);\n",
- " } else if (!root._bokeh_failed_load) {\n",
- " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
- " root._bokeh_failed_load = true;\n",
- " } else if (force !== true) {\n",
- " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
- " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
- " }\n",
- "\n",
- " }\n",
- "\n",
- " if (root._bokeh_is_loading === 0) {\n",
- " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
- " run_inline_js();\n",
- " } else {\n",
- " load_libs(css_urls, js_urls, function() {\n",
- " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
- " run_inline_js();\n",
- " });\n",
- " }\n",
- "}(window));"
- ],
- "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Import the packages needed\n",
- "import sys\n",
- "sys.path.append('../HiddenCode')\n",
- "import hidden_code_nb_torsion\n",
- "import math\n",
- "import numpy as np\n",
- "from cienpy import simplebeam as sb\n",
- "from cienpy import hollow_rectangular_section as beam_section\n",
- "from cienpy import stress_strain_elastic as stst"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the geometry, uniform load and torsion. Both supports are fixed with respect to the torsion.\n",
- "Note that given the graphical nature of the notebook, extreme cases can cause the figures to not be displayed."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Choose the dimensions\n",
- "L = 6 # [m]\n",
- "h = 200 # [mm]\n",
- "b = 100 # [mm]\n",
- "t = 10 # [mm]\n",
- "q = 4 # [kN/m]\n",
- "P = 10 # [kN]\n",
- "Mt = 100 # [kNm]\n",
- "\n",
- "# Choose the material parameters\n",
- "E = 200e3 # [MPa]\n",
- "\n",
- "# compute the internal forces (at x=L)\n",
- "discr_NVM = 100\n",
- "x_discr = np.linspace(0, L, discr_NVM)\n",
- "N_discr = sb.compute_N(x_discr, P)\n",
- "V_discr = sb.compute_V(x_discr, q, L)\n",
- "M_discr = sb.compute_M(x_discr, q, L)\n",
- "T_discr = sb.compute_T(x_discr, Mt, L)\n",
- "N = N_discr[-1]\n",
- "V = V_discr[-1]\n",
- "M = M_discr[-1]\n",
- "T = T_discr[-1]\n",
- "\n",
- "# compute the parameters\n",
- "A = beam_section.compute_area(b, h, t) # [mm2]\n",
- "Iy = beam_section.compute_inertia_y(b, h, t) # [mm4] strong axis\n",
- "Iz = beam_section.compute_inertia_z(b, h, t) # [mm4] weak axis\n",
- "yG = beam_section.compute_centroid_y(h)\n",
- "y_n_axis = stst.compute_neutral_axis(N, A, Iy, M, yG)\n",
- "\n",
- "# compute the reactions\n",
- "Rx = sb.compute_Rx(P)\n",
- "Ry_l = sb.compute_Ry_l(q, L)\n",
- "Ry_r = sb.compute_Ry_r(q, L)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run the complex code for the interactive visualisation:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- " <div class=\"bk-root\" id=\"272a9d88-57a5-466e-b9b2-cd6e1a1520cb\" data-root-id=\"2087\"></div>\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/javascript": [
- "(function(root) {\n",
- " function embed_document(root) {\n",
- " \n",
- " const docs_json = {\"59ecfd77-c705-4c8c-9c88-28bd01828977\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"2086\"}]},\"id\":\"2087\",\"type\":\"Column\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position:\",\"@x m\"],[\"Torsion:\",\"@y kNm\"]]},\"id\":\"1924\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2266\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2196\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2300\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2139\"},\"group\":null,\"major_label_policy\":{\"id\":\"2140\"},\"ticker\":{\"id\":\"1910\"}},\"id\":\"1909\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2301\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1903\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1392\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2172\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2197\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1473\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1905\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2173\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1907\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1397\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1910\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1909\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1912\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2287\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1918\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2174\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Torsion T [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2136\"},\"group\":null,\"major_label_policy\":{\"id\":\"2137\"},\"ticker\":{\"id\":\"1914\"}},\"id\":\"1913\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1391\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2288\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1913\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1916\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1914\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2175\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2124\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1922\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1917\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1505\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"1923\"}},\"id\":\"1919\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2176\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1920\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2198\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1508\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,-10.0,0]},\"selected\":{\"id\":\"2206\"},\"selection_policy\":{\"id\":\"2205\"}},\"id\":\"1360\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1921\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2302\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2127\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1493\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1496\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2177\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2199\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2303\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1923\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,-50.0,0]},\"selected\":{\"id\":\"2217\"},\"selection_policy\":{\"id\":\"2216\"}},\"id\":\"1934\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1501\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2289\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1943\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1502\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2290\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1344\"},{\"id\":\"1345\"},{\"id\":\"1346\"},{\"id\":\"1347\"},{\"id\":\"1348\"},{\"id\":\"1349\"},{\"id\":\"1351\"}]},\"id\":\"1352\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1360\"},\"glyph\":{\"id\":\"1361\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1363\"},\"nonselection_glyph\":{\"id\":\"1362\"},\"view\":{\"id\":\"1365\"}},\"id\":\"1364\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"T\"}},\"id\":\"1947\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2243\"},\"group\":null,\"major_label_policy\":{\"id\":\"2244\"},\"ticker\":{\"id\":\"1498\"},\"visible\":false},\"id\":\"1497\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1497\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1500\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2359\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1962\"}],\"center\":[{\"id\":\"1965\"},{\"id\":\"1969\"}],\"height\":200,\"left\":[{\"id\":\"1966\"}],\"renderers\":[{\"id\":\"2041\"},{\"id\":\"2047\"},{\"id\":\"2053\"}],\"title\":{\"id\":\"1953\"},\"toolbar\":{\"id\":\"1978\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1955\"},\"x_scale\":{\"id\":\"1958\"},\"y_range\":{\"id\":\"1556\"},\"y_scale\":{\"id\":\"1960\"}},\"id\":\"1952\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2268\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1941\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1372\"}},\"id\":\"1377\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1507\"}},\"id\":\"1503\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2360\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1384\"}},\"id\":\"1389\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1506\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2269\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1360\"}},\"id\":\"1365\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1942\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1504\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2304\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1576\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1386\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2271\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1368\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2200\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2305\",\"type\":\"Selection\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1367\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1507\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1369\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2201\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2272\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1411\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1379\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1381\"},\"nonselection_glyph\":{\"id\":\"1380\"},\"view\":{\"id\":\"1383\"}},\"id\":\"1382\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1917\"},{\"id\":\"1918\"},{\"id\":\"1919\"},{\"id\":\"1920\"},{\"id\":\"1921\"},{\"id\":\"1922\"},{\"id\":\"1924\"}]},\"id\":\"1925\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1375\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1525\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1371\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1373\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1934\"}},\"id\":\"1939\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-12.0,-11.757575757575758,-11.515151515151516,-11.272727272727273,-11.030303030303031,-10.787878787878787,-10.545454545454545,-10.303030303030303,-10.06060606060606,-9.818181818181818,-9.575757575757576,-9.333333333333332,-9.09090909090909,-8.848484848484848,-8.606060606060606,-8.363636363636363,-8.121212121212121,-7.878787878787879,-7.636363636363637,-7.393939393939394,-7.151515151515151,-6.909090909090909,-6.666666666666666,-6.424242424242424,-6.181818181818182,-5.9393939393939394,-5.696969696969697,-5.454545454545454,-5.212121212121212,-4.96969696969697,-4.727272727272727,-4.484848484848484,-4.242424242424242,-4.0,-3.757575757575758,-3.5151515151515156,-3.2727272727272734,-3.0303030303030294,-2.787878787878787,-2.545454545454545,-2.3030303030303028,-2.0606060606060606,-1.8181818181818183,-1.5757575757575761,-1.3333333333333321,-1.09090909090909,-0.8484848484848477,-0.6060606060606055,-0.3636363636363633,-0.1212121212121211,0.1212121212121211,0.3636363636363633,0.6060606060606055,0.8484848484848495,1.0909090909090917,1.333333333333334,1.5757575757575761,1.8181818181818183,2.0606060606060606,2.3030303030303028,2.5454545454545467,2.787878787878789,3.030303030303031,3.2727272727272734,3.5151515151515156,3.757575757575758,4.0,4.242424242424242,4.484848484848484,4.727272727272727,4.969696969696969,5.212121212121211,5.454545454545453,5.696969696969699,5.939393939393941,6.181818181818183,6.424242424242426,6.666666666666668,6.90909090909091,7.151515151515152,7.3939393939393945,7.636363636363637,7.878787878787879,8.121212121212121,8.363636363636363,8.606060606060606,8.848484848484848,9.09090909090909,9.333333333333336,9.575757575757578,9.81818181818182,10.060606060606062,10.303030303030305,10.545454545454547,10.787878787878789,11.030303030303031,11.272727272727273,11.515151515151516,11.757575757575758,12.0,0]},\"selected\":{\"id\":\"2211\"},\"selection_policy\":{\"id\":\"2210\"}},\"id\":\"1372\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2295\"},\"selection_policy\":{\"id\":\"2294\"}},\"id\":\"2183\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1409\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1411\"},\"nonselection_glyph\":{\"id\":\"1410\"},\"view\":{\"id\":\"1413\"}},\"id\":\"1412\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1372\"},\"glyph\":{\"id\":\"1373\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1375\"},\"nonselection_glyph\":{\"id\":\"1374\"},\"view\":{\"id\":\"1377\"}},\"id\":\"1376\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"1596\"}],\"center\":[{\"id\":\"1599\"},{\"id\":\"1603\"}],\"height\":200,\"renderers\":[{\"id\":\"1712\"},{\"id\":\"1718\"},{\"id\":\"1724\"}],\"right\":[{\"id\":\"1600\"}],\"title\":{\"id\":\"1587\"},\"toolbar\":{\"id\":\"1612\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1589\"},\"x_scale\":{\"id\":\"1592\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1594\"}},\"id\":\"1586\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1407\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1937\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1409\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1374\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"T\"],\"x\":[11.000000000000002],\"y\":[1]},\"selected\":{\"id\":\"2345\"},\"selection_policy\":{\"id\":\"2344\"}},\"id\":\"2031\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1941\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1943\"},\"nonselection_glyph\":{\"id\":\"1942\"},\"view\":{\"id\":\"1945\"}},\"id\":\"1944\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending strain\"},\"id\":\"1518\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1489\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1380\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1936\",\"type\":\"Line\"},{\"attributes\":{\"end\":20,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2068\"}]},\"start\":2,\"title\":\"Change the thicknes t [mm]\",\"value\":10},\"id\":\"1933\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1381\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2130\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2178\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1379\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1523\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"1962\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1965\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1404\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2131\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2179\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1947\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1949\"},\"nonselection_glyph\":{\"id\":\"1948\"},\"view\":{\"id\":\"1951\"}},\"id\":\"1950\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1403\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2098 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2240\"},\"group\":null,\"major_label_policy\":{\"id\":\"2241\"},\"ticker\":{\"id\":\"1782\"}},\"id\":\"1527\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1413\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1945\",\"type\":\"CDSView\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2032\",\"type\":\"Text\"},{\"attributes\":{\"below\":[{\"id\":\"1527\"}],\"center\":[{\"id\":\"1530\"},{\"id\":\"1534\"}],\"height\":200,\"left\":[{\"id\":\"1531\"}],\"renderers\":[{\"id\":\"1768\"},{\"id\":\"1774\"},{\"id\":\"1780\"}],\"title\":{\"id\":\"1518\"},\"toolbar\":{\"id\":\"1543\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1520\"},\"x_scale\":{\"id\":\"1523\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1525\"}},\"id\":\"1517\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2133\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1486\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1395\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1951\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2180\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1383\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"2025\"}},\"id\":\"2030\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2292\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1387\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2134\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"T\"}},\"id\":\"1948\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1401\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2181\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2293\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1501\"},{\"id\":\"1502\"},{\"id\":\"1503\"},{\"id\":\"1504\"},{\"id\":\"1505\"},{\"id\":\"1506\"},{\"id\":\"1508\"}]},\"id\":\"1509\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2025\"},\"glyph\":{\"id\":\"2026\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2028\"},\"nonselection_glyph\":{\"id\":\"2027\"},\"view\":{\"id\":\"2030\"}},\"id\":\"2029\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1397\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1399\"},\"nonselection_glyph\":{\"id\":\"1398\"},\"view\":{\"id\":\"1401\"}},\"id\":\"1400\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"T\"}},\"id\":\"1949\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1393\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1398\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1955\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1862\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2294\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1967\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"N\"}},\"id\":\"1399\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1963\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2307\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u209c [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2271\"},\"group\":null,\"major_label_policy\":{\"id\":\"2272\"},\"ticker\":{\"id\":\"1963\"}},\"id\":\"1962\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2274\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2295\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1403\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1405\"},\"nonselection_glyph\":{\"id\":\"1404\"},\"view\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1958\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2203\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Torsional stress\"},\"id\":\"1953\",\"type\":\"Title\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2293\"},\"selection_policy\":{\"id\":\"2292\"}},\"id\":\"2182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2308\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"M\"}},\"id\":\"1410\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1960\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2275\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"V\"}},\"id\":\"1405\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1520\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2268\"},\"group\":null,\"major_label_policy\":{\"id\":\"2269\"},\"ticker\":{\"id\":\"1967\"},\"visible\":false},\"id\":\"1966\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1527\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1530\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2204\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1215\",\"type\":\"Patch\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1224\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"2111\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2210\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1220\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2112\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2211\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1589\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2114\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"tools\":[{\"id\":\"1570\"},{\"id\":\"1571\"},{\"id\":\"1572\"},{\"id\":\"1573\"},{\"id\":\"1574\"},{\"id\":\"1575\"},{\"id\":\"1577\"}]},\"id\":\"1578\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2115\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1596\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1599\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1597\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1168\",\"type\":\"Rect\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1611\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c3 and neutral axis\"},\"id\":\"1587\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1028\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1592\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1030\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1605\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1594\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2252\"},\"group\":null,\"major_label_policy\":{\"id\":\"2253\"},\"ticker\":{\"id\":\"1597\"}},\"id\":\"1596\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2204\"},\"selection_policy\":{\"id\":\"2203\"}},\"id\":\"2116\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2249\"},\"group\":null,\"major_label_policy\":{\"id\":\"2250\"},\"ticker\":{\"id\":\"1601\"}},\"id\":\"1600\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1161\"}},\"id\":\"1166\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1600\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1603\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1601\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1179\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2116\"},\"start\":null,\"x_end\":{\"value\":6},\"x_start\":{\"value\":7.0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1180\",\"type\":\"Arrow\"},{\"attributes\":{\"overlay\":{\"id\":\"1033\"}},\"id\":\"1029\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1161\"},\"glyph\":{\"id\":\"1162\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1164\"},\"nonselection_glyph\":{\"id\":\"1163\"},\"view\":{\"id\":\"1166\"}},\"id\":\"1165\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[3.0],\"y\":[0.6]},\"selected\":{\"id\":\"2191\"},\"selection_policy\":{\"id\":\"2190\"}},\"id\":\"1167\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1609\",\"type\":\"HelpTool\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1183\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1604\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1167\"},\"glyph\":{\"id\":\"1168\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1170\"},\"nonselection_glyph\":{\"id\":\"1169\"},\"view\":{\"id\":\"1172\"}},\"id\":\"1171\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1610\"}},\"id\":\"1606\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1169\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1607\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1179\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1608\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"blue\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"navy\"},\"height\":{\"value\":0.4},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"navy\"},\"width\":{\"value\":6},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1170\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1027\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1173\"},\"glyph\":{\"id\":\"1174\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1176\"},\"nonselection_glyph\":{\"id\":\"1175\"},\"view\":{\"id\":\"1178\"}},\"id\":\"1177\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"q\"],\"x\":[-0.2],\"y\":[0.4]},\"selected\":{\"id\":\"2193\"},\"selection_policy\":{\"id\":\"2192\"}},\"id\":\"1173\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1610\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1167\"}},\"id\":\"1172\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1227\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2104\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":60},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1228\",\"type\":\"Arrow\"},{\"attributes\":{\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1174\",\"type\":\"Text\"},{\"attributes\":{\"source\":{\"id\":\"1173\"}},\"id\":\"1178\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1669\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1195\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1197\"},\"nonselection_glyph\":{\"id\":\"1196\"},\"view\":{\"id\":\"1199\"}},\"id\":\"1198\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2336\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1175\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1667\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"blue\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1176\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1224\"},\"group\":null,\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2103\"},\"start\":null,\"x_end\":{\"value\":60},\"x_start\":{\"value\":70},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1225\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1668\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1182\"},\"glyph\":{\"id\":\"1183\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1185\"},\"nonselection_glyph\":{\"id\":\"1184\"},\"view\":{\"id\":\"1187\"}},\"id\":\"1186\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1666\"}},\"id\":\"1671\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"P\"],\"x\":[6.5],\"y\":[0.1]},\"selected\":{\"id\":\"2195\"},\"selection_policy\":{\"id\":\"2194\"}},\"id\":\"1182\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1219\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1221\"},\"nonselection_glyph\":{\"id\":\"1220\"},\"view\":{\"id\":\"1223\"}},\"id\":\"1222\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1666\"},\"glyph\":{\"id\":\"1667\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1669\"},\"nonselection_glyph\":{\"id\":\"1668\"},\"view\":{\"id\":\"1671\"}},\"id\":\"1670\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1182\"}},\"id\":\"1187\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Total stress \\u03c4\"},\"id\":\"1621\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1007\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1184\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2118\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1185\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2052\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1005\"},\"glyph\":{\"id\":\"1213\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1215\"},\"nonselection_glyph\":{\"id\":\"1214\"},\"view\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1604\"},{\"id\":\"1605\"},{\"id\":\"1606\"},{\"id\":\"1607\"},{\"id\":\"1608\"},{\"id\":\"1609\"},{\"id\":\"1611\"}]},\"id\":\"1612\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2119\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1280\"},{\"id\":\"1281\"},{\"id\":\"1282\"},{\"id\":\"1283\"},{\"id\":\"1284\"},{\"id\":\"1285\"},{\"id\":\"1287\"}]},\"id\":\"1288\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1631\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2121\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1196\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.5},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1195\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2122\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"blue\",\"hatch_alpha\":0.1,\"hatch_color\":\"navy\",\"line_alpha\":0.1,\"line_color\":\"navy\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1007\"}},\"id\":\"1199\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"1630\"}],\"center\":[{\"id\":\"1633\"},{\"id\":\"1637\"}],\"height\":200,\"renderers\":[{\"id\":\"1730\"},{\"id\":\"1736\"},{\"id\":\"1742\"}],\"right\":[{\"id\":\"1634\"}],\"title\":{\"id\":\"1621\"},\"toolbar\":{\"id\":\"1646\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1623\"},\"x_scale\":{\"id\":\"1626\"},\"y_range\":{\"id\":\"1556\"},\"y_scale\":{\"id\":\"1628\"}},\"id\":\"1620\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"magenta\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"magenta\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"magenta\"},\"size\":{\"value\":10},\"x\":{\"field\":\"xF\"},\"y\":{\"field\":\"y\"}},\"id\":\"1197\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1206\"}},\"id\":\"1211\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1628\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1202\",\"type\":\"Line\"},{\"attributes\":{\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1201\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2158\"},\"selection_policy\":{\"id\":\"2157\"}},\"id\":\"1206\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2213\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1635\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1203\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1626\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"blue\",\"hatch_alpha\":0.3,\"hatch_color\":\"navy\",\"line_alpha\":0.3,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1219\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1638\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1207\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2214\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1217\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1630\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1633\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1208\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2277\"},\"group\":null,\"major_label_policy\":{\"id\":\"2278\"},\"ticker\":{\"id\":\"1631\"}},\"id\":\"1630\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1209\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1206\"},\"glyph\":{\"id\":\"1207\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1209\"},\"nonselection_glyph\":{\"id\":\"1208\"},\"view\":{\"id\":\"1211\"}},\"id\":\"1210\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1005\"}},\"id\":\"1223\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1645\",\"type\":\"HoverTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1227\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2274\"},\"group\":null,\"major_label_policy\":{\"id\":\"2275\"},\"ticker\":{\"id\":\"1635\"}},\"id\":\"1634\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"blue\",\"hatch_alpha\":0.2,\"hatch_color\":\"navy\",\"line_alpha\":0.2,\"line_color\":\"navy\",\"x\":{\"field\":\"x_fade\"},\"y\":{\"field\":\"y\"}},\"id\":\"1221\",\"type\":\"Patch\"},{\"attributes\":{\"axis\":{\"id\":\"1634\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1637\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2223\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1777\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2127\"},\"group\":null,\"major_label_policy\":{\"id\":\"2128\"},\"ticker\":{\"id\":\"1305\"},\"visible\":false},\"id\":\"1304\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2224\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1779\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1791\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2020\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2033\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2324\"},\"selection_policy\":{\"id\":\"2323\"}},\"id\":\"1776\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0.14619883040935672,0],\"y\":[0,0.0,4.081632653061225,8.16326530612245,12.244897959183675,16.3265306122449,20.408163265306122,24.48979591836735,28.571428571428573,32.6530612244898,36.734693877551024,40.816326530612244,44.89795918367347,48.9795918367347,53.06122448979592,57.142857142857146,61.224489795918366,65.3061224489796,69.38775510204081,73.46938775510205,77.55102040816327,81.63265306122449,85.71428571428572,89.79591836734694,93.87755102040816,97.9591836734694,102.04081632653062,106.12244897959184,110.20408163265306,114.28571428571429,118.36734693877551,122.44897959183673,126.53061224489797,130.6122448979592,134.69387755102042,138.77551020408163,142.85714285714286,146.9387755102041,151.0204081632653,155.10204081632654,159.18367346938777,163.26530612244898,167.3469387755102,171.42857142857144,175.51020408163265,179.59183673469389,183.67346938775512,187.75510204081633,191.83673469387756,195.9183673469388,200.0,200]},\"selected\":{\"id\":\"2355\"},\"selection_policy\":{\"id\":\"2354\"}},\"id\":\"2037\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2040\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2031\"},\"glyph\":{\"id\":\"2032\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2034\"},\"nonselection_glyph\":{\"id\":\"2033\"},\"view\":{\"id\":\"2036\"}},\"id\":\"2035\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2034\",\"type\":\"Text\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Shear force\",\"@y kN\"]]},\"id\":\"1319\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1787\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1300\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1778\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1795\"}],\"center\":[{\"id\":\"1798\"},{\"id\":\"1802\"},{\"id\":\"1863\"}],\"height\":200,\"left\":[{\"id\":\"1799\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1854\"},{\"id\":\"1873\"},{\"id\":\"1879\"},{\"id\":\"1885\"},{\"id\":\"1891\"}],\"title\":{\"id\":\"1785\"},\"toolbar\":{\"id\":\"1810\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1787\"},\"x_scale\":{\"id\":\"1791\"},\"y_range\":{\"id\":\"1789\"},\"y_scale\":{\"id\":\"1793\"}},\"id\":\"1784\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1776\"}},\"id\":\"1781\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2038\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1304\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1307\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1789\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"2031\"}},\"id\":\"2036\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1305\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"2044\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2046\"},\"nonselection_glyph\":{\"id\":\"2045\"},\"view\":{\"id\":\"2048\"}},\"id\":\"2047\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2223\"},\"group\":null,\"major_label_policy\":{\"id\":\"2224\"},\"ticker\":{\"id\":\"1796\"},\"visible\":false},\"id\":\"1795\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2037\"},\"glyph\":{\"id\":\"2038\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2040\"},\"nonselection_glyph\":{\"id\":\"2039\"},\"view\":{\"id\":\"2042\"}},\"id\":\"2041\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2190\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2308\"},\"selection_policy\":{\"id\":\"2307\"}},\"id\":\"2225\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2045\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Shear force V [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2124\"},\"group\":null,\"major_label_policy\":{\"id\":\"2125\"},\"ticker\":{\"id\":\"1309\"}},\"id\":\"1308\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2220\"},\"group\":null,\"major_label_policy\":{\"id\":\"2221\"},\"ticker\":{\"id\":\"1800\"},\"visible\":false},\"id\":\"1799\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"2037\"}},\"id\":\"2042\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1308\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1311\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2191\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2039\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":0.3141592653589793},\"text_color\":{\"value\":\"purple\"},\"text_font_size\":{\"value\":\"10px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2056\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1804\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1795\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1798\",\"type\":\"Grid\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2044\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2280\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N and M at position x\"},\"id\":\"1785\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1317\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1796\",\"type\":\"BasicTicker\"},{\"attributes\":{\"angle\":{\"value\":0.3141592653589793},\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"purple\"},\"text_font_size\":{\"value\":\"10px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2057\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1312\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1799\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1802\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1318\"}},\"id\":\"1314\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2046\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1315\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1793\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2255\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"1828\"}],\"center\":[{\"id\":\"1831\"},{\"id\":\"1835\"},{\"id\":\"1866\"}],\"height\":200,\"left\":[{\"id\":\"1832\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1860\"},{\"id\":\"1897\"},{\"id\":\"2023\"},{\"id\":\"2029\"},{\"id\":\"2035\"}],\"title\":{\"id\":\"1818\"},\"toolbar\":{\"id\":\"1843\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1820\"},\"x_scale\":{\"id\":\"1824\"},\"y_range\":{\"id\":\"1822\"},\"y_scale\":{\"id\":\"1826\"}},\"id\":\"1817\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1316\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"2048\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1332\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2050\",\"type\":\"Line\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1676\"},\"N_stress_diag\":{\"id\":\"1658\"},\"T_stress_diag\":{\"id\":\"2041\"},\"V_stress_diag\":{\"id\":\"1694\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div\":{\"id\":\"1107\"},\"div_P\":{\"id\":\"1259\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_b\":{\"id\":\"1003\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const b = cb_obj.value // value of the slider\\n const h = db['h'][0]\\n const t = db['t'][0]\\n const A = compute_area(b, h, t)\\n const Iy = compute_inertia_y(b, h, t)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // Easter egg\\n const str_Doge = \\\" such width\\\"\\n const str_tmp = div_P.text\\n if (b == 300) {\\n div_P.text = str_tmp+str_Doge\\n } else {\\n div_P.text = str_tmp.replace(str_Doge, '')\\n }\\n\\n // apply the changes\\n db['b'][0] = b\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h, t)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_torsional_stress(db, T_stress_diag)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const t = Math.round(data['t'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n t = `+t+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n const src = glyph_section.data_source\\n const t = data['t'][0]\\n const b = data['b'][0]\\n const h = data['h'][0]\\n src.data.xs = [[[ [b/2, b/2, -b/2, -b/2], [b/2-t, b/2-t, -b/2+t, -b/2+t] ]]]\\n src.data.ys = [[[ [h/2, -h/2, -h/2, h/2], [h/2-t, -h/2+t, -h/2+t, h/2-t] ]]]\\n src.change.emit()\\n }\\n \\n \\n function compute_area(b, h, t) {\\n return b*h - (b-t*2)*(h-2*t)\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12 - (b-2*t)*(h-2*t)**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h, t) {\\n return h*b**3/12 - (h-2*t)*(b-2*t)**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2062\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2256\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2319\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2357\"},\"selection_policy\":{\"id\":\"2356\"}},\"id\":\"2049\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2337\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1318\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1808\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2049\"},\"glyph\":{\"id\":\"2050\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2052\"},\"nonselection_glyph\":{\"id\":\"2051\"},\"view\":{\"id\":\"2054\"}},\"id\":\"2053\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1803\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2258\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"angle\":{\"value\":0.3141592653589793},\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"purple\"},\"text_font_size\":{\"value\":\"10px\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2058\",\"type\":\"Text\"},{\"attributes\":{\"overlay\":{\"id\":\"1809\"}},\"id\":\"1805\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1806\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2051\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[2],\"y\":[-4]},\"selected\":{\"id\":\"2208\"},\"selection_policy\":{\"id\":\"2207\"}},\"id\":\"2055\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1807\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2259\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1391\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1393\"},\"nonselection_glyph\":{\"id\":\"1392\"},\"view\":{\"id\":\"1395\"}},\"id\":\"1394\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"2049\"}},\"id\":\"2054\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2192\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1809\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1384\"},\"glyph\":{\"id\":\"1385\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1387\"},\"nonselection_glyph\":{\"id\":\"1386\"},\"view\":{\"id\":\"1389\"}},\"id\":\"1388\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"2055\"}},\"id\":\"2060\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2281\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2055\"},\"glyph\":{\"id\":\"2056\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2058\"},\"nonselection_glyph\":{\"id\":\"2057\"},\"view\":{\"id\":\"2060\"}},\"id\":\"2059\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2193\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.06060606060606061,0.12121212121212122,0.18181818181818182,0.24242424242424243,0.30303030303030304,0.36363636363636365,0.42424242424242425,0.48484848484848486,0.5454545454545454,0.6060606060606061,0.6666666666666667,0.7272727272727273,0.7878787878787878,0.8484848484848485,0.9090909090909092,0.9696969696969697,1.0303030303030303,1.0909090909090908,1.1515151515151516,1.2121212121212122,1.2727272727272727,1.3333333333333335,1.393939393939394,1.4545454545454546,1.5151515151515151,1.5757575757575757,1.6363636363636365,1.696969696969697,1.7575757575757576,1.8181818181818183,1.878787878787879,1.9393939393939394,2.0,2.0606060606060606,2.121212121212121,2.1818181818181817,2.2424242424242427,2.303030303030303,2.3636363636363638,2.4242424242424243,2.484848484848485,2.5454545454545454,2.606060606060606,2.666666666666667,2.7272727272727275,2.787878787878788,2.8484848484848486,2.909090909090909,2.9696969696969697,3.0303030303030303,3.090909090909091,3.1515151515151514,3.2121212121212124,3.272727272727273,3.3333333333333335,3.393939393939394,3.4545454545454546,3.515151515151515,3.5757575757575757,3.6363636363636367,3.6969696969696972,3.757575757575758,3.8181818181818183,3.878787878787879,3.9393939393939394,4.0,4.0606060606060606,4.121212121212121,4.181818181818182,4.242424242424242,4.303030303030303,4.363636363636363,4.424242424242425,4.484848484848485,4.545454545454546,4.606060606060606,4.666666666666667,4.7272727272727275,4.787878787878788,4.848484848484849,4.909090909090909,4.96969696969697,5.03030303030303,5.090909090909091,5.151515151515151,5.212121212121212,5.2727272727272725,5.333333333333334,5.3939393939393945,5.454545454545455,5.515151515151516,5.575757575757576,5.636363636363637,5.696969696969697,5.757575757575758,5.818181818181818,5.878787878787879,5.9393939393939394,6.0,6],\"y\":[0,-0.0,-0.7199265381083563,-1.4251606978879707,-2.115702479338843,-2.7915518824609737,-3.452708907254362,-4.099173553719009,-4.730945821854913,-5.348025711662076,-5.950413223140496,-6.5381083562901745,-7.111111111111112,-7.669421487603306,-8.213039485766759,-8.74196510560147,-9.25619834710744,-9.755739210284665,-10.240587695133149,-10.710743801652892,-11.166207529843895,-11.606978879706153,-12.03305785123967,-12.444444444444445,-12.841138659320476,-13.223140495867767,-13.590449954086317,-13.943067033976122,-14.28099173553719,-14.604224058769512,-14.912764003673093,-15.206611570247935,-15.485766758494032,-15.750229568411386,-16.0,-16.235078053259873,-16.455463728191,-16.661157024793386,-16.852157943067034,-17.02846648301194,-17.1900826446281,-17.33700642791552,-17.469237832874196,-17.58677685950413,-17.689623507805326,-17.77777777777778,-17.85123966942149,-17.910009182736456,-17.95408631772268,-17.983471074380166,-17.99816345270891,-17.99816345270891,-17.983471074380166,-17.95408631772268,-17.910009182736456,-17.85123966942149,-17.77777777777778,-17.689623507805326,-17.58677685950413,-17.469237832874196,-17.33700642791552,-17.1900826446281,-17.028466483011936,-16.852157943067034,-16.661157024793386,-16.455463728191,-16.235078053259873,-16.0,-15.750229568411386,-15.485766758494032,-15.206611570247935,-14.912764003673095,-14.604224058769514,-14.280991735537192,-13.943067033976122,-13.590449954086315,-13.223140495867765,-12.841138659320475,-12.444444444444443,-12.033057851239668,-11.606978879706151,-11.166207529843893,-10.710743801652892,-10.240587695133149,-9.755739210284665,-9.25619834710744,-8.741965105601471,-8.21303948576676,-7.669421487603308,-7.111111111111105,-6.538108356290169,-5.950413223140491,-5.348025711662071,-4.730945821854909,-4.099173553719005,-3.452708907254359,-2.791551882460971,-2.1157024793388413,-1.4251606978879694,-0.7199265381083556,0.0,0]},\"selected\":{\"id\":\"2214\"},\"selection_policy\":{\"id\":\"2213\"}},\"id\":\"1384\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1676\"},\"N_stress_diag\":{\"id\":\"1658\"},\"T_stress_diag\":{\"id\":\"2041\"},\"V_stress_diag\":{\"id\":\"1694\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div_P\":{\"id\":\"1259\"},\"div_T\":{\"id\":\"1899\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_T_section\":{\"id\":\"2035\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_T_head\":{\"id\":\"2029\"},\"section_T_line\":{\"id\":\"2023\"},\"section_T_source\":{\"id\":\"2018\"},\"section_V\":{\"id\":\"1866\"},\"section_torsion_head\":{\"id\":\"1997\"},\"section_torsion_source\":{\"id\":\"1986\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const FBD = db['FBD'][0]\\n const pos = cb_obj.value\\n const q = db['q'][0]\\n const L = db['L'][0]\\n const Mt = db['Mt'][0]\\n\\n // update data\\n db['N'][0] = compute_N(db['P'][0])\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['T'][0] = compute_T(pos, Mt, L)\\n db['x'][0] = pos\\n\\n // check state\\n check_state(db)\\n\\n // update:\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n update_T_section(db, section_torsion_head, section_torsion_source, section_T_line, section_T_head, section_T_source, div_T, label_T_section)\\n update_torsional_stress(db, T_stress_diag)\\n\\n // apply the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n // declare functions\\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function update_T_section(data, head_T_curved, source_T_curved, line_T, head_T, source_T, div_T, label_T_section, offset_T=4, pixel2unit=10, scale_T=10) {\\n const Mt = data['Mt'][0]\\n const T = data['T'][0]\\n \\n if (T > 0) {\\n update_doubleArrow(offset_T, offset_T+T/scale_T, 0, 0, source_T, head_T)\\n } else {\\n update_doubleArrow(offset_T-T/scale_T, offset_T, 0, 0, source_T, head_T)\\n }\\n \\n // update visibility\\n if (Mt==0) {\\n div_T.text = \\\"Torsion M<sub>t</sub>=0 kNm (removed)\\\"\\n line_T.glyph.line_alpha = 0 // T\\n head_T.glyph.line_alpha = 0\\n head_T.glyph.fill_alpha = 0\\n // T in cross-section\\n update_curvedArrow(0, 0, 0, 0, 0, source_T_curved, head_T_curved)\\n } else {\\n div_T.text = \\\"Torsion M<sub>t</sub>=\\\"+Mt+\\\" kNm (applied)\\\"\\n line_T.glyph.line_alpha = 1 // T\\n head_T.glyph.line_alpha = 1\\n head_T.glyph.fill_alpha = 1\\n // T in cross-section\\n update_curvedArrow(0, T*4/scale_T, Math.abs(T*3/scale_T), 0, 0, source_T_curved, head_T_curved)\\n }\\n \\n if (T==0) {\\n label_T_section.glyph.text=''\\n } else {\\n label_T_section.glyph.text='T'\\n }\\n }\\n \\n \\n function update_doubleArrow(x_start, x_end, y_start, y_end, source, arr_heads, AHF=6, pixel2unit=10) {\\n // compute the angle of the line\\n const delta_x = x_end-x_start\\n const delta_y = y_end-y_start\\n if (delta_x==0) {\\n if (delta_y > 0) {\\n var theta = Math.PI/2\\n } else {\\n var theta = Math.PI*3/2\\n }\\n } else if (delta_x > 0) {\\n var theta = Math.atan(delta_y/delta_x)\\n } else {\\n var theta = Math.atan(delta_y/delta_x)+Math.PI\\n }\\n \\n // head adjust\\n const length_arr = Math.sqrt(delta_x**2 + delta_y**2)\\n const size_head = arrow_growth(length_arr)*AHF\\n const head_x = size_head/pixel2unit*Math.cos(theta)\\n const head_y = size_head/pixel2unit*Math.sin(theta)\\n \\n // update line\\n const data_line = source.data\\n data_line['x'] = [x_start, x_end]\\n data_line['y'] = [y_start, y_end]\\n source.change.emit()\\n \\n // heads\\n arr_heads.glyph.size = size_head\\n arr_heads.glyph.angle = theta+Math.PI/6\\n //arr_heads.glyph.x = [x_end-head_x/2, x_end-head_x/2*3]\\n //arr_heads.glyph.y = [y_end-head_y/2, y_end-head_y/2*3]\\n const source_h = arr_heads.data_source\\n source_h.data['x'] = [x_end-head_x/2, x_end-head_x/2*3]\\n source_h.data['y'] = [y_end-head_y/2, y_end-head_y/2*3]\\n source_h.change.emit()\\n }\\n \\n \\n function compute_T(x, Mt, L) {\\n if (x<L/2) {\\n return Mt/2\\n } else {\\n return -Mt/2\\n }\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2061\",\"type\":\"CustomJS\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2282\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1852\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2338\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1853\",\"type\":\"Line\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2348\"},\"selection_policy\":{\"id\":\"2347\"}},\"id\":\"2260\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"args\":{\"EE1\":{\"id\":\"2059\"},\"M_stress_diag\":{\"id\":\"1676\"},\"N_stress_diag\":{\"id\":\"1658\"},\"T_stress_diag\":{\"id\":\"2041\"},\"V_stress_diag\":{\"id\":\"1694\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div\":{\"id\":\"1107\"},\"div_T\":{\"id\":\"1899\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_b\":{\"id\":\"1003\"},\"s_ss\":{\"id\":\"1006\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"support_r\":{\"id\":\"1099\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const data_ss = s_ss.data\\n const b = db['b'][0]\\n const t = db['t'][0]\\n const h = cb_obj.value // value of the slider\\n const A = compute_area(b, h, t)\\n const Iy = compute_inertia_y(b, h, t)\\n const N = db['N'][0]\\n const M = db['M'][0]\\n const yG = compute_centroid_y(h)\\n\\n // Easter egg\\n /*const str_Doge = \\\" much wow\\\"\\n const str_tmp = div_T.text\\n if (h == 600) {\\n div_T.text = str_tmp+str_Doge\\n } else {\\n div_T.text = str_tmp.replace(str_Doge, '')\\n }*/\\n if (h == 600) {\\n EE1.glyph.text = \\\"much wow\\\"\\n } else {\\n EE1.glyph.text = \\\"\\\"\\n }\\n\\n // apply the changes\\n db['h'][0] = h\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h, t)\\n db['yG'][0] = yG\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n data_ss['y'][1] = h // change the height of the section in the diagrams\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_torsional_stress(db, T_stress_diag)\\n\\n // emit the changes\\n source.change.emit()\\n s_ss.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const t = Math.round(data['t'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n t = `+t+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n const src = glyph_section.data_source\\n const t = data['t'][0]\\n const b = data['b'][0]\\n const h = data['h'][0]\\n src.data.xs = [[[ [b/2, b/2, -b/2, -b/2], [b/2-t, b/2-t, -b/2+t, -b/2+t] ]]]\\n src.data.ys = [[[ [h/2, -h/2, -h/2, h/2], [h/2-t, -h/2+t, -h/2+t, h/2-t] ]]]\\n src.change.emit()\\n }\\n \\n \\n function compute_area(b, h, t) {\\n return b*h - (b-t*2)*(h-2*t)\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12 - (b-2*t)*(h-2*t)**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h, t) {\\n return h*b**3/12 - (h-2*t)*(b-2*t)**3/12\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2063\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2339\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"N_diag\":{\"id\":\"1364\"},\"N_stress_diag\":{\"id\":\"1658\"},\"arr_head\":{\"id\":\"1253\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_M\":{\"id\":\"1242\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox P\\n if (f.length==0) f = [1]\\n const db = source.data\\n\\n // apply the changes\\n db['P'][0] = 10*(1-f)\\n db['N'][0] = compute_N(db['P'][0])\\n db['Rx'][0] = compute_Rx(db['P'][0])\\n\\n // update\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_N_diagram(db, N_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function compute_Rx(P) {\\n return P\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_N(P) {\\n return -P\\n }\\n \\n \\n function update_N_diagram(data, glyph, discr=100) {\\n const P = data['P'][0]\\n const N_discr = Array.from({length: discr}, (_, i) => compute_N(P))\\n update_NVM_diagram(glyph, N_discr)\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \"},\"id\":\"2064\",\"type\":\"CustomJS\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2297\"},\"selection_policy\":{\"id\":\"2296\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2227\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"args\":{\"arr_head\":{\"id\":\"1253\"},\"div_P\":{\"id\":\"1259\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_sb\":{\"id\":\"1004\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const FBD = cb_obj.active\\n const data_sb = s_sb.data\\n const data_q = s_q.data\\n const pos = db['x'][0]\\n\\n // apply the changes\\n db['FBD'][0] = FBD\\n\\n // update\\n check_state(db)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_scheme_position(db, data_sb, data_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n\\n // emit the changes\\n source.change.emit()\\n s_sb.change.emit()\\n s_q.change.emit()\\n\\n \\n function check_state(data) {\\n const FBD = data['FBD'][0]\\n const pos = data['x'][0]\\n const L = data['L'][0]\\n if (FBD == 0 && pos != L) {\\n data['state'][0] = 'R_SEC'\\n } else if (FBD == 1 && pos != 0) {\\n data['state'][0] = 'L_SEC'\\n } else {\\n data['state'][0] = 'IDLE'\\n }\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_scheme_position(data, data_scheme_beam, data_scheme_q) {\\n const L = data['L'][0]*data['SCALE'][0]\\n const pos = data['x'][0]*data['SCALE'][0]\\n \\n // move position of the point\\n data['xF'][0] = pos\\n \\n switch(data['state'][0]) {\\n case 'IDLE':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = L\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = L\\n data_scheme_q['x'][3] = L\\n break\\n case 'R_SEC':\\n // beam\\n data_scheme_beam['x'][0] = 0\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = 0\\n data_scheme_q['x'][1] = 0\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n case 'L_SEC':\\n // beam\\n data_scheme_beam['x'][0] = L\\n data_scheme_beam['x'][1] = pos\\n // unif load\\n data_scheme_q['x'][0] = L\\n data_scheme_q['x'][1] = L\\n data_scheme_q['x'][2] = pos\\n data_scheme_q['x'][3] = pos\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \"},\"id\":\"2065\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2296\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1855\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2228\",\"type\":\"AllLabels\"},{\"attributes\":{\"args\":{\"M_diag\":{\"id\":\"1388\"},\"M_stress_diag\":{\"id\":\"1676\"},\"V_diag\":{\"id\":\"1376\"},\"V_stress_diag\":{\"id\":\"1694\"},\"arr_head\":{\"id\":\"1253\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div_P\":{\"id\":\"1259\"},\"div_f\":{\"id\":\"1261\"},\"fN\":{\"id\":\"1237\"},\"fP\":{\"id\":\"1225\"},\"fRx\":{\"id\":\"1234\"},\"fRyl\":{\"id\":\"1231\"},\"fRyr\":{\"id\":\"1228\"},\"fV\":{\"id\":\"1240\"},\"label_M_section\":{\"id\":\"1891\"},\"label_N_section\":{\"id\":\"1885\"},\"label_V_section\":{\"id\":\"1897\"},\"neutral_axis\":{\"id\":\"1724\"},\"s_M\":{\"id\":\"1242\"},\"s_q\":{\"id\":\"1005\"},\"s_section_M\":{\"id\":\"1868\"},\"section_M_head\":{\"id\":\"1879\"},\"section_N\":{\"id\":\"1863\"},\"section_V\":{\"id\":\"1866\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data\\n const db = source.data\\n const q = cb_obj.value\\n const pos = db['x'][0]\\n const L = db['L'][0]\\n\\n // update q\\n db['q'][0] = q\\n db['V'][0] = compute_V(pos, q, L)\\n db['M'][0] = compute_M(pos, q, L)\\n db['Ry_l'][0] = compute_Ry_l(q, L)\\n db['Ry_r'][0] = compute_Ry_r(q, L)\\n\\n // update\\n update_u_load(db, s_q)\\n update_reactions(db, fRx, fRyl, fRyr)\\n update_external_forces(db, fP, div_P)\\n update_V_diagram(db, V_diag)\\n update_M_diagram(db, M_diag)\\n update_internal_forces(db, fN, fV, arr_head, s_M)\\n update_div_forces(db, div_f)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_NVM_section(db, section_N, section_V, section_M_head, s_section_M, label_N_section, label_V_section, label_M_section)\\n\\n // apply changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function parabola(x, a1, a2, a3) {\\n return Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a2 * x[i] + a1);\\n }\\n \\n \\n function arrow_alpha(straight_arrow, alpha=1) {\\n straight_arrow.end.line_alpha = alpha\\n straight_arrow.end.fill_alpha = alpha\\n straight_arrow.line_alpha = alpha\\n }\\n \\n \\n function update_arrow(straight_arrow, intensity, x_start=0, x_end=0, y_start=0, y_end=0, AHF=7) {\\n straight_arrow.end.size = arrow_growth(intensity)*AHF\\n straight_arrow.x_start = x_start\\n straight_arrow.x_end = x_end\\n straight_arrow.y_start = y_start\\n straight_arrow.y_end = y_end\\n straight_arrow.line_width = arrow_growth(intensity)\\n }\\n \\n \\n function compute_V(x, q, L) {\\n return q*x-q*L/2\\n }\\n \\n \\n function compute_M(x, q, L) {\\n return q*x/2*(x-L)\\n }\\n \\n \\n function compute_Ry_l(q, L) {\\n return q*L/2\\n }\\n \\n \\n function compute_Ry_r(q, L) {\\n return q*L/2\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_V_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const V_discr = Array.from({length: discr}, (_, i) => compute_V(x[i], q, L))\\n update_NVM_diagram(glyph, V_discr)\\n }\\n \\n \\n function update_M_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const q = data['q'][0]\\n const x = linspace(0, L, 100)\\n const M_discr = Array.from({length: discr}, (_, i) => compute_M(x[i], q, L))\\n update_NVM_diagram(glyph, M_discr)\\n }\\n \\n \\n function update_reactions(data, glyph_Rx, glyph_Ry_l, glyph_Ry_r, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n const Ry_l = data['Ry_l'][0]\\n const Ry_r = data['Ry_r'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_Rx) // Rx\\n arrow_alpha(glyph_Ry_l) // Ry left\\n arrow_alpha(glyph_Ry_r) // Ry right\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_Rx, 1) // Rx\\n arrow_alpha(glyph_Ry_l, 1) // Ry left\\n arrow_alpha(glyph_Ry_r, alpha) // Ry right\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_Rx, alpha) //Rx\\n arrow_alpha(glyph_Ry_l, alpha) //Ry left\\n arrow_alpha(glyph_Ry_r, 1) // Ry right\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n update_arrow(glyph_Rx, -P, -P, 0, 0, 0) // Rx\\n update_arrow(glyph_Ry_r, Ry_r, L, L, -Ry_r, 0) // Ry right\\n update_arrow(glyph_Ry_l, Ry_l, 0, 0, -Ry_l, 0) // Ry left\\n }\\n \\n \\n function update_external_forces(data, glyph_P, div_P, alpha=0.3) {\\n const P = data['P'][0]\\n const L = data['L'][0]*data['SCALE'][0]\\n \\n // update visibility\\n switch(data['state'][0]) {\\n case 'IDLE':\\n arrow_alpha(glyph_P) // P\\n break\\n case 'R_SEC':\\n arrow_alpha(glyph_P, alpha) // P\\n break\\n case 'L_SEC':\\n arrow_alpha(glyph_P, 1) //P\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n \\n // update size\\n if (P==0) {\\n div_P.text = \\\"Axial force P=0 kN (removed)\\\"\\n update_arrow(glyph_P) // P\\n } else {\\n div_P.text = \\\"Axial force P=\\\"+P+\\\" kN (applied)\\\"\\n update_arrow(glyph_P, P, L+P, L, 0, 0) // P\\n }\\n }\\n \\n \\n function update_u_load(data, source_q, OFFSET_Q=4) {\\n const q = data['q'][0]\\n source_q.data['y'][1] = OFFSET_Q+q\\n source_q.data['y'][2] = OFFSET_Q+q\\n source_q.change.emit()\\n }\\n \\n \\n function update_internal_forces(data, glyph_N, glyph_V, glyph_M_head, source_M, lambda=0.25, offset_N=1.5, offset_V=1) {\\n const pos = data['x'][0]\\n const SCALE = data['SCALE'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n switch(data['state'][0]) {\\n case 'IDLE':\\n // internal forces\\n update_arrow(glyph_N)\\n update_arrow(glyph_V)\\n update_curvedArrow(0, 0, 0, 0, 0, source_M, glyph_M_head)\\n break;\\n case 'R_SEC':\\n // internal forces\\n update_arrow(glyph_N, -N, pos*SCALE-N+offset_N, pos*SCALE+offset_N, 0, 0)\\n update_arrow(glyph_V, -V, pos*SCALE+offset_V, pos*SCALE+offset_V, -V/2, V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n case 'L_SEC':\\n // internal forces\\n update_arrow(glyph_N, N, pos*SCALE+N-offset_N, pos*SCALE-offset_N, 0, 0)\\n update_arrow(glyph_V, V, pos*SCALE-offset_V, pos*SCALE-offset_V, V/2, -V/2)\\n var b = -6\\n var c = -M/2*0.8\\n var a = b+lambda*c\\n update_curvedArrow(a, b, c, pos*SCALE, 0, source_M, glyph_M_head)\\n break;\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n }\\n \\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_centroid_y(h) {\\n return h/2\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_div_forces(data, div) {\\n switch(data['state'][0]) {\\n case 'IDLE':\\n var str_sec = \\\"No cross section analysed.\\\"\\n break\\n case 'R_SEC':\\n case 'L_SEC':\\n var str_sec = \\\"Cross section at \\\"+Math.round(data['x'][0]*10)/10+\\\" m.\\\"\\n break\\n default:\\n console.error(\\\"State \\\"+data['state'][0]+\\\" in state machine not implemented\\\")\\n }\\n const P = data['P'][0]\\n const Rx = data['Rx'][0]\\n const Ry_l = Math.round(data['Ry_l'][0]*10)/10\\n const Ry_r = Math.round(data['Ry_r'][0]*10)/10\\n const N = Math.abs(data['N'][0])\\n const V = Math.round(Math.abs(data['V'][0])*10)/10\\n const M = Math.round(data['M'][0]*10)/10\\n \\n div.text = `\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = `+P+` kN<br>\\n Rx = `+Rx+` kN<br>\\n Ry (left) = `+Ry_r+` kN<br>\\n Ry (right) = `+Ry_l+` kN<br>\\n `+str_sec+`<br>\\n N = `+N+` kN<br>\\n V = `+V+` kN<br>\\n M = `+M+` kNm\\n \\n ` \\n }\\n \\n \\n function update_NVM_section(data, glyph_N, glyph_V, glyph_M_head, source_M, label_N_section, label_V_section, label_M_section, lambda=0.25, offset_N=1.5, offset_V=2) {\\n const x = 0\\n const y = 0\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const M = data['M'][0]\\n \\n update_arrow(glyph_N, -N, x-N+offset_N, x+offset_N, y, y)\\n update_arrow(glyph_V, -V, x+offset_V, x+offset_V, y-V/2, y+V/2)\\n var b = 6\\n var c = -M/2*0.8\\n var a = b-lambda*c\\n update_curvedArrow(a, b, c, x, y, source_M, glyph_M_head)\\n \\n if (N==0) {\\n label_N_section.glyph.text=''\\n } else {\\n label_N_section.glyph.text='N'\\n }\\n \\n if (V==0) {\\n label_V_section.glyph.text=''\\n } else {\\n label_V_section.glyph.text='V'\\n }\\n \\n if (M==0) {\\n label_M_section.glyph.text=''\\n } else {\\n label_M_section.glyph.text='M'\\n }\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \"},\"id\":\"2066\",\"type\":\"CustomJS\"},{\"attributes\":{\"tools\":[{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1315\"},{\"id\":\"1316\"},{\"id\":\"1317\"},{\"id\":\"1319\"}]},\"id\":\"1320\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2297\",\"type\":\"Selection\"},{\"attributes\":{\"args\":{\"T_diag\":{\"id\":\"1938\"},\"T_stress_diag\":{\"id\":\"2041\"},\"div_T\":{\"id\":\"1899\"},\"label_T_section\":{\"id\":\"2035\"},\"neutral_axis\":{\"id\":\"1724\"},\"section_T_head\":{\"id\":\"2029\"},\"section_T_line\":{\"id\":\"2023\"},\"section_T_source\":{\"id\":\"2018\"},\"section_torsion_head\":{\"id\":\"1997\"},\"section_torsion_source\":{\"id\":\"1986\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve var from the object that uses callback\\n var f = cb_obj.active // checkbox Mt\\n if (f.length==0) f = [1]\\n const db = source.data\\n const L = db['L'][0]\\n const x = db['x'][0]\\n\\n // apply the changes\\n db['Mt'][0] = 100*(1-f)\\n db['T'][0] = compute_T(x, db['Mt'][0], L)\\n\\n // update\\n update_torsional_stress(db, T_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n update_T_diagram(db, T_diag)\\n update_T_section(db, section_torsion_head, section_torsion_source, section_T_line, section_T_head, section_T_source, div_T, label_T_section)\\n\\n // emit the changes\\n source.change.emit()\\n\\n // declare functions\\n \\n function update_curvedArrow(a, b, c, pos_x, pos_y, source, arr_head, discr=10, AHF=6) {\\n const data_M = source.data\\n if (c==0) {\\n var a1 = 0\\n var a3 = 0\\n } else {\\n var a1 = b\\n var a3 = (a-b)/c**2\\n }\\n const step = 2*c / (discr-1);\\n const x = Array.from({length: discr}, (_, i) => -c + step * i);\\n const y = Array.from({length: x.length}, (_, i) => a3 * x[i]**2 + a1)\\n var theta = -Math.atan(2/c*(a-b))\\n if (c<0) {\\n theta = theta+Math.PI\\n }\\n data_M['x'] = y.map(y => y+pos_x)\\n data_M['y'] = x.map(x => x+pos_y)\\n \\n arr_head.glyph.size = arrow_growth(2*c)*AHF\\n arr_head.glyph.angle = theta\\n arr_head.glyph.x = y[y.length-1]+pos_x\\n arr_head.glyph.y = x[x.length-1]+pos_y\\n source.change.emit()\\n }\\n \\n \\n function update_doubleArrow(x_start, x_end, y_start, y_end, source, arr_heads, AHF=6, pixel2unit=10) {\\n // compute the angle of the line\\n const delta_x = x_end-x_start\\n const delta_y = y_end-y_start\\n if (delta_x==0) {\\n if (delta_y > 0) {\\n var theta = Math.PI/2\\n } else {\\n var theta = Math.PI*3/2\\n }\\n } else if (delta_x > 0) {\\n var theta = Math.atan(delta_y/delta_x)\\n } else {\\n var theta = Math.atan(delta_y/delta_x)+Math.PI\\n }\\n \\n // head adjust\\n const length_arr = Math.sqrt(delta_x**2 + delta_y**2)\\n const size_head = arrow_growth(length_arr)*AHF\\n const head_x = size_head/pixel2unit*Math.cos(theta)\\n const head_y = size_head/pixel2unit*Math.sin(theta)\\n \\n // update line\\n const data_line = source.data\\n data_line['x'] = [x_start, x_end]\\n data_line['y'] = [y_start, y_end]\\n source.change.emit()\\n \\n // heads\\n arr_heads.glyph.size = size_head\\n arr_heads.glyph.angle = theta+Math.PI/6\\n //arr_heads.glyph.x = [x_end-head_x/2, x_end-head_x/2*3]\\n //arr_heads.glyph.y = [y_end-head_y/2, y_end-head_y/2*3]\\n const source_h = arr_heads.data_source\\n source_h.data['x'] = [x_end-head_x/2, x_end-head_x/2*3]\\n source_h.data['y'] = [y_end-head_y/2, y_end-head_y/2*3]\\n source_h.change.emit()\\n }\\n \\n \\n function arrow_growth(variable) {\\n return Math.log(Math.abs(variable)+1)\\n }\\n \\n \\n function update_T_section(data, head_T_curved, source_T_curved, line_T, head_T, source_T, div_T, label_T_section, offset_T=4, pixel2unit=10, scale_T=10) {\\n const Mt = data['Mt'][0]\\n const T = data['T'][0]\\n \\n if (T > 0) {\\n update_doubleArrow(offset_T, offset_T+T/scale_T, 0, 0, source_T, head_T)\\n } else {\\n update_doubleArrow(offset_T-T/scale_T, offset_T, 0, 0, source_T, head_T)\\n }\\n \\n // update visibility\\n if (Mt==0) {\\n div_T.text = \\\"Torsion M<sub>t</sub>=0 kNm (removed)\\\"\\n line_T.glyph.line_alpha = 0 // T\\n head_T.glyph.line_alpha = 0\\n head_T.glyph.fill_alpha = 0\\n // T in cross-section\\n update_curvedArrow(0, 0, 0, 0, 0, source_T_curved, head_T_curved)\\n } else {\\n div_T.text = \\\"Torsion M<sub>t</sub>=\\\"+Mt+\\\" kNm (applied)\\\"\\n line_T.glyph.line_alpha = 1 // T\\n head_T.glyph.line_alpha = 1\\n head_T.glyph.fill_alpha = 1\\n // T in cross-section\\n update_curvedArrow(0, T*4/scale_T, Math.abs(T*3/scale_T), 0, 0, source_T_curved, head_T_curved)\\n }\\n \\n if (T==0) {\\n label_T_section.glyph.text=''\\n } else {\\n label_T_section.glyph.text='T'\\n }\\n }\\n \\n \\n function compute_T(x, Mt, L) {\\n if (x<L/2) {\\n return Mt/2\\n } else {\\n return -Mt/2\\n }\\n }\\n \\n \\n function update_T_diagram(data, glyph, discr=100) {\\n const L = data['L'][0]\\n const Mt = data['Mt'][0]\\n const x = linspace(0, L, 100)\\n const T_discr = Array.from({length: discr}, (_, i) => compute_T(x[i], Mt, L))\\n update_NVM_diagram(glyph, T_discr)\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function update_NVM_diagram(diagram, y) {\\n const y_ = [...y]\\n const source = diagram.data_source\\n y_.unshift(0)\\n y_.push(0)\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2067\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2194\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2229\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1837\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Bending moment\",\"@y kNm\"]]},\"id\":\"1351\",\"type\":\"HoverTool\"},{\"attributes\":{\"args\":{\"M_stress_diag\":{\"id\":\"1676\"},\"N_stress_diag\":{\"id\":\"1658\"},\"T_stress_diag\":{\"id\":\"2041\"},\"V_stress_diag\":{\"id\":\"1694\"},\"axial_strain_diag\":{\"id\":\"1748\"},\"bending_strain_diag\":{\"id\":\"1768\"},\"centroid\":{\"id\":\"1688\"},\"div\":{\"id\":\"1107\"},\"neutral_axis\":{\"id\":\"1724\"},\"section\":{\"id\":\"1105\"},\"sigma_stress_diag\":{\"id\":\"1712\"},\"source\":{\"id\":\"1007\"},\"tau_stress_diag\":{\"id\":\"1730\"}},\"code\":\"\\n // retrieve data used\\n const db = source.data\\n const t = cb_obj.value // value of the slider\\n const b = db['b'][0]\\n const h = db['h'][0]\\n const A = compute_area(b, h, t)\\n const Iy = compute_inertia_y(b, h, t)\\n const yG = db['yG'][0]\\n const N = db['N'][0]\\n const M = db['M'][0]\\n\\n // apply the changes\\n db['t'][0] = t\\n db['A'][0] = A\\n db['Iy'][0] = Iy\\n db['Iz'][0] = compute_inertia_z(b, h, t)\\n db['y_n_axis'][0] = compute_neutral_axis(N, A, Iy, M, yG)\\n\\n // update\\n update_div_geo(db, div)\\n update_section(db, section)\\n update_axial_stress_strain(db, N_stress_diag, axial_strain_diag)\\n update_bending_stress_strain(db, M_stress_diag, bending_strain_diag, centroid)\\n update_shear_stress(db, V_stress_diag)\\n update_torsional_stress(db, T_stress_diag)\\n update_total_stress(db, sigma_stress_diag, tau_stress_diag, neutral_axis)\\n\\n // emit the changes\\n source.change.emit()\\n\\n \\n function update_div_geo(data, div) {\\n // compute the parameters and dimensions\\n const L = Math.round(data['L'][0]*10)/10\\n const b = Math.round(data['b'][0])\\n const h = Math.round(data['h'][0])\\n const t = Math.round(data['t'][0])\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const Iz = data['Iz'][0]\\n // change the div text\\n div.text = `\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = `+h+` mm<br>\\n b = `+b+` mm<br>\\n t = `+t+` mm<br>\\n L = `+L+` m<br>\\n A = `+A.toExponential(2)+` mm<sup>2</sup><br>\\n Iy = `+Iy.toExponential(2)+` mm<sup>4</sup><br>\\n Iz = `+Iz.toExponential(2)+` mm<sup>4</sup>` \\n }\\n \\n \\n function update_section(data, glyph_section) {\\n // change the plot of the section\\n const src = glyph_section.data_source\\n const t = data['t'][0]\\n const b = data['b'][0]\\n const h = data['h'][0]\\n src.data.xs = [[[ [b/2, b/2, -b/2, -b/2], [b/2-t, b/2-t, -b/2+t, -b/2+t] ]]]\\n src.data.ys = [[[ [h/2, -h/2, -h/2, h/2], [h/2-t, -h/2+t, -h/2+t, h/2-t] ]]]\\n src.change.emit()\\n }\\n \\n \\n function compute_area(b, h, t) {\\n return b*h - (b-t*2)*(h-2*t)\\n }\\n \\n \\n function compute_inertia_y(b, h) {\\n return b*h**3/12 - (b-2*t)*(h-2*t)**3/12\\n }\\n \\n \\n function compute_inertia_z(b, h, t) {\\n return h*b**3/12 - (h-2*t)*(b-2*t)**3/12\\n }\\n \\n \\n function compute_neutral_axis(N, A, Iy, M, yG) {\\n if (M == 0) {\\n return yG\\n }\\n else {\\n return yG - N/A*Iy/M/1000\\n }\\n }\\n \\n \\n function update_axial_stress_strain(data, glyph_stress, glyph_strain, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const A = data['A'][0]\\n const E = data['E'][0]\\n const N = data['N'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_axial = new Array(discr)\\n let strain_axial = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n strain_axial[i] = compute_epsilon_axial(sigma_axial[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_axial, y_discr)\\n update_strain_diagram(glyph_strain, strain_axial, y_discr)\\n }\\n \\n \\n function update_bending_stress_strain(data, glyph_stress, glyph_strain, glyph_centroid, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const E = data['E'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const M = data['M'][0]\\n const y_discr = linspace(0, h, discr)\\n let sigma_bending = new Array(discr)\\n let strain_bending = new Array(discr)\\n const src_centroid = glyph_centroid.data_source\\n \\n // apply the changes\\n src_centroid.data.y = [yG, yG]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n strain_bending[i] = compute_epsilon_bending(sigma_bending[i], E)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, sigma_bending, y_discr)\\n update_strain_diagram(glyph_strain, strain_bending, y_discr)\\n src_centroid.change.emit()\\n }\\n \\n \\n function update_shear_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const yG = data['yG'][0]\\n const Iy = data['Iy'][0]\\n const V = data['V'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_shear = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_shear, y_discr)\\n }\\n \\n \\n function update_total_stress(data, glyph_sigma, glyph_tau, glyph_neutral_axis, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const M = data['M'][0]\\n const N = data['N'][0]\\n const V = data['V'][0]\\n const A = data['A'][0]\\n const Iy = data['Iy'][0]\\n const yG = data['yG'][0]\\n const y_discr = linspace(0, h, discr)\\n const y_n_axis = compute_neutral_axis(N, A, Iy, M, yG)\\n let sigma_bending = new Array(discr)\\n let tau_shear = new Array(discr)\\n let sigma_axial = new Array(discr)\\n let total_sigma = new Array(discr)\\n let total_tau = new Array(discr)\\n const src_n_axis = glyph_neutral_axis.data_source\\n \\n const t = data['t'][0]\\n const T = data['T'][0]\\n let tau_torsion = new Array(discr)\\n \\n \\n // apply the changes\\n db['y_n_axis'][0] = y_n_axis\\n src_n_axis.data.y = [y_n_axis, y_n_axis]\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n // sigma\\n sigma_axial[i] = compute_sigma_axial(N, A)\\n sigma_bending[i] = compute_sigma_bending(y_discr[i], M, Iy, yG)\\n total_sigma[i] = compute_total_sigma(sigma_axial[i], sigma_bending[i])\\n // tau\\n var S = compute_first_moment_of_area_implicit(y_discr[i], data)\\n \\n if (Math.abs(y_discr[i]-yG) >= (h-2*data['t'][0])/2) {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, b)\\n } else {\\n tau_shear[i] = compute_tau_shear(V, S, Iy, 2*data['t'][0])\\n }\\n \\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n total_tau[i] = compute_total_tau(tau_shear[i], tau_torsion[i])\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_sigma, total_sigma, y_discr)\\n update_stress_diagram(glyph_tau, total_tau, y_discr)\\n src_n_axis.change.emit()\\n }\\n \\n \\n function linspace(start, stop, discr = 100) {\\n const step = (stop - start) / (discr-1);\\n return Array.from({length: discr}, (_, i) => start + step * i);\\n }\\n \\n \\n function compute_epsilon_axial(sigma_axial, E) {\\n return sigma_axial/E*100\\n }\\n \\n \\n function compute_epsilon_bending(sigma_bending, E) {\\n return sigma_bending/E*100\\n }\\n \\n \\n function compute_sigma_axial(N, A) {\\n return N*1000/A\\n }\\n \\n \\n function update_stress_diagram(diagram, x, y) {\\n const x_ = [...x]\\n const y_ = [...y]\\n const source = diagram.data_source\\n x_.unshift(0)\\n x_.push(0)\\n y_.unshift(y[0])\\n y_.push(y[y.length-1])\\n source.data.x = x_\\n source.data.y = y_\\n source.change.emit()\\n }\\n \\n \\n function update_strain_diagram(diagram, x, y) {\\n const source = diagram.data_source\\n source.data.x = x\\n source.data.y = y\\n source.change.emit()\\n }\\n \\n \\n function compute_sigma_bending(y, M, Iy, yG) {\\n return M*1e6/Iy*(y-yG)\\n }\\n \\n \\n function compute_total_sigma(sigma_axial, sigma_bending) {\\n return sigma_bending+sigma_axial\\n }\\n \\n \\n function compute_total_tau(tau_shear, tau_torsion=0) {\\n return tau_shear + tau_torsion\\n }\\n \\n \\n function compute_first_moment_of_area(y_, b, h, t, yG) {\\n const y = y_-yG\\n const h_ = h-2*t\\n if (Math.abs(y) >= h_/2) {\\n return b/2*(h**2/4-y**2)\\n } else {\\n return b/2*(h-t)*t + t*(h_**2/4-y**2)\\n }\\n }\\n \\n \\n function compute_first_moment_of_area_implicit(y_, data) {\\n return compute_first_moment_of_area(y_, data['b'][0], data['h'][0], data['t'][0], data['yG'][0])\\n }\\n \\n \\n function compute_tau_shear(V, S, Iy, b_or_t) {\\n return V*1000*S/(Iy*b_or_t)\\n }\\n \\n \\n function compute_tau_torsion(T, b, h, t) {\\n return -T/(2*t*(b-t)*(h-t))*1000\\n }\\n \\n \\n function update_torsional_stress(data, glyph_stress, discr=50) { \\n // define parameters\\n const h = data['h'][0]\\n const b = data['b'][0]\\n const t = data['t'][0]\\n const T = data['T'][0]\\n const y_discr = linspace(0, h, discr)\\n let tau_torsion = new Array(discr)\\n \\n // compute the arrays\\n for (var i = 0; i < discr; i++) {\\n tau_torsion[i] = compute_tau_torsion(T, b, h, t)\\n }\\n \\n // change the diagrams\\n update_stress_diagram(glyph_stress, tau_torsion, y_discr)\\n }\\n \\n \"},\"id\":\"2068\",\"type\":\"CustomJS\"},{\"attributes\":{},\"id\":\"2195\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2230\",\"type\":\"AllLabels\"},{\"attributes\":{\"width\":10},\"id\":\"2069\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1822\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2283\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2340\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"height\":30},\"id\":\"2072\",\"type\":\"Spacer\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2258\"},\"group\":null,\"major_label_policy\":{\"id\":\"2259\"},\"ticker\":{\"id\":\"1829\"},\"visible\":false},\"id\":\"1828\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2284\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1336\"}],\"center\":[{\"id\":\"1339\"},{\"id\":\"1343\"}],\"height\":160,\"left\":[{\"id\":\"1340\"}],\"renderers\":[{\"id\":\"1388\"},{\"id\":\"1394\"},{\"id\":\"1412\"}],\"title\":{\"id\":\"2093\"},\"toolbar\":{\"id\":\"1352\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1332\"},\"y_range\":{\"id\":\"1330\"},\"y_scale\":{\"id\":\"1334\"}},\"id\":\"1328\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1330\",\"type\":\"DataRange1d\"},{\"attributes\":{\"height\":30},\"id\":\"2070\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1820\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2133\"},\"group\":null,\"major_label_policy\":{\"id\":\"2134\"},\"ticker\":{\"id\":\"1337\"},\"visible\":false},\"id\":\"1336\",\"type\":\"LinearAxis\"},{\"attributes\":{\"height\":30},\"id\":\"2071\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2321\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2341\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"2070\"},{\"id\":\"1108\"},{\"id\":\"1109\"},{\"id\":\"1933\"},{\"id\":\"1256\"},{\"id\":\"1255\"},{\"id\":\"2071\"},{\"id\":\"1257\"},{\"id\":\"1258\"},{\"id\":\"1259\"},{\"id\":\"1260\"},{\"id\":\"2072\"},{\"id\":\"1899\"},{\"id\":\"1900\"}]},\"id\":\"2073\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"2298\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2322\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1041\"},{\"id\":\"2069\"},{\"id\":\"2073\"}]},\"id\":\"2074\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1336\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1339\",\"type\":\"Grid\"},{\"attributes\":{\"tools\":[{\"id\":\"1803\"},{\"id\":\"1804\"},{\"id\":\"1805\"},{\"id\":\"1806\"},{\"id\":\"1807\"},{\"id\":\"1808\"}]},\"id\":\"1810\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2299\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1345\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2255\"},\"group\":null,\"major_label_policy\":{\"id\":\"2256\"},\"ticker\":{\"id\":\"1833\"},\"visible\":false},\"id\":\"1832\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Bending moment M [kNm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2130\"},\"group\":null,\"major_label_policy\":{\"id\":\"2131\"},\"ticker\":{\"id\":\"1341\"}},\"id\":\"1340\",\"type\":\"LinearAxis\"},{\"attributes\":{\"width\":200},\"id\":\"2080\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1824\",\"type\":\"LinearScale\"},{\"attributes\":{\"children\":[{\"id\":\"1128\"},{\"id\":\"2074\"}]},\"id\":\"2075\",\"type\":\"Column\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1367\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1369\"},\"nonselection_glyph\":{\"id\":\"1368\"},\"view\":{\"id\":\"1371\"}},\"id\":\"1370\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1842\"}},\"id\":\"1838\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"height\":10},\"id\":\"2076\",\"type\":\"Spacer\"},{\"attributes\":{\"axis\":{\"id\":\"1340\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1343\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1828\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1831\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[{\"id\":\"1008\"},{\"id\":\"2076\"},{\"id\":\"1262\"},{\"id\":\"1296\"},{\"id\":\"1328\"},{\"id\":\"1901\"}]},\"id\":\"2077\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"V at position x\"},\"id\":\"1818\",\"type\":\"Title\"},{\"attributes\":{\"children\":[{\"id\":\"2075\"},{\"id\":\"2077\"}]},\"id\":\"2078\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1829\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2262\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"width\":200},\"id\":\"2081\",\"type\":\"Spacer\"},{\"attributes\":{\"axis\":{\"id\":\"1832\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1835\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2285\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"2079\"},{\"id\":\"2082\"}]},\"id\":\"2083\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1349\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2263\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2286\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2342\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1350\"}},\"id\":\"1346\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1826\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1836\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2265\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2343\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1784\"},{\"id\":\"1449\"},{\"id\":\"1414\"},{\"id\":\"1517\"},{\"id\":\"1483\"},{\"id\":\"1586\"}]},\"id\":\"2079\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1347\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1833\",\"type\":\"BasicTicker\"},{\"attributes\":{\"children\":[{\"id\":\"2083\"}]},\"id\":\"2084\",\"type\":\"Row\"},{\"attributes\":{},\"id\":\"1348\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1839\",\"type\":\"SaveTool\"},{\"attributes\":{\"children\":[{\"id\":\"1817\"},{\"id\":\"2080\"},{\"id\":\"1551\"},{\"id\":\"2081\"},{\"id\":\"1952\"},{\"id\":\"1620\"}]},\"id\":\"2082\",\"type\":\"Row\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1350\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2277\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1003\"}},\"id\":\"1088\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"interval\":50},\"id\":\"1080\",\"type\":\"SingleIntervalTicker\"},{\"attributes\":{},\"id\":\"2351\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[{\"id\":\"2078\"},{\"id\":\"2084\"}]},\"id\":\"2085\",\"type\":\"Column\"},{\"attributes\":{\"fill_color\":\"white\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1090\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"2352\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1085\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"2085\"}]},\"id\":\"2086\",\"type\":\"Row\"},{\"attributes\":{\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1084\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":6,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1086\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2278\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1110\",\"type\":\"VeeHead\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"hatch_pattern\":{\"value\":\"/\"},\"line_width\":{\"value\":1.8},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1102\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"white\",\"hatch_alpha\":0.1,\"line_alpha\":0.1,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1091\",\"type\":\"Patch\"},{\"attributes\":{\"data\":{\"x\":[0,0.15,-0.15],\"y\":[0,-0.16887495373796552,-0.16887495373796552]},\"selected\":{\"id\":\"2187\"},\"selection_policy\":{\"id\":\"2186\"}},\"id\":\"1089\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1089\"},\"glyph\":{\"id\":\"1090\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1092\"},\"nonselection_glyph\":{\"id\":\"1091\"},\"view\":{\"id\":\"1094\"}},\"id\":\"1093\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"white\",\"hatch_alpha\":0.2,\"line_alpha\":0.2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1092\",\"type\":\"Patch\"},{\"attributes\":{\"source\":{\"id\":\"1089\"}},\"id\":\"1094\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"xs\":[[[[50.0,50.0,-50.0,-50.0],[40.0,40.0,-40.0,-40.0]]]],\"ys\":[[[[100.0,-100.0,-100.0,100.0],[90.0,-90.0,-90.0,90.0]]]]},\"selected\":{\"id\":\"2282\"},\"selection_policy\":{\"id\":\"2281\"}},\"id\":\"1101\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis\":{\"id\":\"1143\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1146\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[6],\"y\":[-0.0975]},\"selected\":{\"id\":\"2189\"},\"selection_policy\":{\"id\":\"2188\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[9.0,4],\"y\":[0,0]},\"selected\":{\"id\":\"2341\"},\"selection_policy\":{\"id\":\"2340\"}},\"id\":\"2018\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_pattern\":{\"value\":\"/\"},\"line_alpha\":{\"value\":0.1},\"line_width\":{\"value\":1.8},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1103\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"radius\":{\"value\":0.15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1101\"},\"glyph\":{\"id\":\"1102\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1104\"},\"nonselection_glyph\":{\"id\":\"1103\"},\"view\":{\"id\":\"1106\"}},\"id\":\"1105\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"z\"],\"x\":[-88.0],\"y\":[0]},\"selected\":{\"id\":\"2286\"},\"selection_policy\":{\"id\":\"2285\"}},\"id\":\"1122\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"white\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_pattern\":{\"value\":\"/\"},\"line_alpha\":{\"value\":0.2},\"line_width\":{\"value\":1.8},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"1104\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"source\":{\"id\":\"1101\"}},\"id\":\"1106\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":300,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2062\"}]},\"start\":50,\"step\":10,\"title\":\"Change the width b [mm]\",\"value\":100},\"id\":\"1108\",\"type\":\"Slider\"},{\"attributes\":{\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2013\",\"type\":\"Text\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Geometrical and mechanical parameters:</b></p>\\n h = 200 mm<br>\\n b = 100 mm<br>\\n t = 10 mm<br>\\n L = 6 m<br>\\n A = 5.60e+03 mm<sup>2</sup><br>\\n Iy = 2.78e+07 mm<sup>4</sup><br>\\n Iz = 8.99e+06 mm<sup>4</sup>\",\"width\":170},\"id\":\"1107\",\"type\":\"Div\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1123\",\"type\":\"Text\"},{\"attributes\":{\"end\":600,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2063\"}]},\"start\":50,\"step\":10,\"title\":\"Change the height h [mm]\",\"value\":200},\"id\":\"1109\",\"type\":\"Slider\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1110\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2182\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":128.0},\"y_start\":{\"value\":0}},\"id\":\"1111\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"2151\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1122\"},\"glyph\":{\"id\":\"1123\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1125\"},\"nonselection_glyph\":{\"id\":\"1124\"},\"view\":{\"id\":\"1127\"}},\"id\":\"1126\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2152\",\"type\":\"Selection\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1125\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2354\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"text\":[\"y\"],\"x\":[0],\"y\":[136.0]},\"selected\":{\"id\":\"2284\"},\"selection_policy\":{\"id\":\"2283\"}},\"id\":\"1113\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_align\":{\"value\":\"right\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1124\",\"type\":\"Text\"},{\"attributes\":{\"fill_alpha\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1162\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"2355\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1122\"}},\"id\":\"1127\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[30.0],\"y\":[0]},\"selected\":{\"id\":\"2152\"},\"selection_policy\":{\"id\":\"2151\"}},\"id\":\"1161\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"1139\"}],\"center\":[{\"id\":\"1142\"},{\"id\":\"1146\"},{\"id\":\"1225\"},{\"id\":\"1228\"},{\"id\":\"1231\"},{\"id\":\"1234\"},{\"id\":\"1237\"},{\"id\":\"1240\"}],\"height\":200,\"left\":[{\"id\":\"1143\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1165\"},{\"id\":\"1198\"},{\"id\":\"1204\"},{\"id\":\"1210\"},{\"id\":\"1216\"},{\"id\":\"1222\"},{\"id\":\"1247\"},{\"id\":\"1253\"}],\"title\":{\"id\":\"1129\"},\"toolbar\":{\"id\":\"1154\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1131\"},\"x_scale\":{\"id\":\"1135\"},\"y_range\":{\"id\":\"1133\"},\"y_scale\":{\"id\":\"1137\"}},\"id\":\"1128\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2101\"},\"group\":null,\"major_label_policy\":{\"id\":\"2102\"},\"ticker\":{\"id\":\"1140\"},\"visible\":false},\"id\":\"1139\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2098\"},\"group\":null,\"major_label_policy\":{\"id\":\"2099\"},\"ticker\":{\"id\":\"1144\"},\"visible\":false},\"id\":\"1143\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1139\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1142\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1152\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Forces and Moments Scheme\"},\"id\":\"1129\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2091\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2153\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2154\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":18.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":72.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1148\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1153\"}},\"id\":\"1149\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1740\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2093\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2356\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1153\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1147\"},{\"id\":\"1148\"},{\"id\":\"1149\"},{\"id\":\"1150\"},{\"id\":\"1151\"},{\"id\":\"1152\"}]},\"id\":\"1154\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2357\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1004\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1004\"},\"glyph\":{\"id\":\"1201\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2169\"},\"selection_policy\":{\"id\":\"2168\"}},\"id\":\"2104\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1032\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2205\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2309\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2310\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2171\"},\"selection_policy\":{\"id\":\"2170\"}},\"id\":\"2105\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2206\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1031\",\"type\":\"ResetTool\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2173\"},\"selection_policy\":{\"id\":\"2172\"}},\"id\":\"2106\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2175\"},\"selection_policy\":{\"id\":\"2174\"}},\"id\":\"2107\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2318\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2311\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2177\"},\"selection_policy\":{\"id\":\"2176\"}},\"id\":\"2108\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1065\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2312\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Rect\"},{\"attributes\":{\"axis\":{\"id\":\"1052\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1055\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Width b [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2180\"},\"group\":null,\"major_label_policy\":{\"id\":\"2181\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1052\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2313\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2331\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":[0],\"y\":[0]},\"selected\":{\"id\":\"2280\"},\"selection_policy\":{\"id\":\"2279\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2314\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2332\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1027\"},{\"id\":\"1028\"},{\"id\":\"1029\"},{\"id\":\"1030\"},{\"id\":\"1031\"},{\"id\":\"1032\"}]},\"id\":\"1034\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"1066\"}},\"id\":\"1062\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Cross-section of the beam\"},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{\"fill_color\":{\"value\":\"gray\"},\"line_color\":{\"value\":\"gray\"},\"size\":{\"value\":15.380572041353537}},\"id\":\"1119\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis\":{\"id\":\"1056\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1059\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2178\"},\"group\":null,\"major_label_policy\":{\"id\":\"2179\"},\"ticker\":{\"id\":\"1080\"}},\"id\":\"1056\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2207\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2208\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1113\"},\"glyph\":{\"id\":\"1114\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1116\"},\"nonselection_glyph\":{\"id\":\"1115\"},\"view\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1119\"},\"group\":null,\"line_color\":{\"value\":\"gray\"},\"line_width\":{\"value\":2.1972245773362196},\"source\":{\"id\":\"2183\"},\"start\":null,\"x_end\":{\"value\":-80.0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1120\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1064\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1066\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2333\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1116\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2334\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1113\"}},\"id\":\"1118\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1060\"},{\"id\":\"1061\"},{\"id\":\"1062\"},{\"id\":\"1063\"},{\"id\":\"1064\"},{\"id\":\"1065\"}]},\"id\":\"1067\",\"type\":\"Toolbar\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1115\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2316\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"angle\":{\"value\":1.5707963267948966},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"gray\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1114\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"2317\",\"type\":\"Selection\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"height\":{\"value\":480.0},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"width\":{\"value\":240.0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Rect\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":16.785266909588593}},\"id\":\"1233\",\"type\":\"VeeHead\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2238\"},\"group\":null,\"major_label_policy\":{\"id\":\"2239\"},\"ticker\":{\"id\":\"1532\"},\"visible\":false},\"id\":\"1531\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1639\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2114\"},\"group\":null,\"major_label_policy\":{\"id\":\"2115\"},\"ticker\":{\"id\":\"1020\"}},\"id\":\"1019\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1531\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1534\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1644\"}},\"id\":\"1640\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1236\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2107\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1237\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1536\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1236\",\"type\":\"VeeHead\"},{\"attributes\":{\"data\":{\"x\":[0,6],\"y\":[0,0]},\"selected\":{\"id\":\"2185\"},\"selection_policy\":{\"id\":\"2184\"}},\"id\":\"1003\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1542\",\"type\":\"HoverTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"},\"line_color\":{\"value\":\"orange\"},\"size\":{\"value\":17.954645502230758}},\"id\":\"1230\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1532\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1239\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2108\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1240\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1641\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1642\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1230\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.5649493574615367},\"source\":{\"id\":\"2105\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":-12.0}},\"id\":\"1231\",\"type\":\"Arrow\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1239\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1540\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1233\"},\"group\":null,\"line_color\":{\"value\":\"orange\"},\"line_width\":{\"value\":2.3978952727983707},\"source\":{\"id\":\"2106\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":-10},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1234\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1535\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1644\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"overlay\":{\"id\":\"1541\"}},\"id\":\"1537\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1638\"},{\"id\":\"1639\"},{\"id\":\"1640\"},{\"id\":\"1641\"},{\"id\":\"1642\"},{\"id\":\"1643\"},{\"id\":\"1645\"}]},\"id\":\"1646\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1538\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2164\"},\"selection_policy\":{\"id\":\"2163\"}},\"id\":\"1249\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1539\",\"type\":\"ResetTool\"},{\"attributes\":{\"data\":{\"x\":[0,60],\"y\":[0,0]},\"selected\":{\"id\":\"2156\"},\"selection_policy\":{\"id\":\"2155\"}},\"id\":\"1004\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2162\"},\"selection_policy\":{\"id\":\"2161\"}},\"id\":\"1242\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1242\"},\"glyph\":{\"id\":\"1244\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1541\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Line\"},{\"attributes\":{\"end\":0.9,\"start\":-0.4},\"id\":\"1013\",\"type\":\"Range1d\"},{\"attributes\":{\"source\":{\"id\":\"1672\"}},\"id\":\"1677\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2279\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1250\",\"type\":\"Scatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1674\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1242\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1680\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1249\"}},\"id\":\"1254\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1252\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1251\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1249\"},\"glyph\":{\"id\":\"1250\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1252\"},\"nonselection_glyph\":{\"id\":\"1251\"},\"view\":{\"id\":\"1254\"}},\"id\":\"1253\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1023\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1026\",\"type\":\"Grid\"},{\"attributes\":{\"end\":5.0,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2066\"}]},\"start\":0.1,\"step\":0.1,\"title\":\"Change the uniform load q [kN/m]\",\"value\":4},\"id\":\"1255\",\"type\":\"Slider\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1657\",\"type\":\"Line\"},{\"attributes\":{\"text\":\"Free-body diagram (FBD):\"},\"id\":\"1257\",\"type\":\"Div\"},{\"attributes\":{\"end\":6,\"js_property_callbacks\":{\"change:value\":[{\"id\":\"2061\"}]},\"start\":0,\"step\":0.02,\"title\":\"Change the position x along the beam [m]\",\"value\":6},\"id\":\"1256\",\"type\":\"Slider\"},{\"attributes\":{\"active\":0,\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2065\"}]},\"labels\":[\"Right-hand\",\"Left-hand\"]},\"id\":\"1258\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"text\":\"Axial force P=10 kN (applied)\"},\"id\":\"1259\",\"type\":\"Div\"},{\"attributes\":{},\"id\":\"1563\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1773\",\"type\":\"Line\"},{\"attributes\":{\"text\":\"\\n <p style='font-size:14px'><b>Forces and Moments:</b></p>\\n P = 10 kN<br>\\n Rx = 10 kN<br>\\n Ry (left) = 12.0 kN<br>\\n Ry (right) = 12.0 kN<br>\\n No cross section analysed.<br>\\n N = 0 kN<br>\\n V = 0 kN<br>\\n M = 0 kNm\\n \\n \",\"width\":170},\"id\":\"1261\",\"type\":\"Div\"},{\"attributes\":{\"axis\":{\"id\":\"1272\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1275\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[0,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,0],\"y\":[0,0.0,4.081632653061225,8.16326530612245,12.244897959183675,16.3265306122449,20.408163265306122,24.48979591836735,28.571428571428573,32.6530612244898,36.734693877551024,40.816326530612244,44.89795918367347,48.9795918367347,53.06122448979592,57.142857142857146,61.224489795918366,65.3061224489796,69.38775510204081,73.46938775510205,77.55102040816327,81.63265306122449,85.71428571428572,89.79591836734694,93.87755102040816,97.9591836734694,102.04081632653062,106.12244897959184,110.20408163265306,114.28571428571429,118.36734693877551,122.44897959183673,126.53061224489797,130.6122448979592,134.69387755102042,138.77551020408163,142.85714285714286,146.9387755102041,151.0204081632653,155.10204081632654,159.18367346938777,163.26530612244898,167.3469387755102,171.42857142857144,175.51020408163265,179.59183673469389,183.67346938775512,187.75510204081633,191.83673469387756,195.9183673469388,200.0,200]},\"selected\":{\"id\":\"2317\"},\"selection_policy\":{\"id\":\"2316\"}},\"id\":\"1654\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2064\"}]},\"labels\":[\"Apply or remove axial force P\"]},\"id\":\"1260\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"below\":[{\"id\":\"1272\"}],\"center\":[{\"id\":\"1275\"},{\"id\":\"1279\"}],\"height\":160,\"left\":[{\"id\":\"1276\"}],\"renderers\":[{\"id\":\"1364\"},{\"id\":\"1370\"},{\"id\":\"1400\"},{\"id\":\"2059\"}],\"title\":{\"id\":\"1263\"},\"toolbar\":{\"id\":\"1288\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1268\"},\"y_range\":{\"id\":\"1266\"},\"y_scale\":{\"id\":\"1270\"}},\"id\":\"1262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1775\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1661\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1663\"},\"nonselection_glyph\":{\"id\":\"1662\"},\"view\":{\"id\":\"1665\"}},\"id\":\"1664\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1535\"},{\"id\":\"1536\"},{\"id\":\"1537\"},{\"id\":\"1538\"},{\"id\":\"1539\"},{\"id\":\"1540\"},{\"id\":\"1542\"}]},\"id\":\"1543\",\"type\":\"Toolbar\"},{\"attributes\":{\"end\":7.2,\"start\":-1.2000000000000002},\"id\":\"1011\",\"type\":\"Range1d\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1655\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1266\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2111\"},\"group\":null,\"major_label_policy\":{\"id\":\"2112\"},\"ticker\":{\"id\":\"1024\"},\"visible\":false},\"id\":\"1023\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Position\",\"@x m\"],[\"Axial force\",\"@y kN\"]]},\"id\":\"1287\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1560\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1268\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"N V M Diagrams\"},\"id\":\"1263\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1270\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1654\"},\"glyph\":{\"id\":\"1655\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1657\"},\"nonselection_glyph\":{\"id\":\"1656\"},\"view\":{\"id\":\"1659\"}},\"id\":\"1658\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1281\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1675\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Position [m]\",\"coordinates\":null,\"formatter\":{\"id\":\"2121\"},\"group\":null,\"major_label_policy\":{\"id\":\"2122\"},\"ticker\":{\"id\":\"1273\"},\"visible\":false},\"id\":\"1272\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1756\"},\"glyph\":{\"id\":\"1757\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1759\"},\"nonselection_glyph\":{\"id\":\"1758\"},\"view\":{\"id\":\"1761\"}},\"id\":\"1760\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1273\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1554\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1662\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1019\"}],\"center\":[{\"id\":\"1022\"},{\"id\":\"1026\"},{\"id\":\"1180\"}],\"height\":200,\"left\":[{\"id\":\"1023\"}],\"min_border_left\":0,\"renderers\":[{\"id\":\"1087\"},{\"id\":\"1093\"},{\"id\":\"1099\"},{\"id\":\"1171\"},{\"id\":\"1177\"},{\"id\":\"1186\"},{\"id\":\"1192\"},{\"id\":\"2004\"},{\"id\":\"2010\"},{\"id\":\"2016\"}],\"title\":{\"id\":\"1009\"},\"toolbar\":{\"id\":\"1034\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1015\"},\"y_range\":{\"id\":\"1013\"},\"y_scale\":{\"id\":\"1017\"}},\"id\":\"1008\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"below\":[{\"id\":\"1562\"}],\"center\":[{\"id\":\"1565\"},{\"id\":\"1569\"}],\"height\":200,\"left\":[{\"id\":\"1566\"}],\"renderers\":[{\"id\":\"1694\"},{\"id\":\"1700\"},{\"id\":\"1706\"}],\"title\":{\"id\":\"1552\"},\"toolbar\":{\"id\":\"1578\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1554\"},\"x_scale\":{\"id\":\"1558\"},\"y_range\":{\"id\":\"1556\"},\"y_scale\":{\"id\":\"1560\"}},\"id\":\"1551\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1654\"}},\"id\":\"1659\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Axial force N [kN]\",\"coordinates\":null,\"formatter\":{\"id\":\"2118\"},\"group\":null,\"major_label_policy\":{\"id\":\"2119\"},\"ticker\":{\"id\":\"1277\"}},\"id\":\"1276\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1556\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1656\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1276\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1279\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1679\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1681\"},\"nonselection_glyph\":{\"id\":\"1680\"},\"view\":{\"id\":\"1683\"}},\"id\":\"1682\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Simple supported beam\"},\"id\":\"1009\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1661\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,4.081632653061225,8.16326530612245,12.244897959183675,16.3265306122449,20.408163265306122,24.48979591836735,28.571428571428573,32.6530612244898,36.734693877551024,40.816326530612244,44.89795918367347,48.9795918367347,53.06122448979592,57.142857142857146,61.224489795918366,65.3061224489796,69.38775510204081,73.46938775510205,77.55102040816327,81.63265306122449,85.71428571428572,89.79591836734694,93.87755102040816,97.9591836734694,102.04081632653062,106.12244897959184,110.20408163265306,114.28571428571429,118.36734693877551,122.44897959183673,126.53061224489797,130.6122448979592,134.69387755102042,138.77551020408163,142.85714285714286,146.9387755102041,151.0204081632653,155.10204081632654,159.18367346938777,163.26530612244898,167.3469387755102,171.42857142857144,175.51020408163265,179.59183673469389,183.67346938775512,187.75510204081633,191.83673469387756,195.9183673469388,200.0,200]},\"selected\":{\"id\":\"2327\"},\"selection_policy\":{\"id\":\"2326\"}},\"id\":\"1672\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1573\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1003\"},\"glyph\":{\"id\":\"1084\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1086\"},\"nonselection_glyph\":{\"id\":\"1085\"},\"view\":{\"id\":\"1088\"}},\"id\":\"1087\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Shear stress\"},\"id\":\"1552\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1285\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1015\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1562\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1565\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1286\"}},\"id\":\"1282\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1558\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1663\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"SaveTool\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c4\\u1d65 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2265\"},\"group\":null,\"major_label_policy\":{\"id\":\"2266\"},\"ticker\":{\"id\":\"1563\"}},\"id\":\"1562\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1679\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1665\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":[0,0],\"y\":[0,200]},\"selected\":{\"id\":\"2312\"},\"selection_policy\":{\"id\":\"2311\"}},\"id\":\"1006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1691\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1571\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis\":{\"id\":\"1019\"},\"coordinates\":null,\"grid_line_alpha\":0,\"group\":null,\"ticker\":null},\"id\":\"1022\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1577\",\"type\":\"HoverTool\"},{\"attributes\":{\"below\":[{\"id\":\"1052\"}],\"center\":[{\"id\":\"1055\"},{\"id\":\"1059\"},{\"id\":\"1111\"},{\"id\":\"1120\"}],\"left\":[{\"id\":\"1056\"}],\"match_aspect\":true,\"renderers\":[{\"id\":\"1078\"},{\"id\":\"1105\"},{\"id\":\"1117\"},{\"id\":\"1126\"},{\"id\":\"1991\"},{\"id\":\"1997\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1067\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1048\"},\"y_range\":{\"id\":\"1046\"},\"y_scale\":{\"id\":\"1050\"}},\"id\":\"1041\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1286\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":[-3.0,3.0],\"y\":[0,0]},\"selected\":{\"id\":\"2319\"},\"selection_policy\":{\"id\":\"2318\"}},\"id\":\"1666\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2262\"},\"group\":null,\"major_label_policy\":{\"id\":\"2263\"},\"ticker\":{\"id\":\"1567\"},\"visible\":false},\"id\":\"1566\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1697\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"1304\"}],\"center\":[{\"id\":\"1307\"},{\"id\":\"1311\"}],\"height\":160,\"left\":[{\"id\":\"1308\"}],\"renderers\":[{\"id\":\"1376\"},{\"id\":\"1382\"},{\"id\":\"1406\"}],\"title\":{\"id\":\"2091\"},\"toolbar\":{\"id\":\"1320\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1300\"},\"y_range\":{\"id\":\"1298\"},\"y_scale\":{\"id\":\"1302\"}},\"id\":\"1296\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"1566\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1569\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1672\"},\"glyph\":{\"id\":\"1673\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1675\"},\"nonselection_glyph\":{\"id\":\"1674\"},\"view\":{\"id\":\"1677\"}},\"id\":\"1676\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"A\":[5600],\"E\":[200000.0],\"FBD\":[0],\"Iy\":[27786666.666666664],\"Iz\":[8986666.666666666],\"L\":[6],\"M\":[0.0],\"Mt\":[100],\"N\":[-10.0],\"P\":[10],\"Rx\":[10],\"Ry_l\":[12.0],\"Ry_r\":[12.0],\"SCALE\":[10],\"T\":[-50.0],\"V\":[12.0],\"b\":[100],\"h\":[200],\"q\":[4],\"state\":[\"IDLE\"],\"t\":[10],\"x\":[6],\"xF\":[60],\"y\":[0],\"yG\":[100.0],\"y_n_axis\":[100.0]},\"selected\":{\"id\":\"2154\"},\"selection_policy\":{\"id\":\"2153\"}},\"id\":\"1007\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1690\"}},\"id\":\"1695\",\"type\":\"CDSView\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1762\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1575\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1681\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Bending stress and centroid\"},\"id\":\"1484\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1687\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1570\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1683\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1576\"}},\"id\":\"1572\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2098 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2246\"},\"group\":null,\"major_label_policy\":{\"id\":\"2247\"},\"ticker\":{\"id\":\"1494\"}},\"id\":\"1493\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1685\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1690\"},\"glyph\":{\"id\":\"1691\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1693\"},\"nonselection_glyph\":{\"id\":\"1692\"},\"view\":{\"id\":\"1695\"}},\"id\":\"1694\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1574\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1697\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1699\"},\"nonselection_glyph\":{\"id\":\"1698\"},\"view\":{\"id\":\"1701\"}},\"id\":\"1700\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1491\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1692\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2220\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2329\"},\"selection_policy\":{\"id\":\"2328\"}},\"id\":\"1684\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1684\"},\"glyph\":{\"id\":\"1685\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1687\"},\"nonselection_glyph\":{\"id\":\"1686\"},\"view\":{\"id\":\"1689\"}},\"id\":\"1688\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2221\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1684\"}},\"id\":\"1689\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1686\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[0,0,60,60],\"x_fade\":[0,0,60,60],\"y\":[4,8,8,4]},\"selected\":{\"id\":\"2160\"},\"selection_policy\":{\"id\":\"2159\"}},\"id\":\"1005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,4.081632653061225,8.16326530612245,12.244897959183675,16.3265306122449,20.408163265306122,24.48979591836735,28.571428571428573,32.6530612244898,36.734693877551024,40.816326530612244,44.89795918367347,48.9795918367347,53.06122448979592,57.142857142857146,61.224489795918366,65.3061224489796,69.38775510204081,73.46938775510205,77.55102040816327,81.63265306122449,85.71428571428572,89.79591836734694,93.87755102040816,97.9591836734694,102.04081632653062,106.12244897959184,110.20408163265306,114.28571428571429,118.36734693877551,122.44897959183673,126.53061224489797,130.6122448979592,134.69387755102042,138.77551020408163,142.85714285714286,146.9387755102041,151.0204081632653,155.10204081632654,159.18367346938777,163.26530612244898,167.3469387755102,171.42857142857144,175.51020408163265,179.59183673469389,183.67346938775512,187.75510204081633,191.83673469387756,195.9183673469388,200.0,200]},\"selected\":{\"id\":\"2350\"},\"selection_policy\":{\"id\":\"2349\"}},\"id\":\"1690\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[-0.00012,0.00012],\"y\":[0,0]},\"selected\":{\"id\":\"2314\"},\"selection_policy\":{\"id\":\"2313\"}},\"id\":\"1756\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2155\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"1425\"}],\"center\":[{\"id\":\"1428\"},{\"id\":\"1432\"}],\"height\":200,\"left\":[{\"id\":\"1429\"}],\"renderers\":[{\"id\":\"1658\"},{\"id\":\"1664\"},{\"id\":\"1670\"}],\"title\":{\"id\":\"1415\"},\"toolbar\":{\"id\":\"1441\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1417\"},\"x_scale\":{\"id\":\"1421\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1423\"}},\"id\":\"1414\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2156\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1423\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1426\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1643\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial stress\"},\"id\":\"1415\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2243\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2323\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1425\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1428\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2163\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1421\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Stress \\u03c3\\u2099 [MPa]\",\"coordinates\":null,\"formatter\":{\"id\":\"2235\"},\"group\":null,\"major_label_policy\":{\"id\":\"2236\"},\"ticker\":{\"id\":\"1426\"}},\"id\":\"1425\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2244\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2324\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2164\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1440\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2246\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2344\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2232\"},\"group\":null,\"major_label_policy\":{\"id\":\"2233\"},\"ticker\":{\"id\":\"1430\"},\"visible\":false},\"id\":\"1429\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1429\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1432\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2345\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2247\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2136\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2157\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1438\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2137\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2158\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1439\"}},\"id\":\"1435\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1436\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2139\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1439\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2140\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1894\",\"type\":\"Text\"},{\"attributes\":{\"tools\":[{\"id\":\"1467\"},{\"id\":\"1468\"},{\"id\":\"1469\"},{\"id\":\"1470\"},{\"id\":\"1471\"},{\"id\":\"1472\"},{\"id\":\"1474\"}]},\"id\":\"1475\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2184\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"1493\"}],\"center\":[{\"id\":\"1496\"},{\"id\":\"1500\"}],\"height\":200,\"left\":[{\"id\":\"1497\"}],\"renderers\":[{\"id\":\"1676\"},{\"id\":\"1682\"},{\"id\":\"1688\"}],\"title\":{\"id\":\"1484\"},\"toolbar\":{\"id\":\"1509\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1486\"},\"x_scale\":{\"id\":\"1489\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1491\"}},\"id\":\"1483\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2159\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2185\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2160\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2326\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1433\"},{\"id\":\"1434\"},{\"id\":\"1435\"},{\"id\":\"1436\"},{\"id\":\"1437\"},{\"id\":\"1438\"},{\"id\":\"1440\"}]},\"id\":\"1441\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2327\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2249\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2347\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1771\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1773\"},\"nonselection_glyph\":{\"id\":\"1772\"},\"view\":{\"id\":\"1775\"}},\"id\":\"1774\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2186\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2250\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2348\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2187\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2349\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2252\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1452\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2350\",\"type\":\"Selection\"},{\"attributes\":{\"below\":[{\"id\":\"1459\"}],\"center\":[{\"id\":\"1462\"},{\"id\":\"1466\"}],\"height\":200,\"left\":[{\"id\":\"1463\"}],\"renderers\":[{\"id\":\"1748\"},{\"id\":\"1754\"},{\"id\":\"1760\"}],\"title\":{\"id\":\"1450\"},\"toolbar\":{\"id\":\"1475\"},\"toolbar_location\":null,\"width\":200,\"x_range\":{\"id\":\"1452\"},\"x_scale\":{\"id\":\"1455\"},\"y_range\":{\"id\":\"1419\"},\"y_scale\":{\"id\":\"1457\"}},\"id\":\"1449\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2253\",\"type\":\"AllLabels\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Strain\",\"@x %\"],[\"Height\",\"@y mm\"]]},\"id\":\"1474\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2166\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2167\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1470\",\"type\":\"SaveTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Axial strain\"},\"id\":\"1450\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1459\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1462\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1468\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1457\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2168\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Strain \\u03b5\\u2099 [%]\",\"coordinates\":null,\"formatter\":{\"id\":\"2229\"},\"group\":null,\"major_label_policy\":{\"id\":\"2230\"},\"ticker\":{\"id\":\"1762\"}},\"id\":\"1459\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2169\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Height h [mm]\",\"coordinates\":null,\"formatter\":{\"id\":\"2227\"},\"group\":null,\"major_label_policy\":{\"id\":\"2228\"},\"ticker\":{\"id\":\"1464\"},\"visible\":false},\"id\":\"1463\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2188\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1463\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1466\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2161\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2189\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2162\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2170\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1472\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2328\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1467\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2171\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1471\",\"type\":\"ResetTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1473\"}},\"id\":\"1469\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2329\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2095\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1841\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1698\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1699\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1971\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Stress\",\"@x MPa\"],[\"Height\",\"@y mm\"]]},\"id\":\"1977\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis\":{\"id\":\"1966\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1969\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1840\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1701\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1705\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2361\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2232\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[0,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,-1.7857142857142858,0],\"y\":[0,0.0,4.081632653061225,8.16326530612245,12.244897959183675,16.3265306122449,20.408163265306122,24.48979591836735,28.571428571428573,32.6530612244898,36.734693877551024,40.816326530612244,44.89795918367347,48.9795918367347,53.06122448979592,57.142857142857146,61.224489795918366,65.3061224489796,69.38775510204081,73.46938775510205,77.55102040816327,81.63265306122449,85.71428571428572,89.79591836734694,93.87755102040816,97.9591836734694,102.04081632653062,106.12244897959184,110.20408163265306,114.28571428571429,118.36734693877551,122.44897959183673,126.53061224489797,130.6122448979592,134.69387755102042,138.77551020408163,142.85714285714286,146.9387755102041,151.0204081632653,155.10204081632654,159.18367346938777,163.26530612244898,167.3469387755102,171.42857142857144,175.51020408163265,179.59183673469389,183.67346938775512,187.75510204081633,191.83673469387756,195.9183673469388,200.0,200]},\"selected\":{\"id\":\"2332\"},\"selection_policy\":{\"id\":\"2331\"}},\"id\":\"1708\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1975\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1703\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1970\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1842\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2299\"},\"selection_policy\":{\"id\":\"2298\"}},\"id\":\"1868\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1976\"}},\"id\":\"1972\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2233\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2352\"},\"selection_policy\":{\"id\":\"2351\"}},\"id\":\"1702\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1973\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1974\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1702\"},\"glyph\":{\"id\":\"1703\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1705\"},\"nonselection_glyph\":{\"id\":\"1704\"},\"view\":{\"id\":\"1707\"}},\"id\":\"1706\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1857\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2235\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1711\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1704\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1976\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1708\"},\"glyph\":{\"id\":\"1709\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1711\"},\"nonselection_glyph\":{\"id\":\"1710\"},\"view\":{\"id\":\"1713\"}},\"id\":\"1712\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1858\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":-1.2120256565243244},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1995\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"2236\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1702\"}},\"id\":\"1707\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1856\"}},\"id\":\"1861\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2362\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1708\"}},\"id\":\"1713\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1710\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1733\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1735\"},\"nonselection_glyph\":{\"id\":\"1734\"},\"view\":{\"id\":\"1737\"}},\"id\":\"1736\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"angle\":{\"value\":3.665191429188092},\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2026\",\"type\":\"Scatter\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[4.5,5.5],\"y\":[-6.123233995736766e-17,-1.8369701987210297e-16]},\"selected\":{\"id\":\"2343\"},\"selection_policy\":{\"id\":\"2342\"}},\"id\":\"2025\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1851\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2018\"}},\"id\":\"2024\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[50]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAVvJyCl1MQQBW8nIKXUyBAIBrrQ2N9KEAVvJyCl1MwQBrrQ2N9aDRAIBrrQ2N9OEAlSZIkSZI8QBW8nIKXU0BAmFPwcgpeQkAa60NjfWhEQJ2Cl1PwckZAIBrrQ2N9SECisT401odKQCVJkiRJkkxAp+DlFLycTkAVvJyCl1NQQNaHxvrQWFFAmFPwcgpeUkBZHxrrQ2NTQBrrQ2N9aFRA3LZt27ZtVUCdgpdT8HJWQF5OwcspeFdAIBrrQ2N9WEDh5RS8nIJZQKKxPjTWh1pAY31orA+NW0AlSZIkSZJcQOYUvJyCl11Ap+DlFLycXkBprA+N9aFfQBW8nIKXU2BA9qGxPjTWYEDWh8b60FhhQLdt27Zt22FAmFPwcgpeYkB4OQUvp+BiQFkfGutDY2NAOgUvp+DlY0Aa60NjfWhkQPvQWB8a62RA3LZt27ZtZUC8nIKXU/BlQJ2Cl1PwcmZAfmisD431ZkBeTsHLKXhnQD801ofG+mdAIBrrQ2N9aEAAAAAAAABpQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[50]}},\"selected\":{\"id\":\"2322\"},\"selection_policy\":{\"id\":\"2321\"}},\"id\":\"1764\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1723\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2022\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1721\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1859\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1989\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1727\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-30.0,30.0],\"y\":[100.0,100.0]},\"selected\":{\"id\":\"2334\"},\"selection_policy\":{\"id\":\"2333\"}},\"id\":\"1720\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1720\"},\"glyph\":{\"id\":\"1721\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1723\"},\"nonselection_glyph\":{\"id\":\"1722\"},\"view\":{\"id\":\"1725\"}},\"id\":\"1724\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1856\"},\"glyph\":{\"id\":\"1857\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1859\"},\"nonselection_glyph\":{\"id\":\"1858\"},\"view\":{\"id\":\"1861\"}},\"id\":\"1860\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1720\"}},\"id\":\"1725\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1722\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1970\"},{\"id\":\"1971\"},{\"id\":\"1972\"},{\"id\":\"1973\"},{\"id\":\"1974\"},{\"id\":\"1975\"},{\"id\":\"1977\"}]},\"id\":\"1978\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1734\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":[-1.6666666666666667,0,0,-1.6666666666666667],\"y\":[-10,-10,10,10]},\"selected\":{\"id\":\"2337\"},\"selection_policy\":{\"id\":\"2336\"}},\"id\":\"1856\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1726\"}},\"id\":\"1731\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1988\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1729\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1836\"},{\"id\":\"1837\"},{\"id\":\"1838\"},{\"id\":\"1839\"},{\"id\":\"1840\"},{\"id\":\"1841\"}]},\"id\":\"1843\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1726\"},\"glyph\":{\"id\":\"1727\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1729\"},\"nonselection_glyph\":{\"id\":\"1728\"},\"view\":{\"id\":\"1731\"}},\"id\":\"1730\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1877\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":[0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0],\"y\":[0,0.0,4.081632653061225,8.16326530612245,12.244897959183675,16.3265306122449,20.408163265306122,24.48979591836735,28.571428571428573,32.6530612244898,36.734693877551024,40.816326530612244,44.89795918367347,48.9795918367347,53.06122448979592,57.142857142857146,61.224489795918366,65.3061224489796,69.38775510204081,73.46938775510205,77.55102040816327,81.63265306122449,85.71428571428572,89.79591836734694,93.87755102040816,97.9591836734694,102.04081632653062,106.12244897959184,110.20408163265306,114.28571428571429,118.36734693877551,122.44897959183673,126.53061224489797,130.6122448979592,134.69387755102042,138.77551020408163,142.85714285714286,146.9387755102041,151.0204081632653,155.10204081632654,159.18367346938777,163.26530612244898,167.3469387755102,171.42857142857144,175.51020408163265,179.59183673469389,183.67346938775512,187.75510204081633,191.83673469387756,195.9183673469388,200.0,200]},\"selected\":{\"id\":\"2360\"},\"selection_policy\":{\"id\":\"2359\"}},\"id\":\"1726\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1934\"},\"glyph\":{\"id\":\"1935\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1937\"},\"nonselection_glyph\":{\"id\":\"1936\"},\"view\":{\"id\":\"1939\"}},\"id\":\"1938\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1728\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1862\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2225\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1863\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1006\"},\"glyph\":{\"id\":\"1751\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1753\"},\"nonselection_glyph\":{\"id\":\"1752\"},\"view\":{\"id\":\"1755\"}},\"id\":\"1754\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1986\"},\"glyph\":{\"id\":\"1988\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1990\"},\"nonselection_glyph\":{\"id\":\"1989\"},\"view\":{\"id\":\"1992\"}},\"id\":\"1991\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1883\",\"type\":\"Text\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1733\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"value\":0.0}},\"id\":\"1865\",\"type\":\"VeeHead\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1865\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"line_width\":{\"value\":0.0},\"source\":{\"id\":\"2260\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1866\",\"type\":\"Arrow\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1772\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAABapAw83ZofwM4Pi5SBpyvAchzHcRzHMcC35odFysAzwLfmh0XKwDPAchzHcRzHMcDLD4uUgacrwFSkDDzdmh/AAAAAAAAAAAA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]},\"y\":{\"__ndarray__\":\"AAAAAAAALsBVVVVVVVUnwKqqqqqqqiDAAAAAAAAAFMCoqqqqqqr6v7Cqqqqqqvo/AAAAAAAAFECsqqqqqqogQFZVVVVVVSdAAAAAAAAALkA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[10]}},\"selected\":{\"id\":\"2288\"},\"selection_policy\":{\"id\":\"2287\"}},\"id\":\"1986\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[0.0]},\"selected\":{\"id\":\"2301\"},\"selection_policy\":{\"id\":\"2300\"}},\"id\":\"1875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvx7UQR3UQU2/HtRBHdRBTb8e1EEd1EFNvw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[50]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAVvJyCl1MQQBW8nIKXUyBAIBrrQ2N9KEAVvJyCl1MwQBrrQ2N9aDRAIBrrQ2N9OEAlSZIkSZI8QBW8nIKXU0BAmFPwcgpeQkAa60NjfWhEQJ2Cl1PwckZAIBrrQ2N9SECisT401odKQCVJkiRJkkxAp+DlFLycTkAVvJyCl1NQQNaHxvrQWFFAmFPwcgpeUkBZHxrrQ2NTQBrrQ2N9aFRA3LZt27ZtVUCdgpdT8HJWQF5OwcspeFdAIBrrQ2N9WEDh5RS8nIJZQKKxPjTWh1pAY31orA+NW0AlSZIkSZJcQOYUvJyCl11Ap+DlFLycXkBprA+N9aFfQBW8nIKXU2BA9qGxPjTWYEDWh8b60FhhQLdt27Zt22FAmFPwcgpeYkB4OQUvp+BiQFkfGutDY2NAOgUvp+DlY0Aa60NjfWhkQPvQWB8a62RA3LZt27ZtZUC8nIKXU/BlQJ2Cl1PwcmZAfmisD431ZkBeTsHLKXhnQD801ofG+mdAIBrrQ2N9aEAAAAAAAABpQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[50]}},\"selected\":{\"id\":\"2310\"},\"selection_policy\":{\"id\":\"2309\"}},\"id\":\"1744\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1868\"},\"glyph\":{\"id\":\"1870\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1872\"},\"nonselection_glyph\":{\"id\":\"1871\"},\"view\":{\"id\":\"1874\"}},\"id\":\"1873\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[0.0],\"y\":[15.0]},\"selected\":{\"id\":\"2290\"},\"selection_policy\":{\"id\":\"2289\"}},\"id\":\"1993\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1871\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1872\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2238\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2021\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1935\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2018\"},\"glyph\":{\"id\":\"2020\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2022\"},\"nonselection_glyph\":{\"id\":\"2021\"},\"view\":{\"id\":\"2024\"}},\"id\":\"2023\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1737\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1756\"}},\"id\":\"1761\",\"type\":\"CDSView\"},{\"attributes\":{\"angle\":{\"value\":3.665191429188092},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2027\",\"type\":\"Scatter\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1739\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1990\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2239\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[-1.2,1.2],\"y\":[0,0]},\"selected\":{\"id\":\"2362\"},\"selection_policy\":{\"id\":\"2361\"}},\"id\":\"1738\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1868\"}},\"id\":\"1874\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1738\"},\"glyph\":{\"id\":\"1739\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1741\"},\"nonselection_glyph\":{\"id\":\"1740\"},\"view\":{\"id\":\"1743\"}},\"id\":\"1742\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1986\"}},\"id\":\"1992\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1875\"}},\"id\":\"1880\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1993\"}},\"id\":\"1998\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1878\",\"type\":\"Scatter\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1747\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2098\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[3.0,4.0],\"y\":[0,0]},\"selected\":{\"id\":\"2197\"},\"selection_policy\":{\"id\":\"2196\"}},\"id\":\"1999\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2240\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1744\"},\"glyph\":{\"id\":\"1745\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1747\"},\"nonselection_glyph\":{\"id\":\"1746\"},\"view\":{\"id\":\"1749\"}},\"id\":\"1748\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"angle\":{\"value\":-1.2120256565243244},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1996\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":0},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1876\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1875\"},\"glyph\":{\"id\":\"1876\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1878\"},\"nonselection_glyph\":{\"id\":\"1877\"},\"view\":{\"id\":\"1880\"}},\"id\":\"1879\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2216\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2241\",\"type\":\"AllLabels\"},{\"attributes\":{\"text\":\"Torsion M\\u209c=100 kNm (applied)\"},\"id\":\"1899\",\"type\":\"Div\"},{\"attributes\":{\"angle\":{\"value\":-1.2120256565243244},\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1994\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1738\"}},\"id\":\"1743\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1993\"},\"glyph\":{\"id\":\"1994\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1996\"},\"nonselection_glyph\":{\"id\":\"1995\"},\"view\":{\"id\":\"1998\"}},\"id\":\"1997\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[11.0],\"y\":[1]},\"selected\":{\"id\":\"2303\"},\"selection_policy\":{\"id\":\"2302\"}},\"id\":\"1881\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1745\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2099\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2217\",\"type\":\"Selection\"},{\"attributes\":{\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1882\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1893\"},\"glyph\":{\"id\":\"1894\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1896\"},\"nonselection_glyph\":{\"id\":\"1895\"},\"view\":{\"id\":\"1898\"}},\"id\":\"1897\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1744\"}},\"id\":\"1749\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1752\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1999\"},\"glyph\":{\"id\":\"2001\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2003\"},\"nonselection_glyph\":{\"id\":\"2002\"},\"view\":{\"id\":\"2005\"}},\"id\":\"2004\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2101\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1746\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1758\",\"type\":\"Line\"},{\"attributes\":{\"angle\":{\"value\":3.665191429188092},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"red\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"red\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2028\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":[3.925,3.775],\"y\":[0.0,0.0]},\"selected\":{\"id\":\"2199\"},\"selection_policy\":{\"id\":\"2198\"}},\"id\":\"2006\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1881\"},\"glyph\":{\"id\":\"1882\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1884\"},\"nonselection_glyph\":{\"id\":\"1883\"},\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1751\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"2102\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2014\",\"type\":\"Text\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[5],\"y\":[4]},\"selected\":{\"id\":\"2339\"},\"selection_policy\":{\"id\":\"2338\"}},\"id\":\"1893\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"green\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2001\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1764\"},\"glyph\":{\"id\":\"1765\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1767\"},\"nonselection_glyph\":{\"id\":\"1766\"},\"view\":{\"id\":\"1769\"}},\"id\":\"1768\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"green\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2002\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1764\"}},\"id\":\"1769\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2012\"},\"glyph\":{\"id\":\"2013\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2015\"},\"nonselection_glyph\":{\"id\":\"2014\"},\"view\":{\"id\":\"2017\"}},\"id\":\"2016\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1881\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1753\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1767\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1896\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"green\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2003\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1887\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1006\"}},\"id\":\"1755\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1759\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1999\"}},\"id\":\"2005\",\"type\":\"CDSView\"},{\"attributes\":{\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1888\",\"type\":\"Text\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1766\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2012\"}},\"id\":\"2017\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"text\":[\"\"],\"x\":[6],\"y\":[-5]},\"selected\":{\"id\":\"2305\"},\"selection_policy\":{\"id\":\"2304\"}},\"id\":\"1887\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1765\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"text\":[\"M\\u209c\"],\"x\":[3.5],\"y\":[0.01]},\"selected\":{\"id\":\"2201\"},\"selection_policy\":{\"id\":\"2200\"}},\"id\":\"2012\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Text\"},{\"attributes\":{\"active\":[0],\"js_property_callbacks\":{\"change:active\":[{\"id\":\"2067\"}]},\"labels\":[\"Apply or remove torsion M\\u209c\"]},\"id\":\"1900\",\"type\":\"CheckboxButtonGroup\"},{\"attributes\":{\"source\":{\"id\":\"2006\"}},\"id\":\"2011\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1757\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2006\"},\"glyph\":{\"id\":\"2007\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2009\"},\"nonselection_glyph\":{\"id\":\"2008\"},\"view\":{\"id\":\"2011\"}},\"id\":\"2010\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_baseline\":{\"value\":\"top\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Text\"},{\"attributes\":{\"desired_num_ticks\":3,\"num_minor_ticks\":2},\"id\":\"1782\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"2167\"},\"selection_policy\":{\"id\":\"2166\"}},\"id\":\"2103\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"angle\":{\"value\":0.5235987755982988},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"green\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"green\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2009\",\"type\":\"Scatter\"},{\"attributes\":{\"line_width\":1.5,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1771\",\"type\":\"Line\"},{\"attributes\":{\"text_alpha\":{\"value\":0.2},\"text_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2015\",\"type\":\"Text\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1887\"},\"glyph\":{\"id\":\"1888\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1890\"},\"nonselection_glyph\":{\"id\":\"1889\"},\"view\":{\"id\":\"1892\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text_alpha\":{\"value\":0.1},\"text_baseline\":{\"value\":\"middle\"},\"text_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1895\",\"type\":\"Text\"},{\"attributes\":{\"angle\":{\"value\":0.5235987755982988},\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2007\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1851\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1853\"},\"nonselection_glyph\":{\"id\":\"1852\"},\"view\":{\"id\":\"1855\"}},\"id\":\"1854\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1893\"}},\"id\":\"1898\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1776\"},\"glyph\":{\"id\":\"1777\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1779\"},\"nonselection_glyph\":{\"id\":\"1778\"},\"view\":{\"id\":\"1781\"}},\"id\":\"1780\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"angle\":{\"value\":0.5235987755982988},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"green\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"green\"},\"marker\":{\"value\":\"triangle\"},\"size\":{\"value\":15},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2008\",\"type\":\"Scatter\"},{\"attributes\":{\"below\":[{\"id\":\"1909\"}],\"center\":[{\"id\":\"1912\"},{\"id\":\"1916\"}],\"height\":200,\"left\":[{\"id\":\"1913\"}],\"renderers\":[{\"id\":\"1938\"},{\"id\":\"1944\"},{\"id\":\"1950\"}],\"title\":{\"id\":\"2095\"},\"toolbar\":{\"id\":\"1925\"},\"toolbar_location\":null,\"width\":700,\"x_range\":{\"id\":\"1011\"},\"x_scale\":{\"id\":\"1905\"},\"y_range\":{\"id\":\"1903\"},\"y_scale\":{\"id\":\"1907\"}},\"id\":\"1901\",\"subtype\":\"Figure\",\"type\":\"Plot\"}],\"root_ids\":[\"2087\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n",
- " const render_items = [{\"docid\":\"59ecfd77-c705-4c8c-9c88-28bd01828977\",\"root_ids\":[\"2087\"],\"roots\":{\"2087\":\"272a9d88-57a5-466e-b9b2-cd6e1a1520cb\"}}];\n",
- " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
- "\n",
- " }\n",
- " if (root.Bokeh !== undefined) {\n",
- " embed_document(root);\n",
- " } else {\n",
- " let attempts = 0;\n",
- " const timer = setInterval(function(root) {\n",
- " if (root.Bokeh !== undefined) {\n",
- " clearInterval(timer);\n",
- " embed_document(root);\n",
- " } else {\n",
- " attempts++;\n",
- " if (attempts > 100) {\n",
- " clearInterval(timer);\n",
- " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
- " }\n",
- " }\n",
- " }, 10, root)\n",
- " }\n",
- "})(window);"
- ],
- "application/vnd.bokehjs_exec.v0+json": ""
- },
- "metadata": {
- "application/vnd.bokehjs_exec.v0+json": {
- "id": "2087"
- }
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "hidden_code_nb_torsion.main_code(L, h, b, t, A, Iy, Iz, yG, y_n_axis, q, P, Mt, E, N, V, M, T, Rx, Ry_l, Ry_r, discr_NVM, x_discr, N_discr, V_discr, M_discr, T_discr)"
- ]
- }
- ],
- "metadata": {
- "interpreter": {
- "hash": "f29f3a16a5c47811d2900cf82e6584cc83572ddcd5db25d9cf9bef77823b3d45"
- },
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}

Event Timeline