/*************************************************************************
*  Copyright (C) 2009-2012 by Franck Lominé		                         *
*  franck.lomine@insa-rennes.fr                                          *
*                                                                        *
*  This program is free software; it is licensed under the terms of the  *
*  GNU General Public License v2 or later. See file LICENSE for details. *
*                                                                        *
*************************************************************************/
#ifdef LBM_ENGINE

#pragma once
#include <lib/multimethods/Indexable.hpp>
#include <lib/serialization/Serializable.hpp>

namespace yade { // Cannot have #include directive inside.

class LBMlink : public Serializable {
public:
	void ReinitDynamicalProperties()
	{
		sid         = -1;
		fid         = -1;
		idx_sigma_i = -1;
		isBd        = false;
		VbMid       = Vector3r::Zero();
		DistMid     = Vector3r::Zero();
		ct          = 0.;
		return;
	};
	virtual ~LBMlink() {};

	// clang-format off
    YADE_CLASS_BASE_DOC_ATTRS_CTOR(LBMlink,Serializable,
        "Link class for Lattice Boltzmann Method ",
        ((int,sid,-1,,"Solid node identifier "))
        ((int,fid,-1,,"Fluid node identifier "))
        ((short int,i,-1,,"direction index of the link"))
        ((int,nid1,-1,,"fixed node identifier"))
        ((int,nid2,-1,,"fixed node identifier or -1 if node points outside"))
        ((short int,idx_sigma_i,-1,,"sigma_i direction index  (Fluid->Solid)"))
        ((bool,isBd,false,,"True if it is a boundary link"))
        ((bool,PointingOutside,false,,"True if it is a link pointing outside to the system (from a fluid or solid node)"))
        ((Vector3r,VbMid,Vector3r::Zero(),,"Velocity of boundary at midpoint"))
        ((Vector3r,DistMid,Vector3r::Zero(),,"Distance between middle of the link and mass center of body"))
        ((Real,ct,0.,,"Coupling term in modified bounce back rule")),
        );
	// clang-format on
};
REGISTER_SERIALIZABLE(LBMlink);

} // namespace yade

#endif //LBM_ENGINE
