import numpy as np 
from computeLocalElemStiffnessMatrix import computeInitialLocalMaterialElemStiffnessMatrix 
from computeRotationMatrix import computeRotationMatrix


def assembleInitialGlobalMaterialStiffnessMatrix(nDofTot,numEquations,element_data):
    KMaterial_initialGlobal=np.zeros((nDofTot,nDofTot))

    for elemIdx, elem in enumerate(element_data):
        # Compute element stiffness matrices in local reference system
        K_elemInitial_inLocalRef=computeInitialLocalMaterialElemStiffnessMatrix(elem)

        # Compute element stiffness matrices in global reference system
        R=computeRotationMatrix(elem)
        KMaterial_elemInitial_inGlobalRef=np.dot(np.dot(R.T,K_elemInitial_inLocalRef),R)

        # Assemble global stiffness matrix
        dof_elem=np.array(numEquations[elemIdx]).astype(int)
        KMaterial_initialGlobal[np.ix_(dof_elem,dof_elem)]+=KMaterial_elemInitial_inGlobalRef

    return KMaterial_initialGlobal