Example #1
0
        static void Main(string[] args)
        {
            var id = new OpenSees.IDWrapper(10);

            id[1] = 2;
            var mat = new OpenSees.MatrixWrapper(2, 2);

            mat[1, 1] = 3;
            var theDomain = new OpenSees.Components.DomainWrapper();
            var node1     = new OpenSees.Components.NodeWrapper(1, 2, 0, 0);
            var node2     = new OpenSees.Components.NodeWrapper(2, 2, 144.0, 0);
            var node3     = new OpenSees.Components.NodeWrapper(3, 2, 168.0, 0);
            var node4     = new OpenSees.Components.NodeWrapper(4, 2, 72.0, 96.0);

            theDomain.AddNode(new OpenSees.Components.NodeWrapper[] { node1, node2, node3, node4 });

            var theMaterial = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(1, 3000, 0);
            var truss1      = new OpenSees.Elements.TrussWrapper(1, 2, 1, 4, theMaterial, 10.0, 0, 0, 0);
            var truss2      = new OpenSees.Elements.TrussWrapper(2, 2, 2, 4, theMaterial, 5.0, 0, 0, 0);
            var truss3      = new OpenSees.Elements.TrussWrapper(3, 2, 3, 4, theMaterial, 5.0, 0, 0, 0);

            theDomain.AddElement(new OpenSees.Elements.ElementWrapper[] { truss1, truss2, truss3 });

            var sp1 = new OpenSees.Components.Constraints.SP_ConstraintWrapper(1, 0, 0.0, true);
            var sp2 = new OpenSees.Components.Constraints.SP_ConstraintWrapper(1, 1, 0.0, true);
            var sp3 = new OpenSees.Components.Constraints.SP_ConstraintWrapper(2, 0, 0.0, true);
            var sp4 = new OpenSees.Components.Constraints.SP_ConstraintWrapper(2, 1, 0.0, true);
            var sp5 = new OpenSees.Components.Constraints.SP_ConstraintWrapper(3, 0, 0.0, true);
            var sp6 = new OpenSees.Components.Constraints.SP_ConstraintWrapper(3, 1, 0.0, true);

            theDomain.AddSP_Constraint(new OpenSees.Components.Constraints.SP_ConstraintWrapper[] { sp1, sp2, sp3, sp4, sp5, sp6 });

            var theSeries      = new OpenSees.Components.Timeseries.LinearSeriesWrapper();
            var theLoadPattern = new OpenSees.Components.LoadPatterns.LoadPatternWrapper(1);

            theLoadPattern.SetTimeSeries(theSeries);
            theDomain.AddLoadPattern(theLoadPattern);

            var theLoadValues = new OpenSees.VectorWrapper(2);

            theLoadValues[0] = 100;
            theLoadValues[1] = -50;

            var nodalLoad = new OpenSees.Components.Loads.NodalLoadWrapper(1, 4, theLoadValues, false);

            theDomain.AddNodalLoad(nodalLoad, 1);

            var theModel      = new OpenSees.AnalysisModelWrapper();
            var theSolnAlgo   = new OpenSees.Algorithms.LinearWrapper();
            var theIntegrator = new OpenSees.Integrators.Static.LoadControlWrapper(1.0, 1, 1.0, 1.0);
            var theHandler    = new OpenSees.Handlers.PlainHandlerWrapper();
            var theRCM        = new OpenSees.GraphNumberers.RCMWrapper(false);
            var theNumberer   = new OpenSees.Numberers.DOF_NumbererWrapper(theRCM);
            var theSolver     = new OpenSees.Systems.Linears.BandSPDLinLapackSolverWrapper();
            var theSOE        = new OpenSees.Systems.Linears.BandSPDLinSOEWrapper(theSolver);
            var theAnalysis   = new OpenSees.Analysis.StaticAnalysisWrapper(
                theDomain,
                theHandler,
                theNumberer,
                theModel,
                theSolnAlgo,
                theSOE,
                theIntegrator,
                null);

            int numSteps = 1;
            var ret      = theAnalysis.Analyze(numSteps);

            theDomain.CalculateNodalReactions(0);
            var disp = node4.GetCommitDisp();

            Console.WriteLine($"node disps : {{{string.Join(" ,", disp)}}}");
            Console.ReadKey();
        }
Example #2
0
        static void Main(string[] args)
        {
            var theDomain = new OpenSees.Components.DomainWrapper();

            #region paramaters

            var length = 1400.0;
            var width_Timoshenko_long      = 1100.0;
            var width_Timoshenko_trans     = 1400.0;
            var width_inside_long          = 385.0;
            var width_inside_trans         = 465.0;
            var width_Perimeter_long_right = 220.0;
            var width_Perimeter_long_left  = 110.0;
            var width_Perimeter_trans_up   = 250.0;
            var width_Perimeter_trans_down = 140.0;
            var tickness = 40.0;

            var Tension       = 666.0;
            var IP            = 8590.0;
            var OOP           = 7177.0;
            var about_Tension = 1000000000000000.0;
            var about_IP      = 1000000000000000.0;;
            var about_OOP     = 93000.0;

            var E_Timber_Long  = 13200.0;
            var E_Timber_Trans = 2200.0;
            var poisson_ratio  = 0.4;
            var G_Timber       = 820.0;

            var Area_Timoshenko_long        = width_Timoshenko_long * tickness;
            var Iz_Timoshenko_long          = (tickness * width_Timoshenko_long * width_Timoshenko_long * width_Timoshenko_long) / 12.0;
            var Iy_Timoshenko_long          = (width_Timoshenko_long * tickness * tickness * tickness) / (12.0);
            var Av_Timoshenko_long          = (5 * width_Timoshenko_long * tickness) / (6);
            var Torsional_J_Timoshenko_long = (width_Timoshenko_long * tickness * (width_Timoshenko_long * width_Timoshenko_long + tickness * tickness)) / 12.0;

            var Area_Timoshenko_trans        = width_Timoshenko_trans * tickness;
            var Iz_Timoshenko_trans          = (tickness * width_Timoshenko_trans * width_Timoshenko_trans * width_Timoshenko_trans) / (12.0);
            var Iy_Timoshenko_trans          = (width_Timoshenko_trans * tickness * tickness * tickness) / (12.0);
            var Av_Timoshenko_trans          = (5 * width_Timoshenko_trans * tickness) / (6);
            var Torsional_J_Timoshenko_trans = (width_Timoshenko_trans * tickness * (width_Timoshenko_trans * width_Timoshenko_trans + tickness * tickness)) / 12.0;

            var Area_Perimeter_long_right        = width_Perimeter_long_right * tickness;
            var Iz_Perimeter_long_right          = 1.0 * (tickness * width_Perimeter_long_right * width_Perimeter_long_right * width_Perimeter_long_right) / (12.0);
            var Iy_Perimeter_long_right          = 1.0 * (width_Perimeter_long_right * tickness * tickness * tickness) / (12.0);
            var Av_Perimeter_long_right          = (5 * width_Perimeter_long_right * tickness) / (6);
            var Torsional_J_Perimeter_long_right = (width_Perimeter_long_right * tickness * (width_Perimeter_long_right * width_Perimeter_long_right + tickness * tickness)) / 12.0;

            var Area_Perimeter_long_left        = width_Perimeter_long_left * tickness;
            var Iz_Perimeter_long_left          = 1.0 * (tickness * width_Perimeter_long_left * width_Perimeter_long_left * width_Perimeter_long_left) / (12.0);
            var Iy_Perimeter_long_left          = 1.0 * (width_Perimeter_long_left * tickness * tickness * tickness) / (12.0);
            var Av_Perimeter_long_left          = (5 * width_Perimeter_long_left * tickness) / (6);
            var Torsional_J_Perimeter_long_left = (width_Perimeter_long_left * tickness * (width_Perimeter_long_left * width_Perimeter_long_left + tickness * tickness)) / 12.0;

            var Area_Perimeter_trans_up        = width_Perimeter_trans_up * tickness;
            var Iz_Perimeter_trans_up          = 1.0 * (tickness * width_Perimeter_trans_up * width_Perimeter_trans_up * width_Perimeter_trans_up) / (12.0);
            var Iy_Perimeter_trans_up          = 1.0 * (width_Perimeter_trans_up * tickness * tickness * tickness) / (12.0);
            var Av_Perimeter_trans_up          = (5 * width_Perimeter_trans_up * tickness) / (6);
            var Torsional_J_Perimeter_trans_up = (width_Perimeter_trans_up * tickness * (width_Perimeter_trans_up * width_Perimeter_trans_up + tickness * tickness)) / 12.0;

            var Area_Perimeter_trans_down        = width_Perimeter_trans_down * tickness;
            var Iz_Perimeter_trans_down          = 1.0 * (tickness * width_Perimeter_trans_down * width_Perimeter_trans_down * width_Perimeter_trans_down) / (12.0);
            var Iy_Perimeter_trans_down          = 1.0 * (width_Perimeter_trans_down * tickness * tickness * tickness) / (12.0);
            var Av_Perimeter_trans_down          = (5 * width_Perimeter_trans_down * tickness) / (6);
            var Torsional_J_Perimeter_trans_down = (width_Perimeter_trans_down * tickness * (width_Perimeter_trans_down * width_Perimeter_trans_down + tickness * tickness)) / 12.0;

            var Area_inside_long        = width_inside_long * tickness;
            var Iz_inside_long          = (tickness * width_inside_long * width_inside_long * width_inside_long) / (12.0);
            var Iy_inside_long          = (width_inside_long * tickness * tickness * tickness) / (12.0);
            var Av_inside_long          = (5 * width_inside_long * tickness) / (6);
            var Torsional_J_inside_long = (width_inside_long * tickness * (width_inside_long * width_inside_long + tickness * tickness)) / 12.0;

            var Area_inside_trans        = width_inside_trans * tickness;
            var Iz_inside_trans          = (tickness * width_inside_trans * width_inside_trans * width_inside_trans) / (12.0);
            var Iy_inside_trans          = (width_inside_trans * tickness * tickness * tickness) / (12.0);
            var Av_inside_trans          = (5 * width_inside_trans * tickness) / (6);
            var Torsional_J_inside_trans = (width_inside_trans * tickness * (width_inside_trans * width_inside_trans + tickness * tickness)) / 12.0;


            var rigidmattag      = 1;
            var semi_rigidmattag = 101;

            var Freemattag = 2;

            var timbermattag_long  = 30;
            var timbermattag_trans = 31;

            var Axial_perimeter_long_right = 40;
            var Axial_perimeter_long_left  = 41;
            var Axial_perimeter_trans_up   = 42;
            var Axial_perimeter_trans_down = 43;
            var Axial_inside_long          = 44;
            var Axial_inside_trans         = 45;

            var Shear_1_perimeter_long_right = 50;
            var Shear_1_perimeter_long_left  = 51;
            var Shear_1_perimeter_trans_up   = 52;
            var Shear_1_perimeter_trans_down = 53;
            var Shear_1_inside_long          = 54;
            var Shear_1_inside_trans         = 55;

            var Shear_2_perimeter_long  = 60;
            var Shear_2_perimeter_trans = 61;
            var Shear_2_inside_long     = 62;
            var Shear_2_inside_trans    = 63;

            var Trans_Shear_Timoshenko_Eq = 70;
            var Long_Shear_Timoshenko_Eq  = 71;

            var Stiffness_Tension       = 10;
            var Stiffness_IP            = 11;
            var Stiffness_OOP           = 12;
            var Stiffness_about_Tension = 13;
            var Stiffness_about_IP      = 14;
            var Stiffness_about_OOP     = 15;
            #endregion

            #region materials

            var rigidmattagMat      = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(rigidmattag, 1.0e+15, 0);                                                                              //uniaxialMaterial Elastic $$rigidmattag[expr 1.0e+15]
            var semi_rigidmattagMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(semi_rigidmattag, 1.0e+4, 0);                                                                          //uniaxialMaterial Elastic $semi_rigidmattag[expr 1.0e+4]
            var FreemattagMat       = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Freemattag, 1.0e-1, 0);                                                                                // uniaxialMaterial Elastic $Freemattag[expr 1.0e-1]

            var timbermattag_longMat          = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(timbermattag_long, E_Timber_Long, 0);                                                        //  uniaxialMaterial Elastic $timbermattag_long          $E_Timber_Long
            var timbermattag_transMat         = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(timbermattag_trans, E_Timber_Trans, 0);                                                      //  uniaxialMaterial    Elastic $timbermattag_trans         $E_Timber_Trans
            var Axial_perimeter_long_rightMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Axial_perimeter_long_right, 100.0 * E_Timber_Long * Area_Perimeter_long_right / length, 0);  // uniaxialMaterial    Elastic $Axial_perimeter_long_right[expr 100.0 *$E_Timber_Long *$Area_Perimeter_long_right /$length];         # for LT2
            var Axial_perimeter_long_leftMat  = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Axial_perimeter_long_left, 100.0 * E_Timber_Long * Area_Perimeter_long_left / length, 0);    // uniaxialMaterial Elastic $Axial_perimeter_long_left[expr 100.0 *$E_Timber_Long *$Area_Perimeter_long_left /$length];      # for LT2
            var Axial_perimeter_trans_upMat   = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Axial_perimeter_trans_up, 100.0 * E_Timber_Trans * Area_Perimeter_trans_up / length, 0);     // uniaxialMaterial Elastic $Axial_perimeter_trans_up[expr 100.0 *$E_Timber_Trans *$Area_Perimeter_trans_up /$length];      # for LT2
            var Axial_perimeter_trans_downMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Axial_perimeter_trans_down, 100.0 * E_Timber_Trans * Area_Perimeter_trans_down / length, 0); //uniaxialMaterial Elastic $Axial_perimeter_trans_down[expr 100.0 *$E_Timber_Trans *$Area_Perimeter_trans_down /$length];        # for LT2
            var Axial_inside_longMat          = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Axial_inside_long, 1.0 * E_Timber_Long * Area_inside_long / length, 0);                      // uniaxialMaterial Elastic $Axial_inside_long[expr 1.*$E_Timber_Long *$Area_inside_long /$length];             # for LT2
            var Axial_inside_transMat         = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Axial_inside_trans, 1.0 * E_Timber_Trans * Area_inside_trans / length, 0);                   //  uniaxialMaterial Elastic $Axial_inside_trans[expr 1.*$E_Timber_Trans *$Area_inside_trans /$length];           # for LT2


            var Shear_1_perimeter_long_rightMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_1_perimeter_long_right, 100.0 * (5 * width_Perimeter_long_right * tickness) / (6), 0); // uniaxialMaterial Elastic $Shear_1_perimeter_long_right[expr 100.0 * (5 *$width_Perimeter_long_right *$tickness)/ (6)];
            var Shear_1_perimeter_long_leftMat  = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_1_perimeter_long_left, 100.0 * (5 * width_Perimeter_long_left * tickness) / (6), 0);   // uniaxialMaterial Elastic $Shear_1_perimeter_long_left[expr 100.0 * (5 *$width_Perimeter_long_left *$tickness)/ (6)];
            var Shear_1_perimeter_trans_upMat   = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_1_perimeter_trans_up, 100.0 * (5 * width_Perimeter_trans_up * tickness) / (6), 0);     // uniaxialMaterial Elastic $Shear_1_perimeter_trans_up[expr 100.0 * (5 *$width_Perimeter_trans_up *$tickness)/ (6)];

            var Shear_1_perimeter_trans_downMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_1_perimeter_trans_down, 100.0 * (5 * width_Perimeter_trans_down * tickness) / (6), 0); // uniaxialMaterial Elastic $Shear_1_perimeter_trans_down[expr 100.0 * (5 *$width_Perimeter_trans_down *$tickness)/ (6)];
            var Shear_1_inside_longMat          = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_1_inside_long, 1.0 * (5 * width_inside_long * tickness) / (6), 0);                     // uniaxialMaterial Elastic $Shear_1_inside_long[expr 1.0 * (5 *$width_inside_long *$tickness)/ (6)];
            var Shear_1_inside_transMat         = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_1_inside_trans, 1.0 * (5 * width_inside_trans * tickness) / (6), 0);                   // uniaxialMaterial Elastic $Shear_1_inside_trans[expr 1.0 * (5 *$width_inside_trans *$tickness)/ (6)];

            var Shear_2_perimeter_longMat  = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_2_perimeter_long, 1.0e+15, 0);                                                              //uniaxialMaterial Elastic $Shear_2_perimeter_long     1.0e+15;
            var Shear_2_perimeter_transMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_2_perimeter_trans, 1.0e+15, 0);                                                             // uniaxialMaterial Elastic $Shear_2_perimeter_trans    1.0e+15;
            var Shear_2_inside_longMat     = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_2_inside_long, 1.0e+15, 0);                                                                 // uniaxialMaterial Elastic $Shear_2_inside_long        1.0e+15;
            var Shear_2_inside_transMat    = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Shear_2_inside_trans, 1.0e+15, 0);                                                                // uniaxialMaterial Elastic $Shear_2_inside_trans       1.0e+15;


            var Trans_Shear_Timoshenko_EqMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Trans_Shear_Timoshenko_Eq, 34787.878, 0); // uniaxialMaterial Elastic $Trans_Shear_Timoshenko_Eq[expr 34787.878]
            var Long_Shear_Timoshenko_EqMat  = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Long_Shear_Timoshenko_Eq, 16081.971, 0);  // uniaxialMaterial Elastic $Long_Shear_Timoshenko_Eq[expr 16081.971]


            var Stiffness_TensionMat       = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Stiffness_Tension, Tension, 0);             //  uniaxialMaterial Elastic $Stiffness_Tension[expr   $Tension]
            var Stiffness_IPMat            = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Stiffness_IP, IP, 0);                       // uniaxialMaterial Elastic $Stiffness_IP[expr   $IP]
            var Stiffness_OOPMat           = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Stiffness_OOP, OOP, 0);                     // uniaxialMaterial Elastic $Stiffness_OOP[expr   $OOP]
            var Stiffness_about_TensionMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Stiffness_about_Tension, about_Tension, 0); // uniaxialMaterial Elastic $Stiffness_about_Tension[expr   $about_Tension]
            var Stiffness_about_IPMat      = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Stiffness_about_IP, about_IP, 0);           // uniaxialMaterial Elastic $Stiffness_about_IP[expr   $about_IP]
            var Stiffness_about_OOPMat     = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(Stiffness_about_OOP, about_OOP, 0);         //uniaxialMaterial Elastic $Stiffness_about_OOP[expr   $about_OOP]

            #endregion


            #region nodes
            var node1    = new OpenSees.Components.NodeWrapper(1, 6, 1100, 0, 700);
            var node2    = new OpenSees.Components.NodeWrapper(2, 6, 1100, 0, 466.7);
            var node3    = new OpenSees.Components.NodeWrapper(3, 6, 1100, 0, 765);
            var node4    = new OpenSees.Components.NodeWrapper(4, 6, 0, 0, 700);
            var node5    = new OpenSees.Components.NodeWrapper(5, 6, 0, 0, 933.4);
            var node6    = new OpenSees.Components.NodeWrapper(6, 6, 0, 0, 655);
            var node7    = new OpenSees.Components.NodeWrapper(7, 6, 1100, 0, 1155);
            var node8    = new OpenSees.Components.NodeWrapper(8, 6, 1100, 0, 1400);
            var node9    = new OpenSees.Components.NodeWrapper(9, 6, 1100, 0, 933.4);
            var node10   = new OpenSees.Components.NodeWrapper(10, 6, 1100, 0, 355);
            var node11   = new OpenSees.Components.NodeWrapper(11, 6, 1100, 0, 0);
            var node12   = new OpenSees.Components.NodeWrapper(12, 6, 0, 0, 1045);
            var node13   = new OpenSees.Components.NodeWrapper(13, 6, 0, 0, 1400);
            var node14   = new OpenSees.Components.NodeWrapper(14, 6, 0, 0, 466.7);
            var node15   = new OpenSees.Components.NodeWrapper(15, 6, 0, 0, 245);
            var node16   = new OpenSees.Components.NodeWrapper(16, 6, 0, 0, 0);
            var node17   = new OpenSees.Components.NodeWrapper(17, 6, 1140, 0, 355);
            var node18   = new OpenSees.Components.NodeWrapper(18, 6, 1140, 0, 765);
            var node19   = new OpenSees.Components.NodeWrapper(19, 6, 1140, 0, 1155);
            var node20   = new OpenSees.Components.NodeWrapper(20, 6, 255.207, 0, 1440);
            var node21   = new OpenSees.Components.NodeWrapper(21, 6, 255.207, 0, 1400);
            var node22   = new OpenSees.Components.NodeWrapper(22, 6, 672.394, 0, 1440);
            var node23   = new OpenSees.Components.NodeWrapper(23, 6, 672.394, 0, 1400);
            var node24   = new OpenSees.Components.NodeWrapper(24, 6, -40, 0, 1045);
            var node25   = new OpenSees.Components.NodeWrapper(25, 6, -40, 0, 655);
            var node26   = new OpenSees.Components.NodeWrapper(26, 6, -40, 0, 245);
            var node27   = new OpenSees.Components.NodeWrapper(27, 6, 426.25, 0, -40);
            var node28   = new OpenSees.Components.NodeWrapper(28, 6, 426.25, 0, 0);
            var node29   = new OpenSees.Components.NodeWrapper(29, 6, 838.75, 0, -40);
            var node30   = new OpenSees.Components.NodeWrapper(30, 6, 838.75, 0, 0);
            var node31   = new OpenSees.Components.NodeWrapper(31, 6, 733.34, 0, 1400);
            var node32   = new OpenSees.Components.NodeWrapper(32, 6, 366.67, 0, 1400);
            var node33   = new OpenSees.Components.NodeWrapper(33, 6, 550, 0, 1400);
            var node34   = new OpenSees.Components.NodeWrapper(34, 6, 733.34, 0, 0);
            var node35   = new OpenSees.Components.NodeWrapper(35, 6, 550, 0, 0);
            var node36   = new OpenSees.Components.NodeWrapper(36, 6, 366.67, 0, 0);
            var node1601 = new OpenSees.Components.NodeWrapper(1601, 6, 0, 0, 0);
            var node1602 = new OpenSees.Components.NodeWrapper(1602, 6, 0, 0, 0);
            var node1301 = new OpenSees.Components.NodeWrapper(1301, 6, 0, 0, 1400);
            var node1302 = new OpenSees.Components.NodeWrapper(1302, 6, 0, 0, 1400);
            var node1101 = new OpenSees.Components.NodeWrapper(1101, 6, 1100, 0, 0);
            var node1102 = new OpenSees.Components.NodeWrapper(1102, 6, 1100, 0, 0);
            var node802  = new OpenSees.Components.NodeWrapper(802, 6, 1100, 0, 1400);
            var node801  = new OpenSees.Components.NodeWrapper(801, 6, 1100, 0, 1400);
            var node3201 = new OpenSees.Components.NodeWrapper(3201, 6, 366.67, 0, 1400);
            var node3101 = new OpenSees.Components.NodeWrapper(3101, 6, 733.34, 0, 1400);
            var node3601 = new OpenSees.Components.NodeWrapper(3601, 6, 366.67, 0, 0);
            var node3401 = new OpenSees.Components.NodeWrapper(3401, 6, 733.34, 0, 0);
            var node1402 = new OpenSees.Components.NodeWrapper(1402, 6, 0, 0, 466.7);
            var node502  = new OpenSees.Components.NodeWrapper(502, 6, 0, 0, 933.4);
            var node902  = new OpenSees.Components.NodeWrapper(902, 6, 1100, 0, 933.4);
            var node202  = new OpenSees.Components.NodeWrapper(202, 6, 1100, 0, 466.7);

            var nodes = new OpenSees.Components.NodeWrapper[] { node1, node2, node3, node4, node5, node6, node7, node8, node9, node10,
                                                                node11, node12, node13, node14, node15, node16, node17, node18, node19, node20,
                                                                node21, node22, node23, node24, node25, node26, node27, node28, node29, node30,
                                                                node31, node32, node33, node34, node35, node36,
                                                                node1601, node1602, node1301, node1302, node1101, node1102, node802, node801, node3201, node3101,
                                                                node3601, node3401, node1402, node502, node902, node202 };
            theDomain.AddNode(nodes);

            foreach (var tag in new[] { 27, 29 /*, 24,25,26*/ })
            {
                for (var dof = 0; dof < 6; dof++)
                {
                    theDomain.AddSP_Constraint(new OpenSees.Components.Constraints.SP_ConstraintWrapper(tag, dof, 0.0, true));
                }
            }


            #endregion

            #region elements
            var xzplaneVec = new OpenSees.VectorWrapper(new double[] { 0, 1, 0 });
            var lineartag_TimoshenkoCrdT = new OpenSees.Elements.CrdTransfs.LinearCrdTransf3dWrapper(xzplaneVec);
            var lineartag_VerticalCrdT   = new OpenSees.Elements.CrdTransfs.LinearCrdTransf3dWrapper(xzplaneVec);
            var lineartag_HorizontalCrdT = new OpenSees.Elements.CrdTransfs.LinearCrdTransf3dWrapper(xzplaneVec);

            {
                var dirIds1        = new OpenSees.IDWrapper(new int[] { 1 }); // 2-- for wrapper
                var ele_link_tnl1  = new OpenSees.Elements.TwoNodeLinkWrapper(1, 3, 35, 33, dirIds1, new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Long_Shear_Timoshenko_EqMat }, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl58 = new OpenSees.Elements.TwoNodeLinkWrapper(58, 3, 1, 4, dirIds1, new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Trans_Shear_Timoshenko_EqMat }, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl1);
                theDomain.AddElement(ele_link_tnl58);
            }


            //puts "The Timoshenko beams are defined"
            //# Defining Link Elements Between Zero-Length Nodes
            var dirIds2 = new OpenSees.IDWrapper(new int[] { 0, 1, 2, 3, 4, 5 });


            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_long_leftMat, Shear_1_perimeter_long_leftMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl2       = new OpenSees.Elements.TwoNodeLinkWrapper(2, 3, 16, 1601, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl2);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_trans_downMat, Shear_1_perimeter_trans_downMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl3       = new OpenSees.Elements.TwoNodeLinkWrapper(3, 3, 1602, 16, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl3);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_long_leftMat, Shear_1_perimeter_long_leftMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl4       = new OpenSees.Elements.TwoNodeLinkWrapper(4, 3, 1301, 13, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl4);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_trans_upMat, Shear_1_perimeter_trans_upMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl5       = new OpenSees.Elements.TwoNodeLinkWrapper(5, 3, 1302, 13, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl5);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_long_rightMat, Shear_1_perimeter_long_rightMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl6       = new OpenSees.Elements.TwoNodeLinkWrapper(6, 3, 11, 1101, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl6);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_trans_downMat, Shear_1_perimeter_trans_downMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl7       = new OpenSees.Elements.TwoNodeLinkWrapper(7, 3, 11, 1102, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl7);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_long_rightMat, Shear_1_perimeter_long_rightMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl8       = new OpenSees.Elements.TwoNodeLinkWrapper(8, 3, 801, 8, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl8);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_perimeter_trans_upMat, Shear_1_perimeter_trans_upMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl9       = new OpenSees.Elements.TwoNodeLinkWrapper(9, 3, 8, 802, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl9);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_inside_transMat, Shear_1_inside_transMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl10      = new OpenSees.Elements.TwoNodeLinkWrapper(10, 3, 2, 202, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl11      = new OpenSees.Elements.TwoNodeLinkWrapper(11, 3, 9, 902, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl12      = new OpenSees.Elements.TwoNodeLinkWrapper(12, 3, 502, 5, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl13      = new OpenSees.Elements.TwoNodeLinkWrapper(13, 3, 1402, 14, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(new double[] { -1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl10);
                theDomain.AddElement(ele_link_tnl11);
                theDomain.AddElement(ele_link_tnl12);
                theDomain.AddElement(ele_link_tnl13);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Axial_inside_longMat, Shear_1_inside_longMat, rigidmattagMat, FreemattagMat, FreemattagMat, FreemattagMat };
                var ele_link_tnl14      = new OpenSees.Elements.TwoNodeLinkWrapper(14, 3, 36, 3601, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl15      = new OpenSees.Elements.TwoNodeLinkWrapper(15, 3, 34, 3401, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl16      = new OpenSees.Elements.TwoNodeLinkWrapper(16, 3, 3201, 32, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl17      = new OpenSees.Elements.TwoNodeLinkWrapper(17, 3, 3101, 31, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl14);
                theDomain.AddElement(ele_link_tnl15);
                theDomain.AddElement(ele_link_tnl16);
                theDomain.AddElement(ele_link_tnl17);
            }

            //# Defining Vertical Perimeter Elements LEFT
            {
                var ele_timbeam18 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(18, 1601, 15, E_Timber_Long, G_Timber, Area_Perimeter_long_left, Torsional_J_Perimeter_long_left, Iy_Perimeter_long_left, Iz_Perimeter_long_left, Av_Perimeter_long_left, Av_Perimeter_long_left, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam19 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(19, 15, 14, E_Timber_Long, G_Timber, Area_Perimeter_long_left, Torsional_J_Perimeter_long_left, Iy_Perimeter_long_left, Iz_Perimeter_long_left, Av_Perimeter_long_left, Av_Perimeter_long_left, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam20 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(20, 14, 6, E_Timber_Long, G_Timber, Area_Perimeter_long_left, Torsional_J_Perimeter_long_left, Iy_Perimeter_long_left, Iz_Perimeter_long_left, Av_Perimeter_long_left, Av_Perimeter_long_left, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam21 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(21, 6, 4, E_Timber_Long, G_Timber, Area_Perimeter_long_left, Torsional_J_Perimeter_long_left, Iy_Perimeter_long_left, Iz_Perimeter_long_left, Av_Perimeter_long_left, Av_Perimeter_long_left, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam22 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(22, 4, 5, E_Timber_Long, G_Timber, Area_Perimeter_long_left, Torsional_J_Perimeter_long_left, Iy_Perimeter_long_left, Iz_Perimeter_long_left, Av_Perimeter_long_left, Av_Perimeter_long_left, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam23 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(23, 5, 12, E_Timber_Long, G_Timber, Area_Perimeter_long_left, Torsional_J_Perimeter_long_left, Iy_Perimeter_long_left, Iz_Perimeter_long_left, Av_Perimeter_long_left, Av_Perimeter_long_left, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam24 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(24, 12, 1301, E_Timber_Long, G_Timber, Area_Perimeter_long_left, Torsional_J_Perimeter_long_left, Iy_Perimeter_long_left, Iz_Perimeter_long_left, Av_Perimeter_long_left, Av_Perimeter_long_left, lineartag_VerticalCrdT, 0, 0);
                theDomain.AddElement(ele_timbeam18);
                theDomain.AddElement(ele_timbeam19);
                theDomain.AddElement(ele_timbeam20);
                theDomain.AddElement(ele_timbeam21);
                theDomain.AddElement(ele_timbeam22);
                theDomain.AddElement(ele_timbeam23);
                theDomain.AddElement(ele_timbeam24);
            }

            //# Defining Vertical Perimeter Elements RIGHT
            {
                var ele_timbeam25 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(25, 1101, 10, E_Timber_Long, G_Timber, Area_Perimeter_long_right, Torsional_J_Perimeter_long_right, Iy_Perimeter_long_right, Iz_Perimeter_long_right, Av_Perimeter_long_right, Av_Perimeter_long_right, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam26 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(26, 10, 2, E_Timber_Long, G_Timber, Area_Perimeter_long_right, Torsional_J_Perimeter_long_right, Iy_Perimeter_long_right, Iz_Perimeter_long_right, Av_Perimeter_long_right, Av_Perimeter_long_right, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam27 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(27, 2, 1, E_Timber_Long, G_Timber, Area_Perimeter_long_right, Torsional_J_Perimeter_long_right, Iy_Perimeter_long_right, Iz_Perimeter_long_right, Av_Perimeter_long_right, Av_Perimeter_long_right, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam28 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(28, 1, 3, E_Timber_Long, G_Timber, Area_Perimeter_long_right, Torsional_J_Perimeter_long_right, Iy_Perimeter_long_right, Iz_Perimeter_long_right, Av_Perimeter_long_right, Av_Perimeter_long_right, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam29 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(29, 3, 9, E_Timber_Long, G_Timber, Area_Perimeter_long_right, Torsional_J_Perimeter_long_right, Iy_Perimeter_long_right, Iz_Perimeter_long_right, Av_Perimeter_long_right, Av_Perimeter_long_right, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam30 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(30, 9, 7, E_Timber_Long, G_Timber, Area_Perimeter_long_right, Torsional_J_Perimeter_long_right, Iy_Perimeter_long_right, Iz_Perimeter_long_right, Av_Perimeter_long_right, Av_Perimeter_long_right, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam31 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(31, 7, 801, E_Timber_Long, G_Timber, Area_Perimeter_long_right, Torsional_J_Perimeter_long_right, Iy_Perimeter_long_right, Iz_Perimeter_long_right, Av_Perimeter_long_right, Av_Perimeter_long_right, lineartag_VerticalCrdT, 0, 0);
                theDomain.AddElement(ele_timbeam25);
                theDomain.AddElement(ele_timbeam26);
                theDomain.AddElement(ele_timbeam27);
                theDomain.AddElement(ele_timbeam28);
                theDomain.AddElement(ele_timbeam29);
                theDomain.AddElement(ele_timbeam30);
                theDomain.AddElement(ele_timbeam31);
            }

            //# Defining Vertical Perimeter Elements DOWN
            {
                var ele_timbeam32 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(32, 1102, 30, E_Timber_Trans, G_Timber, Area_Perimeter_trans_down, Torsional_J_Perimeter_trans_down, Iy_Perimeter_trans_down, Iz_Perimeter_trans_down, Av_Perimeter_trans_down, Av_Perimeter_trans_down, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam33 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(33, 30, 34, E_Timber_Trans, G_Timber, Area_Perimeter_trans_down, Torsional_J_Perimeter_trans_down, Iy_Perimeter_trans_down, Iz_Perimeter_trans_down, Av_Perimeter_trans_down, Av_Perimeter_trans_down, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam34 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(34, 34, 35, E_Timber_Trans, G_Timber, Area_Perimeter_trans_down, Torsional_J_Perimeter_trans_down, Iy_Perimeter_trans_down, Iz_Perimeter_trans_down, Av_Perimeter_trans_down, Av_Perimeter_trans_down, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam35 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(35, 35, 28, E_Timber_Trans, G_Timber, Area_Perimeter_trans_down, Torsional_J_Perimeter_trans_down, Iy_Perimeter_trans_down, Iz_Perimeter_trans_down, Av_Perimeter_trans_down, Av_Perimeter_trans_down, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam36 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(36, 28, 36, E_Timber_Trans, G_Timber, Area_Perimeter_trans_down, Torsional_J_Perimeter_trans_down, Iy_Perimeter_trans_down, Iz_Perimeter_trans_down, Av_Perimeter_trans_down, Av_Perimeter_trans_down, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam37 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(37, 36, 1602, E_Timber_Trans, G_Timber, Area_Perimeter_trans_down, Torsional_J_Perimeter_trans_down, Iy_Perimeter_trans_down, Iz_Perimeter_trans_down, Av_Perimeter_trans_down, Av_Perimeter_trans_down, lineartag_HorizontalCrdT, 0, 0);

                theDomain.AddElement(ele_timbeam32);
                theDomain.AddElement(ele_timbeam33);
                theDomain.AddElement(ele_timbeam34);
                theDomain.AddElement(ele_timbeam35);
                theDomain.AddElement(ele_timbeam36);
                theDomain.AddElement(ele_timbeam37);
            }

            //# Defining Vertical Perimeter Elements UP
            {
                var ele_timbeam38 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(38, 802, 31, E_Timber_Trans, G_Timber, Area_Perimeter_trans_up, Torsional_J_Perimeter_trans_up, Iy_Perimeter_trans_up, Iz_Perimeter_trans_up, Av_Perimeter_trans_up, Av_Perimeter_trans_up, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam39 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(39, 31, 23, E_Timber_Trans, G_Timber, Area_Perimeter_trans_up, Torsional_J_Perimeter_trans_up, Iy_Perimeter_trans_up, Iz_Perimeter_trans_up, Av_Perimeter_trans_up, Av_Perimeter_trans_up, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam40 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(40, 23, 33, E_Timber_Trans, G_Timber, Area_Perimeter_trans_up, Torsional_J_Perimeter_trans_up, Iy_Perimeter_trans_up, Iz_Perimeter_trans_up, Av_Perimeter_trans_up, Av_Perimeter_trans_up, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam41 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(41, 33, 32, E_Timber_Trans, G_Timber, Area_Perimeter_trans_up, Torsional_J_Perimeter_trans_up, Iy_Perimeter_trans_up, Iz_Perimeter_trans_up, Av_Perimeter_trans_up, Av_Perimeter_trans_up, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam42 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(42, 32, 21, E_Timber_Trans, G_Timber, Area_Perimeter_trans_up, Torsional_J_Perimeter_trans_up, Iy_Perimeter_trans_up, Iz_Perimeter_trans_up, Av_Perimeter_trans_up, Av_Perimeter_trans_up, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam43 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(43, 21, 1302, E_Timber_Trans, G_Timber, Area_Perimeter_trans_up, Torsional_J_Perimeter_trans_up, Iy_Perimeter_trans_up, Iz_Perimeter_trans_up, Av_Perimeter_trans_up, Av_Perimeter_trans_up, lineartag_HorizontalCrdT, 0, 0);

                theDomain.AddElement(ele_timbeam38);
                theDomain.AddElement(ele_timbeam39);
                theDomain.AddElement(ele_timbeam40);
                theDomain.AddElement(ele_timbeam41);
                theDomain.AddElement(ele_timbeam42);
                theDomain.AddElement(ele_timbeam43);
            }

            //# Defining Vertical Inside Elements
            {
                var ele_timbeam44 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(44, 3601, 3201, E_Timber_Long, G_Timber, Area_inside_long, Torsional_J_inside_long, Iy_inside_long, Iz_inside_long, Av_inside_long, Av_inside_long, lineartag_VerticalCrdT, 0, 0);
                var ele_timbeam45 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(45, 3401, 3101, E_Timber_Long, G_Timber, Area_inside_long, Torsional_J_inside_long, Iy_inside_long, Iz_inside_long, Av_inside_long, Av_inside_long, lineartag_VerticalCrdT, 0, 0);

                theDomain.AddElement(ele_timbeam44);
                theDomain.AddElement(ele_timbeam45);
            }

            //# Defining Vertical Inside Elements
            {
                var ele_timbeam46 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(46, 202, 1402, E_Timber_Trans, G_Timber, Area_inside_trans, Torsional_J_inside_trans, Iy_inside_trans, Iz_inside_trans, Av_inside_trans, Av_inside_trans, lineartag_HorizontalCrdT, 0, 0);
                var ele_timbeam47 = new OpenSees.Elements.ElasticTimoshenkoBeam3dWrapper(47, 902, 502, E_Timber_Trans, G_Timber, Area_inside_trans, Torsional_J_inside_trans, Iy_inside_trans, Iz_inside_trans, Av_inside_trans, Av_inside_trans, lineartag_HorizontalCrdT, 0, 0);

                theDomain.AddElement(ele_timbeam46);
                theDomain.AddElement(ele_timbeam47);
            }

            //# Defining Joint Elements
            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Stiffness_TensionMat, Stiffness_IPMat, Stiffness_OOPMat, Stiffness_about_TensionMat, Stiffness_about_OOPMat, Stiffness_about_IPMat };
                var ele_link_tnl48      = new OpenSees.Elements.TwoNodeLinkWrapper(48, 3, 27, 28, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl49      = new OpenSees.Elements.TwoNodeLinkWrapper(49, 3, 29, 30, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl50      = new OpenSees.Elements.TwoNodeLinkWrapper(50, 3, 23, 22, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl51      = new OpenSees.Elements.TwoNodeLinkWrapper(51, 3, 21, 20, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 1, 0, 0 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                theDomain.AddElement(ele_link_tnl48);
                theDomain.AddElement(ele_link_tnl49);
                theDomain.AddElement(ele_link_tnl50);
                theDomain.AddElement(ele_link_tnl51);
            }

            {
                var jointElementMatsSet = new OpenSees.Materials.Uniaxials.UniaxialMaterialWrapper[] { Stiffness_TensionMat, Stiffness_IPMat, Stiffness_OOPMat, Stiffness_about_TensionMat, Stiffness_about_OOPMat, Stiffness_about_IPMat };
                var ele_link_tnl52      = new OpenSees.Elements.TwoNodeLinkWrapper(52, 3, 19, 7, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl53      = new OpenSees.Elements.TwoNodeLinkWrapper(53, 3, 18, 3, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl54      = new OpenSees.Elements.TwoNodeLinkWrapper(54, 3, 17, 10, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);

                var ele_link_tnl55 = new OpenSees.Elements.TwoNodeLinkWrapper(55, 3, 12, 24, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl56 = new OpenSees.Elements.TwoNodeLinkWrapper(56, 3, 6, 25, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);
                var ele_link_tnl57 = new OpenSees.Elements.TwoNodeLinkWrapper(57, 3, 15, 26, dirIds2, jointElementMatsSet, new OpenSees.VectorWrapper(new double[] { 0, 0, 1 }), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), new OpenSees.VectorWrapper(0), 0, 0);

                theDomain.AddElement(ele_link_tnl52);
                theDomain.AddElement(ele_link_tnl53);
                theDomain.AddElement(ele_link_tnl54);

                theDomain.AddElement(ele_link_tnl55);
                theDomain.AddElement(ele_link_tnl56);
                theDomain.AddElement(ele_link_tnl57);
            }

            #endregion

            #region recorders
            var savepath = System.Environment.CurrentDirectory + @"\opsnet_results\";
            if (!System.IO.Directory.Exists(savepath))
            {
                System.IO.Directory.CreateDirectory(savepath);
            }


            {
                var nodeTags = new int[] { 21, 23, 33, 13, 8, 7, 3, 10, 19, 18, 17, 20, 22, 28 };
                foreach (var tag in nodeTags)
                {
                    var opsstream = new OpenSees.Handlers.DataFileStreamWrapper(savepath + $@"\OPSNET_Disp_{tag}.txt");
                    var recorder  = new OpenSees.Recorders.NodeRecorderWrapper(dirIds2, new OpenSees.IDWrapper(new int[] { tag }), 0, "disp", theDomain, opsstream);
                    theDomain.AddRecorder(recorder);
                }
            }

            {
                var nodeTags = new int[] { 27, 29 };
                foreach (var tag in nodeTags)
                {
                    var opsstream = new OpenSees.Handlers.DataFileStreamWrapper(savepath + $@"\OPSNET_Nodal_Reactions_{tag}.txt");
                    var recorder  = new OpenSees.Recorders.NodeRecorderWrapper(dirIds2, new OpenSees.IDWrapper(new int[] { tag }), 0, "reaction", theDomain, opsstream);
                    theDomain.AddRecorder(recorder);
                }
            }

            {
                var eleTags = new int[] { 1, 2 };

                foreach (var tag in eleTags)
                {
                    var opsstream = new OpenSees.Handlers.DataFileStreamWrapper(savepath + $@"\OPSNET_Element_Forces_{tag}.txt");
                    var recorder  = new OpenSees.Recorders.ElementRecorderWrapper(new OpenSees.IDWrapper(new int[] { tag }), new string[] { "force" }, true, theDomain, opsstream, 0, new OpenSees.IDWrapper(0));
                    theDomain.AddRecorder(recorder);
                }
            }
            #endregion

            #region loading
            var theSeries      = new OpenSees.Components.Timeseries.LinearSeriesWrapper();
            var theLoadPattern = new OpenSees.Components.LoadPatterns.LoadPatternWrapper(1);
            theLoadPattern.SetTimeSeries(theSeries);
            theDomain.AddLoadPattern(theLoadPattern);

            var theLoadValues = new OpenSees.VectorWrapper(6);
            theLoadValues.Zero();
            theLoadValues[0] = 9871.8;

            theDomain.AddNodalLoad(new OpenSees.Components.Loads.NodalLoadWrapper(1, 20, theLoadValues, false), 1);
            theDomain.AddNodalLoad(new OpenSees.Components.Loads.NodalLoadWrapper(2, 22, theLoadValues, false), 1);

            var theModel      = new OpenSees.AnalysisModelWrapper();
            var theSolnAlgo   = new OpenSees.Algorithms.NewtonRaphsonWrapper();
            var theIntegrator = new OpenSees.Integrators.Static.LoadControlWrapper(0.0005, 1, 0.0005, 0.0005);
            var theHandler    = new OpenSees.Handlers.PlainHandlerWrapper();
            var theRCM        = new OpenSees.GraphNumberers.RCMWrapper(false);
            var theNumberer   = new OpenSees.Numberers.DOF_NumbererWrapper(theRCM);
            var theSolver     = new OpenSees.Systems.Linears.BandGenLinLapackSolverWrapper();
            var theSOE        = new OpenSees.Systems.Linears.BandGenLinSOEWrapper(theSolver);
            var test          = new OpenSees.ConvergenceTests.CTestNormDispIncrWrapper(1e-12, 20, 2, 2, 1.0e10);
            var theAnalysis   = new OpenSees.Analysis.StaticAnalysisWrapper(
                theDomain,
                theHandler,
                theNumberer,
                theModel,
                theSolnAlgo,
                theSOE,
                theIntegrator,
                test);

            theAnalysis.Analyze(2000);


            Console.ReadKey();
            #endregion
        }