Konstantin8105 / hd

FEM(finite element method) for structural engineer
MIT License
5 stars 0 forks source link

Nonlinear deformation #30

Open Konstantin8105 opened 3 years ago

Konstantin8105 commented 3 years ago

Arc method А. А. ЛУКАШЕВИЧ НЕЛИНЕЙНЫЕ ЗАДАЧИ СТРОИТЕЛЬНОЙ МЕХАНИКИ

Konstantin8105 commented 3 years ago

func TestNonlinear(t *testing.T) {
    var (
        // input data
        H  = 5.0
        L  = 5.0 

        E = 2.05e5
        A = 1e-4
        J = 1.0

        P = 5.0

        m = hd.Model{
            Points: [][2]float64{
                {0, 0},
                {L*1.0/4.0 , H*1.0/4.0},
                {L*2.0/4.0 , H*2.0/4.0},
                {L*3.0/4.0 , H*3.0/4.0},
                {L , H},
            },
            Beams: []hd.BeamProp{
                {N: [2]int{0, 1}, A: A, J: J, E: E},
                {N: [2]int{1, 2}, A: A, J: J, E: E},
                {N: [2]int{2, 3}, A: A, J: J, E: E},
                {N: [2]int{3, 4}, A: A, J: J, E: E},
            },
            Supports: [][3]bool{
                {true, true, false},
                {false, false, false},
                {false, false, false},
                {false, false, false},
                {true, false, false},
            },
        }
        lcs = []hd.LoadCase{
            {
                LoadNodes: []hd.LoadNode{
                    {N: 4, Forces: [3]float64{0, -P, 0}},
                },
                AmountLinearBuckling: 3,
            },
        }
    )

    var b bytes.Buffer
    if err := hd.Run(&b, &m, lcs, nil); err != nil {
        fmt.Fprintf(os.Stdout, "Cannot calculate : %v", err)
        return
    }
    fmt.Println(b.String())

    for i := range lcs {
        for j := range lcs[i].LinearBucklingResult {
            pij := lcs[i].LinearBucklingResult[j].Factor*P
            fmt.Println(i, j, " Load ", pij)
        }
    }

//  data := []float64{
//      0.50 * in, 240000,
//      1.00 * in, 0.0,
//      1.50 * in, -240000,
//      2.00 * in, 0.0,
//      2.25 * in, 400000,
//  }
//  fmt.Println(data)
}