MULTIBODY SIMULATION SOFTWARE - API documentation

chrono::ChLcpIterativeCuda Class Reference

#include <CHlcpIterativeCudaSolver.h>

Inheritance diagram for chrono::ChLcpIterativeCuda:

Inheritance graph
[legend]
Collaboration diagram for chrono::ChLcpIterativeCuda:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 ChLcpIterativeCuda (int mmax_iters=50, bool mwarm_start=false, double mtolerance=0.0, double momega=0.2, int max_num_GPU_contacts=60000, int max_num_GPU_bodies=10000, int max_num_GPU_bilaterals=1024)
virtual double Solve (ChLcpSystemDescriptor &sysd, bool add_Mq_to_f=false)
void SetDt (double mdt)
double GetDt ()
void SetMaxRecoverySpeed (double mrs)
double GetMaxRecoverySpeed ()
void SetF_factor (double mf)
double GetF_factor ()
void SetC_factor (double mf)
double GetC_factor ()
void SetCt_factor (double mf)
double GetCt_factor ()
virtual void IntegrateTimeStep (double mdt)
virtual void Set_do_integration_step (bool md)
virtual bool Get_do_integration_step ()

Protected Attributes

double dt
double max_recoveryspeed
double F_factor
double C_factor
double Ct_factor
unsigned int max_GPU_bodies
unsigned int max_GPU_contacts
unsigned int max_GPU_bilaterals
unsigned int n_bodies_GPU
unsigned int n_contacts_GPU
unsigned int n_bilaterals_GPU
bool do_integration_step
unsigned int step_counter
void * h_buffer_bodies
void * d_buffer_bodies
void * h_buffer_contacts
void * d_buffer_contacts
void * h_buffer_bilaterals
void * d_buffer_bilaterals
void * d_buffer_reduction


Detailed Description

An iterative LCP solver based on projective fixed point method, with overrelaxation. This solver runs on GPU boards from NVIDIA, version G80 or more recent. The GPU programming relies on CUDA library.

Constructor & Destructor Documentation

chrono::ChLcpIterativeCuda::ChLcpIterativeCuda ( int  mmax_iters = 50,
bool  mwarm_start = false,
double  mtolerance = 0.0,
double  momega = 0.2,
int  max_num_GPU_contacts = 60000,
int  max_num_GPU_bodies = 10000,
int  max_num_GPU_bilaterals = 1024 
)

Parameters:
mmax_iters  max.number of iterations
mwarm_start  uses warm start?
mtolerance  tolerance for termination criterion
momega  overrelaxation criterion
max_num_GPU_contacts  maximum allowed number of contacts
max_num_GPU_bodies  maximum allowed number of bodies
max_num_GPU_bilaterals  maximum allowed number of bilateral constraints


Member Function Documentation

double chrono::ChLcpIterativeCuda::Solve ( ChLcpSystemDescriptor sysd,
bool  add_Mq_to_f = false 
) [virtual]

Performs the solution of the LCP.

Returns:
the maximum constraint violation after termination.
Parameters:
sysd  system description with constraints and variables
add_Mq_to_f  if true, takes the initial 'q' and adds [M]*q to 'f' vector

Implements chrono::ChLcpSolver.

void chrono::ChLcpIterativeCuda::SetDt ( double  mdt  ) 

Set the integration dt step. Remember to update this value before calling Solve() , because the postprocessing will take care of time step integration, which depends on the dt.

void chrono::ChLcpIterativeCuda::SetMaxRecoverySpeed ( double  mrs  ) 

Set the maximum recovery speed for stabilization. Remember to update this value before calling Solve() , because the preprocessing will take care of building contact residuals with stabilization factors, which depends on this recovery speed value.

void chrono::ChLcpIterativeCuda::SetF_factor ( double  mf  ) 

Set the time step multiplier for the forces. Remember to update this value before calling Solve() , because the preprocessing will take care of applying forces with this scaling.

void chrono::ChLcpIterativeCuda::SetC_factor ( double  mf  ) 

Set the multiplier for the contact residuals. Remember to update this value before calling Solve() , because the preprocessing will take care of building contact residuals with stabilization factors, which depends on this recovery speed value.

void chrono::ChLcpIterativeCuda::SetCt_factor ( double  mf  ) 

Set the multiplier for the rheonomic contact residuals. Remember to update this value before calling Solve() , because the preprocessing will take care of building contact residuals, which may depend on this value.

void chrono::ChLcpIterativeCuda::IntegrateTimeStep ( double  mdt  )  [virtual]

After you performed Solve(), you can call the following function to execute a GPU kernel for doing the first order Eulero integration of body positions as p=p+v*dt The integration kernel reuses the same data structures just used for the Solve(), so it can be much faster then doing the integration on the serial processor.

virtual void chrono::ChLcpIterativeCuda::Set_do_integration_step ( bool  md  )  [virtual]

Turn on this functionality if you want that the integration step is performed by a CUDA kernel, right after the solution of the LCP.


CHRONO::ENGINE
C++ library for multibody simulation, (C) Alessandro Tasora
This API documentation has been generated on 17 Jul 2009 by Doxygen