private bool IsMemberDOFRigid(bool[] bNodeDOF, ArrayList iMemberCollection, CNRelease NRelease, e3D_DOF eDOF) { if (NRelease == null) // No release at point - support restraints are governing if (iMemberCollection == null || iMemberCollection.Count == 1) // None or just one FEM Member is connected, means free end - support DOF are governing return bNodeDOF[(int)eDOF]; else // Node is connected to two or more members, releases are necessary to define DOF return true; // Two members connection is rigid as default if no release exists else { // Some release exists if (iMemberCollection == null || iMemberCollection.Count == 1) // None or just one FEM Member is connected, means free end { // default Node DOF are false, therefore it is always false if no support exist in node if (bNodeDOF[(int)eDOF] == true && NRelease.m_bRestrain[(int)eDOF] == true) return true; else return false; } else { // More members is connected, do not take into account nodal support, just member releases if (NRelease.m_bRestrain[(int)eDOF] == true) // Release DOF rigid restraint exist and is ridig return true; else return false; } } }
private FEM_CALC_BASE.Enums.EElemSuppType2D Get_iElemSuppType2D_Part_UR(e3D_DOF eDOF_U, e3D_DOF eDOF_R) { // Is DOF rigid? // true - 1 - yes, it is // false - 0 - no, it isnt // true - 1 restraint (infinity rigidity) / false - 0 - free (zero rigidity) if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // 00_00 return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_00_00; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // 00 _ __ return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_00___; } else if ( !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // __ _ 00 return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl____00; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // 00 _ 0_ return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_00_0_; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // 0_ _ 00 return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_0__00; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // 00 _ _0 return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_00__0; } else if ( !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // _0 _ 00 return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl__0_00; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // 0_ _ 0_ return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_0__0_; } else if ( !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // _0 _ _0 return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl__0__0; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // 0_ _ __ return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_0____; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // __ _ 0_ return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl____0_; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // _0 _ __ return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl__0___; } else if ( IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_U) && !IsMemberDOFRigid(NodeStart.m_ArrNodeDOF, NodeStart.m_iMemberCollection, Member.CnRelease1, eDOF_R) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_U) && !IsMemberDOFRigid(NodeEnd.m_ArrNodeDOF, NodeEnd.m_iMemberCollection, Member.CnRelease2, eDOF_R) ) { // __ _ _0 return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl_____0; } else { // __ _ __ // Not supported member !!! or other not implemented restraint conditions return FEM_CALC_BASE.Enums.EElemSuppType2D.eEl______; } }