DPM添加粒子属性错误



  • 在向DPMFoam求解器中粒子添加一个额外的属性来分别记录粒子各个力的大小比如p.gravity()(所受重力)、p.times()(每个粒子运动过程中的碰撞次数),我在向CollidingParcel中添加完p.times()后(这时候编译是没错的),然后在pairCollision代码下碰撞函数evaluatePair内添加p.times() += 1,就会出现下面报错:

     lvalue required as left operand of assignment  pA.times() +=1;
    

    提示左值没初值,但是我在CollidingParcel中给予初值了,类比的是p.f()来定义的,为什么p.f()就没出现上面的错误,还请各位老师多多指点



  • 我添加过某个表示属性的参数,不过我是在kinematic parcel 中添加的。
    应该是同理,需要添加的地方很多,估计有的添加的不标准,但是在我的case中能用。。
    然后就可以通过累加记录某个状态的次数。

    在Kinematicparcel.H中的
    template<class CloudType>
    class TrackingData
    :
    public ParcelType::template TrackingData<CloudType> {
    public:
    enum trackPart {
    tpVelocityHalfStep, 
    tpLinearTrack,
    tpRotationalTrack
    };     
    下面的protected: 添加一个 scalar xxxxx_;
    2. AddToPropertiyList 中添加
        + "xxxxx"
    3. 添加 inline scalar xxxxx() const;
    4. 添加 inline scalar& xxxxx();
    
    在kinematicparcel.C中
    1.
    / * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
    
    template<class ParcelType>
    Foam::KinematicParcel<ParcelType>::KinematicParcel
    (
        const KinematicParcel<ParcelType>& p
    )
    	:添加
    xxxxx_(p.xxxxx_),
    
    2.
    template<class ParcelType>
    Foam::KinematicParcel<ParcelType>::KinematicParcel
    (
        const KinematicParcel<ParcelType>& p,
        const polyMesh& mesh
    )
    	: 添加
    xxxxx_(p.xxxxx_)
    
    


  • 突然发现 KinematicParcelI.H中 也需要添加,好多地方要添加。。。
    anyway,只要是在KinematicParcel 这个class下定义的东西,都需要添加

    template<class ParcelType>
    Foam::KinematicParcel<ParcelType>::KinematicParcel
    (
        const KinematicParcel<ParcelType>& p,
        const polyMesh& mesh
    )
    :
        ParcelType(p, mesh),
        active_(p.active_),
        typeId_(p.typeId_),
        nParticle_(p.nParticle_),
        d_(p.d_),
        dTarget_(p.dTarget_),
        U_(p.U_),
        rho_(p.rho_),
        age_(p.age_),
        tTurb_(p.tTurb_),
        UTurb_(p.UTurb_),
        rhoc_(p.rhoc_),
        Uc_(p.Uc_),
        muc_(p.muc_)
    {}
    
    

    如上面的code,只要是有定义的地方,都复制一下,然后修改为xxxxx就行。。
    在KinematicParcelIO.C中 每个变量都会有一个初始值。
    所以试着检查一下是不是你定义的变量在整个parcel中的相关文件,都定义过?

    而且注意 inline scalar& 的这个定义代表着更新数据,如果没在这边定义的话就有可能出现问题。。我遇到过一次

    希望能有帮助
    祝好运



  • 谢谢,谢谢我仔细看看:xinxin:


Log in to reply