import json
from copy import deepcopy
import numpy as np

template_file = "./json/template.json"
output_file = "./json/dynamicVal16.json"

with open(template_file) as f:
    data = json.load(f)

setup = data["setup"]
t_node = deepcopy(setup["nodes"][0])
t_edge = deepcopy(setup["edges"][0])

L = 1
w = 0.01
h = 0.01
A = w * h
E = 69e9  # Pa
rho = 2700

n_elem = 20

setup["loads"] = []
setup["fixedDisplacements"] = []
setup["numTimeSteps"] = 3000000
setup["maxNumFiles"] = 1200
setup["poisson"] = False
setup["scale"] = 1
setup["linear"] = True
setup["globalDamping"] = 0
setup["thermal"] = False

t_node["material"] = {
    "cTE": 0,
    "poissonRatio": 0,
    "density": rho,
    "area": A,
    "stiffness": E,
}
t_edge["material"] = t_node["material"]
nodes_x = np.linspace(0, L, n_elem + 1)

nodes = []
for i, x in enumerate(nodes_x):

    t_node["id"] = "n{0}".format(i)
    t_node["degrees_of_freedom"] = [
        0 + 6 * i,
        1 + 6 * i,
        2 + 6 * i,
        3 + 6 * i,
        4 + 6 * i,
        5 + 6 * i,
    ]
    if i == 0:
        t_node["restrained_degrees_of_freedom"] = [True, True, True, True, True, True]
    else:
        t_node["restrained_degrees_of_freedom"] = [
            False,
            False,
            False,
            False,
            False,
            False,
        ]
    t_node["position"]["x"] = x
    t_node["position"]["y"] = 0
    t_node["position"]["z"] = 0
    nodes.append(deepcopy(t_node))
setup["ndofs"] = 6 * (n_elem + 1)
edges = []
for i in range(n_elem):
    t_edge["id"] = "e{0}".format(i)
    t_edge["source"] = i + 1
    t_edge["target"] = i
    edges.append(deepcopy(t_edge))

setup["nodes"] = nodes
setup["edges"] = edges

with open(output_file, "w") as f:
    json.dump(data, f)