ug4
Loading...
Searching...
No Matches
ug::LuaUserFunction< TData, dim, TDataIn > Class Template Reference

maps several data values to an output data value using a lua callback More...

#include <lua_user_data.h>

+ Inheritance diagram for ug::LuaUserFunction< TData, dim, TDataIn >:

Public Types

typedef StdDataLinker< LuaUserFunction< TData, dim, TDataIn >, TData, dim > base_type
 
- Public Types inherited from ug::CplUserData< TData, dim, TRet >
typedef ICplUserData< dim > base_type
 type of base class
 
- Public Types inherited from ug::UserData< TData, dim, TRet >
typedef TData data_type
 
typedef TRet return_type
 

Public Member Functions

template<int refDim>
void eval_and_deriv (TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< refDim > vLocIP[], const size_t nip, LocalVector *u, bool bDeriv, int s, std::vector< std::vector< TData > > vvvDeriv[], const MathMatrix< refDim, dim > *vJT=NULL)
 
void evaluate (TData &value, const MathVector< dim > &globIP, number time, int si) const
 
template<int refDim>
void evaluate (TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< refDim > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< refDim, dim > *vJT=NULL) const
 
virtual void operator() (TData &out, int numArgs,...) const
 evaluates the data
 
void set_deriv (size_t arg, const char *luaCallback)
 sets the Lua function used to compute the derivative
 
void set_deriv (size_t arg, LuaFunctionHandle handle)
 
void set_input_and_deriv (size_t i, SmartPtr< CplUserData< TDataIn, dim > > input, LuaFunctionHandle deriv)
 
void set_num_input (size_t num)
 set number of needed inputs
 
virtual ~LuaUserFunction ()
 destructor frees the reference
 
 LuaUserFunction (const char *luaCallback, size_t numArgs)
 constructor
 
 LuaUserFunction (const char *luaCallback, size_t numArgs, bool bPosTimeNeed)
 constructor
 
 LuaUserFunction (LuaFunctionHandle handle, size_t numArgs)
 constructor
 
 LuaUserFunction (LuaFunctionHandle handle, size_t numArgs, bool bPosTimeNeed)
 constructor
 
void set_input (size_t i, SmartPtr< CplUserData< TDataIn, dim > > data)
 set input value for paramter i
 
void set_input (size_t i, number val)
 set input value for paramter i
 
- Public Member Functions inherited from ug::StdDataLinker< LuaUserFunction< TData, dim, TDataIn >, TData, dim >
virtual void check_setup () const
 returns if data is ok
 
virtual void compute (LocalVector *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
 compute values (and derivatives iff compDeriv == true)
 
virtual void compute (LocalVectorTimeSeries *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
 compute values (and derivatives iff compDeriv == true, but only for the 'current' time point)
 
virtual bool continuous () const
 returns if provided data is continuous over geometric object boundaries
 
void evaluate (TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< refDim > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< refDim, dim > *vJT=NULL) const
 
virtual SmartPtr< ICplUserData< dim > > needed_data (size_t i)
 return needed data
 
virtual size_t num_input () const
 number of inputs
 
virtual size_t num_needed_data () const
 number of other Data this data depends on
 
virtual void operator() (TData &value, const MathVector< dim > &globIP, number time, int si) const
 returns value for a global position
 
virtual void operator() (TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, const size_t nip) const
 returns value for global positions
 
virtual bool requires_grid_fct () const
 returns that a grid function is needed for evaluation
 
virtual void set_function_pattern (ConstSmartPtr< FunctionPattern > fctPatt)
 updates the function group
 
virtual void set_input (size_t i, SmartPtr< ICplUserData< dim > > input, SmartPtr< UserDataInfo > info)
 sets an input
 
void set_num_input (size_t num)
 sets the number of inputs
 
virtual bool zero_derivative () const
 returns if derivative is zero
 
bool zero_derivative (size_t i) const
 returns if the derivative of the i'th input is zero
 
- Public Member Functions inherited from ug::StdUserData< TImpl, TData, dim, TRet, TBase >
virtual void operator() (TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 1 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 1, dim > *vJT=NULL) const
 
virtual void operator() (TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 2 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 2, dim > *vJT=NULL) const
 
virtual void operator() (TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 3 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 3, dim > *vJT=NULL) const
 
- Public Member Functions inherited from ug::CplUserData< TData, dim, TRet >
bool defined (size_t s, size_t ip) const
 returns flag, if data is evaluated (for conditional data)
 
size_t num_ip (size_t s) const
 returns the number of integration points
 
size_t num_series () const
 explicitly forward some functions
 
void register_storage_callback (DataImport< TData, dim > *obj, void(DataImport< TData, dim >::*func)())
 register external callback, invoked when data storage changed
 
void unregister_storage_callback (DataImport< TData, dim > *obj)
 register all callbacks registered by class
 
TData & value (size_t s, size_t ip)
 returns the value at ip
 
const TData & value (size_t s, size_t ip) const
 returns the value at ip
 
TData * values (size_t s)
 returns all values for a series
 
const TData * values (size_t s) const
 returns all values for a series
 
 ~CplUserData ()
 destructor
 
- Public Member Functions inherited from ug::ICplUserData< dim >
bool at_current_time (size_t s) const
 returns true iff the time point specification is equal to the current one, or not specified
 
void clear ()
 clear all data
 
virtual bool constant () const
 returns if data is constant
 
int dim_local_ips () const
 returns current local ip dimension
 
 ICplUserData ()
 default constructor
 
const MathVector< dim > & ip (size_t s, size_t ip) const
 returns global ip
 
const MathVector< dim > * ips (size_t s) const
 returns global ips
 
template<int ldim>
const MathVector< ldim > & local_ip (size_t s, size_t ip) const
 returns local ip
 
template<int ldim>
const MathVector< ldim > * local_ips (size_t s) const
 returns local ips
 
size_t num_ip (size_t s) const
 returns the number of integration points
 
size_t num_series () const
 returns the number of ip series
 
template<int ldim>
size_t register_local_ip_series (const MathVector< ldim > *vPos, const size_t numIP, bool bMayChange=true)
 set local positions without the specification of the time point, returns series id
 
template<int ldim>
size_t register_local_ip_series (const MathVector< ldim > *vPos, const size_t numIP, const int timePointSpec, bool bMayChange=true)
 set local positions, returns series id
 
void set_global_ips (size_t s, const MathVector< dim > *vPos, size_t numIP)
 set global positions
 
template<int ldim>
void set_local_ips (const size_t seriesId, const MathVector< ldim > *vPos, const size_t numIP)
 sets new local ip positions for a local ip series
 
void set_subset (int si)
 set the subset of evaluation
 
void set_time_point (const size_t seriesId, const int timePointSpec)
 sets a new time point for a local ip series
 
void set_time_point (size_t timePoint)
 sets the current time point
 
void set_times (const std::vector< number > &vTime)
 set evaluation time
 
int subset () const
 returns the subset of evaluation
 
number time () const
 get the current evaluation time
 
number time (size_t s) const
 get the specified evaluation time
 
size_t time_point ()
 returns the current time point
 
size_t time_point (size_t s) const
 returns the time point specification (in particular, the current one, if the own one not specified)
 
int time_point_specification (size_t s) const
 returns the time point specification (note: it may be -1, i.e. not specified)
 
virtual void update_dof_sizes (const LocalIndices &ind)
 resize arrays
 
virtual ~ICplUserData ()
 virtual desctructor
 
- Public Member Functions inherited from ug::UserDataInfo
const FunctionGroupfunction_group () const
 Function Group of functions.
 
const FunctionIndexMappingmap () const
 get function mapping
 
size_t num_fct () const
 number of functions this export depends on
 
const char * obj_name ()
 gets the name of the object (s. the field m_objName)
 
void set_obj_name (const char *name)
 sets the name of the object (s. the field m_objName)
 
virtual ~UserDataInfo ()
 virtual destructor
 
- Public Member Functions inherited from ug::UserData< TData, dim, TRet >
int get_dim () const
 returns dimension
 
virtual void operator() (TData &value, const MathVector< dim > &globIP, number time, int si, Vertex *vrt) const
 returns a value at a vertex
 
std::string type () const
 returns type of data as string (e.g. "Number", "Vector", "Matrix")
 
TRet operator() (TData &value, const MathVector< dim > &globIP, number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 1 > &locIP, LocalVector *u) const
 
TRet operator() (TData &value, const MathVector< dim > &globIP, number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 2 > &locIP, LocalVector *u) const
 
TRet operator() (TData &value, const MathVector< dim > &globIP, number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 3 > &locIP, LocalVector *u) const
 

Protected Member Functions

void eval_deriv (TData &out, const std::vector< TDataIn > &dataIn, const MathVector< dim > &x, number time, int si, size_t arg) const
 evaluates the data at a given point and time
 
void eval_value (TData &out, const std::vector< TDataIn > &dataIn, const MathVector< dim > &x, number time, int si) const
 evaluates the data at a given point and time
 
void free_callback_ref ()
 frees the callback-reference, if a callback was set.
 
void free_deriv_callback_ref (size_t arg)
 frees callback-references for derivate callbacks
 
void set_lua_value_callback (const char *luaCallback, size_t numArgs)
 sets the Lua function used to compute the data
 
void set_lua_value_callback (LuaFunctionHandle handle, size_t numArgs)
 
- Protected Member Functions inherited from ug::StdDataLinker< LuaUserFunction< TData, dim, TDataIn >, TData, dim >
void eval_deriv (LocalVector *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
 
void eval_deriv (LocalVectorTimeSeries *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
 
LuaUserFunction< TData, dim, TDataIn > & getImpl ()
 access to implementation
 
const LuaUserFunction< TData, dim, TDataIn > & getImpl () const
 const access to implementation
 
virtual void global_ips_changed (const size_t seriesID, const MathVector< dim > *vPos, const size_t numIP)
 forwards the global positions to the data inputs
 
size_t input_common_fct (size_t i, size_t fct) const
 returns the number in the common FctGrp for a fct of an input
 
size_t input_num_fct (size_t i) const
 returns number of functions the input depends on
 
virtual void local_ip_series_added (const size_t seriesID)
 requests series id's from input data
 
virtual void local_ip_series_to_be_cleared ()
 requests cleaning of the ip series in the data inputs
 
virtual void local_ips_changed (const size_t seriesID, const size_t newNumIP)
 forwards the local positions to the data inputs
 
size_t series_id (size_t i, size_t s) const
 returns the series id set for the i'th input
 
- Protected Member Functions inherited from ug::StdUserData< TImpl, TData, dim, TRet, TBase >
TImpl & getImpl ()
 access to implementation
 
const TImpl & getImpl () const
 const access to implementation
 
- Protected Member Functions inherited from ug::CplUserData< TData, dim, TRet >
void call_storage_callback () const
 calls are registered external storage callbacks
 
void check_series (size_t s) const
 checks in debug mode the correct index
 
void check_series_ip (size_t s, size_t ip) const
 checks in debug mode the correct index
 
virtual void value_storage_changed (const size_t seriesID)
 callback, invoked when storage of data has changed for a series
 
- Protected Member Functions inherited from ug::ICplUserData< dim >
void check_s (size_t s) const
 checks in debug mode the correct usage of indices
 
void check_s_ip (size_t s, size_t ip) const
 checks in debug mode the correct usage of indices
 
std::vector< const MathVector< 1 > * > & get_local_ips (Int2Type< 1 >)
 help function to get local ips
 
const std::vector< const MathVector< 1 > * > & get_local_ips (Int2Type< 1 >) const
 
std::vector< const MathVector< 2 > * > & get_local_ips (Int2Type< 2 >)
 
const std::vector< const MathVector< 2 > * > & get_local_ips (Int2Type< 2 >) const
 
std::vector< const MathVector< 3 > * > & get_local_ips (Int2Type< 3 >)
 
const std::vector< const MathVector< 3 > * > & get_local_ips (Int2Type< 3 >) const
 

Protected Attributes

bool m_bPosTimeNeed
 flag for position and time data
 
std::vector< std::string > m_cbDerivName
 
std::vector< int > m_cbDerivRef
 
std::string m_cbValueName
 callback name as string
 
int m_cbValueRef
 reference to lua function
 
lua_Statem_L
 lua state
 
size_t m_numArgs
 number of arguments to use
 
std::vector< SmartPtr< DependentUserData< TDataIn, dim > > > m_vpDependData
 data input casted to dependend data
 
std::vector< SmartPtr< CplUserData< TDataIn, dim > > > m_vpUserData
 LUACompiler types for compiled LUA code.
 
- Protected Attributes inherited from ug::StdDataLinker< LuaUserFunction< TData, dim, TDataIn >, TData, dim >
std::vector< FunctionIndexMappingm_vMap
 Function mapping for each input relative to common FunctionGroup.
 
std::vector< SmartPtr< ICplUserData< dim > > > m_vspICplUserData
 data input
 
std::vector< SmartPtr< UserDataInfo > > m_vspUserDataInfo
 data input casted to IDependend data
 
std::vector< std::vector< size_t > > m_vvSeriesID
 series id the linker uses to get data from input
 
- Protected Attributes inherited from ug::ICplUserData< dim >
int m_defaultTimePoint
 default time point (or -1 if not specified)
 
int m_locPosDim
 dimension of local position (-1 indicates no dim set)
 
std::vector< const MathVector< 1 > * > m_pvLocIP1d
 local ips of dimension 1d-3d
 
std::vector< const MathVector< 2 > * > m_pvLocIP2d
 
std::vector< const MathVector< 3 > * > m_pvLocIP3d
 
int m_si
 subset for evaluation
 
size_t m_timePoint
 current time point (used if no explicit specification for series)
 
std::vector< bool > m_vMayChange
 flags if local ips may change
 
std::vector< size_t > m_vNumIP
 number of evaluation points (-1 indicates no ips set)
 
std::vector< numberm_vTime
 time for evaluation
 
std::vector< int > m_vTimePoint
 time points for the series
 
std::vector< const MathVector< dim > * > m_vvGlobPos
 global ips
 
- Protected Attributes inherited from ug::UserDataInfo
FunctionGroup m_fctGrp
 functions the data depends on
 
FunctionIndexMapping m_map
 Mapping for import fct.
 
SmartPtr< char > m_objName
 This field is used mainly for debugging: One can assign a name to the object to identify it when running.
 

Detailed Description

template<typename TData, int dim, typename TDataIn>
class ug::LuaUserFunction< TData, dim, TDataIn >

maps several data values to an output data value using a lua callback

This class provides the evaluation of a user function, that is specified in the script. Several data (of the same c++-type) can be used as input, a data (of the same type) is returned.

Member Typedef Documentation

◆ base_type

template<typename TData , int dim, typename TDataIn >
typedef StdDataLinker<LuaUserFunction<TData, dim, TDataIn>, TData, dim> ug::LuaUserFunction< TData, dim, TDataIn >::base_type

Constructor & Destructor Documentation

◆ LuaUserFunction() [1/4]

template<typename TData , int dim, typename TDataIn >
ug::LuaUserFunction< TData, dim, TDataIn >::LuaUserFunction ( const char *  luaCallback,
size_t  numArgs 
)

◆ LuaUserFunction() [2/4]

template<typename TData , int dim, typename TDataIn >
ug::LuaUserFunction< TData, dim, TDataIn >::LuaUserFunction ( const char *  luaCallback,
size_t  numArgs,
bool  bPosTimeNeed 
)

◆ LuaUserFunction() [3/4]

template<typename TData , int dim, typename TDataIn >
ug::LuaUserFunction< TData, dim, TDataIn >::LuaUserFunction ( LuaFunctionHandle  handle,
size_t  numArgs 
)

◆ LuaUserFunction() [4/4]

template<typename TData , int dim, typename TDataIn >
ug::LuaUserFunction< TData, dim, TDataIn >::LuaUserFunction ( LuaFunctionHandle  handle,
size_t  numArgs,
bool  bPosTimeNeed 
)

◆ ~LuaUserFunction()

template<typename TData , int dim, typename TDataIn >
ug::LuaUserFunction< TData, dim, TDataIn >::~LuaUserFunction ( )
virtual

destructor frees the reference

Member Function Documentation

◆ eval_and_deriv()

template<typename TData , int dim, typename TDataIn >
template<int refDim>
void ug::LuaUserFunction< TData, dim, TDataIn >::eval_and_deriv ( TData  vValue[],
const MathVector< dim >  vGlobIP[],
number  time,
int  si,
GridObject elem,
const MathVector< dim >  vCornerCoords[],
const MathVector< refDim >  vLocIP[],
const size_t  nip,
LocalVector u,
bool  bDeriv,
int  s,
std::vector< std::vector< TData > >  vvvDeriv[],
const MathMatrix< refDim, dim > *  vJT = NULL 
)

◆ eval_deriv()

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::eval_deriv ( TData &  out,
const std::vector< TDataIn > &  dataIn,
const MathVector< dim > &  x,
number  time,
int  si,
size_t  arg 
) const
protected

◆ eval_value()

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::eval_value ( TData &  out,
const std::vector< TDataIn > &  dataIn,
const MathVector< dim > &  x,
number  time,
int  si 
) const
protected

evaluates the data at a given point and time

References ug::IsFiniteAndNotTooBig(), PROFILE_CALLBACK, UG_ASSERT, UG_CATCH_THROW, UG_COND_THROW, UG_THROW, and ug::useLuaCompiler.

◆ evaluate() [1/2]

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::evaluate ( TData &  value,
const MathVector< dim > &  globIP,
number  time,
int  si 
) const
inline

◆ evaluate() [2/2]

template<typename TData , int dim, typename TDataIn >
template<int refDim>
void ug::LuaUserFunction< TData, dim, TDataIn >::evaluate ( TData  vValue[],
const MathVector< dim >  vGlobIP[],
number  time,
int  si,
GridObject elem,
const MathVector< dim >  vCornerCoords[],
const MathVector< refDim >  vLocIP[],
const size_t  nip,
LocalVector u,
const MathMatrix< refDim, dim > *  vJT = NULL 
) const
inline

◆ free_callback_ref()

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::free_callback_ref ( )
protected

frees the callback-reference, if a callback was set.

◆ free_deriv_callback_ref()

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::free_deriv_callback_ref ( size_t  arg)
protected

frees callback-references for derivate callbacks

◆ operator()()

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::operator() ( TData &  out,
int  numArgs,
  ... 
) const
virtual

◆ set_deriv() [1/2]

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_deriv ( size_t  arg,
const char *  luaCallback 
)

sets the Lua function used to compute the derivative

Parameters
argthis is the derivative with respect to the parameter index arg
luaCallbackname of the Lua function to use as callback

References UG_THROW, and ug::useLuaCompiler.

Referenced by ug::LuaUserFunction< TData, dim, TDataIn >::set_input_and_deriv().

◆ set_deriv() [2/2]

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_deriv ( size_t  arg,
LuaFunctionHandle  handle 
)

◆ set_input() [1/2]

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_input ( size_t  i,
number  val 
)

set input value for paramter i

Parameters
iparameter index this input is bind to

◆ set_input() [2/2]

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_input ( size_t  i,
SmartPtr< CplUserData< TDataIn, dim > >  data 
)

set input value for paramter i

Parameters
iparameter index this input is bind to

References UG_ASSERT, and UG_THROW.

Referenced by ug::LuaUserFunction< TData, dim, TDataIn >::set_input_and_deriv().

◆ set_input_and_deriv()

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_input_and_deriv ( size_t  i,
SmartPtr< CplUserData< TDataIn, dim > >  input,
LuaFunctionHandle  deriv 
)
inline

◆ set_lua_value_callback() [1/2]

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_lua_value_callback ( const char *  luaCallback,
size_t  numArgs 
)
protected

◆ set_lua_value_callback() [2/2]

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_lua_value_callback ( LuaFunctionHandle  handle,
size_t  numArgs 
)
protected

◆ set_num_input()

template<typename TData , int dim, typename TDataIn >
void ug::LuaUserFunction< TData, dim, TDataIn >::set_num_input ( size_t  num)

set number of needed inputs

TODO: Note this is a public (non-virtual) function whose argument should be consistent with the number of the arguments. Should not it also resize the array for the references to the derivatives?

Member Data Documentation

◆ m_bPosTimeNeed

template<typename TData , int dim, typename TDataIn >
bool ug::LuaUserFunction< TData, dim, TDataIn >::m_bPosTimeNeed
protected

flag for position and time data

◆ m_cbDerivName

◆ m_cbDerivRef

◆ m_cbValueName

template<typename TData , int dim, typename TDataIn >
std::string ug::LuaUserFunction< TData, dim, TDataIn >::m_cbValueName
protected

callback name as string

◆ m_cbValueRef

◆ m_L

◆ m_numArgs

template<typename TData , int dim, typename TDataIn >
size_t ug::LuaUserFunction< TData, dim, TDataIn >::m_numArgs
protected

number of arguments to use

◆ m_vpDependData

template<typename TData , int dim, typename TDataIn >
std::vector<SmartPtr<DependentUserData<TDataIn, dim> > > ug::LuaUserFunction< TData, dim, TDataIn >::m_vpDependData
protected

data input casted to dependend data

◆ m_vpUserData

template<typename TData , int dim, typename TDataIn >
std::vector<SmartPtr<CplUserData<TDataIn, dim> > > ug::LuaUserFunction< TData, dim, TDataIn >::m_vpUserData
protected

LUACompiler types for compiled LUA code.

data input


The documentation for this class was generated from the following files: