CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    DPM添加粒子属性错误

    OpenFOAM
    2
    4
    738
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • U
      upc_ngh 最后由 编辑

      在向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()就没出现上面的错误,还请各位老师多多指点

      1 条回复 最后回复 回复 引用
      • 星
        星星星星晴 最后由 编辑

        我添加过某个表示属性的参数,不过我是在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_)
        
        

        m.sui20@foxmail.com

        1 条回复 最后回复 回复 引用
        • 星
          星星星星晴 最后由 编辑

          突然发现 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& 的这个定义代表着更新数据,如果没在这边定义的话就有可能出现问题。。我遇到过一次

          希望能有帮助
          祝好运

          m.sui20@foxmail.com

          1 条回复 最后回复 回复 引用
          • U
            upc_ngh 最后由 编辑

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

            1 条回复 最后回复 回复 引用
            • First post
              Last post