obsidian_backup/多体+耦合求解器/计算力和力矩.md

2.4 KiB

yaw

pfrc_oncrt: Partial force at the yaw bearing (point O) due to the nacelle, generator, and rotor [-] pmom_bnc_rt: 在基板 (point O) 处由机舱、发电机和转子产生的偏力矩 [-]

//  Partial force at the yaw bearing (point O) due to the nacelle, generator, and rotor [-]

    rt_hs.pfrc_oncrt = rt_hs.pfrc_vgn_rt.clone() + rt_hs.pfrc_wtail.clone(); //Initialize these partial forces and moments using

    // Partial moment at the base plate (body B) / yaw bearing (point O) due the nacelle, generator, and rotor [-]

    rt_hs.pmom_bnc_rt = rt_hs.pmom_ngn_rt.clone() + rt_hs.pmom_ntail.clone(); // the rotor, rotor-furl, generator, and tail effects

  

    for i in 0..p.dofs.n_actv_dof as usize{

        tmp_vec = cross_product(&rt_hs.r_ov, &rt_hs.pfrc_vgn_rt.slice(s![.., p.dofs.srt_ps[i] - 1]).to_owned()); // The portion of PMomBNcRt associated with the PFrcVGnRt

        let value = rt_hs.pmom_bnc_rt.slice(s![.., p.dofs.srt_ps[i]-1]).to_owned() + tmp_vec;

        rt_hs.pmom_bnc_rt.slice_mut(s![.., p.dofs.srt_ps[i]-1]).assign(&value);

    }

    for i in 0.. p.dofs.npie as usize{

        tmp_vec = cross_product(&rt_hs.r_ow, &rt_hs.pfrc_wtail.slice(s![.., p.dofs.pie[i] - 1]).to_owned()); // The portion of PMomBNcRt associated with the PFrcWTail

        let value = rt_hs.pmom_bnc_rt.slice(s![.., p.dofs.pie[i]-1]).to_owned() + tmp_vec;

        rt_hs.pmom_bnc_rt.slice_mut(s![.., p.dofs.pie[i]-1]).assign(&value);

    }

    for i in 0.. p.dofs.npue as usize{

        tmp_vec1 = -p.nac_mass * rt_hs.plin_vel_eu.slice(s![p.dofs.pue[i] -1, 0, ..]).to_owned(); //The portion of PFrcONcRt associated with the NacMass

        tmp_vec2 = cross_product(&rt_hs.r_ou, &tmp_vec1); // The portion of PMomBNcRt associated with the NacMass

  

        let value = rt_hs.pfrc_oncrt.slice(s![.., p.dofs.pue[i] -1]).to_owned() + tmp_vec1;

        rt_hs.pfrc_oncrt.slice_mut(s![.., p.dofs.pue[i] -1]).assign(&value);

  

        let value = rt_hs.pmom_bnc_rt.slice(s![.., p.dofs.pue[i] -1]).to_owned() + tmp_vec2 -

                                                                p.nacd2_iner * coord_sys.d2.clone() * dot_product(&coord_sys.d2.clone(), &rt_hs.p_ang_vel_en.slice(s![p.dofs.pue[i] -1, 0, ..]).to_owned());

        rt_hs.pmom_bnc_rt.slice_mut(s![.., p.dofs.pue[i] -1]).assign(&value);

    }