Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

functions.h

00001 /*******************************************************************************
00002 
00003    FUNCTIONS.H
00004 
00005    Authors: Peter Loan
00006             Krystyne Blaikie
00007 
00008    Copyright (c) 1996-2001 MusculoGraphics, a division of Motion Analysis Corp.
00009    All rights reserved.
00010 
00011    Description: This file contains function prototypes for all functions which
00012       are callable by the GMC or SD/FAST user.
00013 
00014 *******************************************************************************/
00015 
00016 #ifndef FUNCTIONS_H
00017 #define FUNCTIONS_H
00018 
00019 int    acpp_main(int argc, char* argv[]);
00020 void   append_if_necessary (char* str, char c);
00021 void   apply_external_forces(MotionData* inv_data);
00022 void   apply_joint_restraint_torques(SDModelStruct* sdm, double state[]);
00023 void   apply_muscle_forces(SDModelStruct* sdm);
00024 void   assign_muscle_states(SDModelStruct* sdm, double time, double state[]);
00025 double calc_active_force(MuscleStruct* ms, double norm_fiber_length);
00026 double calc_distance_between_points(double p1[], int n1, double p2[], int n2);
00027 double calc_excitation(MuscleStruct* ms, double time, double state[]);
00028 double calc_fiber_force(MuscleStruct* ms, double activation,
00029          double norm_fiber_length, double norm_fiber_velocity);
00030 double calc_fiber_velocity(MuscleStruct* ms, double activation,
00031             double active_force, double velocity_dependent_force);
00032 double calc_force_velocity(MuscleStruct* ms, double norm_fiber_velocity);
00033 int    calc_line_intersect_cylinder (
00034    double      p11[3],     /* input:  muscle point 1     */
00035    double      p22[3],     /* input:  muscle point 2     */
00036         double    p0[3],          /* input:  point on cylinder axis       */
00037    double      dn[3],          /* input:  direction vector of cyl axis */
00038    double      r,              /* input:  cylinder radius              */
00039    double*     rlen,    /* output: length of surface wrap   */
00040    double      r1[],    /* output: wrap tangent point 1     */
00041    double      r2[],    /* output: wrap tangent point 2     */
00042    double** wrap_pts,   /* output: intermediate surface wrap pts*/
00043    int*     num_wrap_pts,  /* output: number of intermediate pts  */
00044    int      wrap_axis,  /* input:  constraint axis    */
00045    int      wrap_sign,  /* input:  constraint direction     */
00046    WrapStruct*     mwrap,     /* in/out: muscle wrap structure */
00047    int*     p_flag,     /* output: did wrapping occur?      */
00048    WrapObject* wo);
00049 int    calc_line_intersect_ellipsoid (
00050    double      p1[3],      /* input:  muscle point 1     */
00051    double      p2[3],      /* input:  muscle point 2     */
00052    double      m[3],    /* input:  ellipsoid origin (0,0,0) */
00053    double      a[3],    /* input:  ellipsoid xyz radii      */
00054    double*     rlen,    /* output: length of surface wrap   */
00055    double      r1[],    /* output: wrap tangent point 1     */
00056    double      r2[],    /* output: wrap tangent point 2     */
00057    double** wrap_pts,   /* output: intermediate surface wrap pts*/
00058    int*     num_wrap_pts,  /* output: number of intermediate pts  */
00059    int      wrap_axis,  /* input:  constraint axis    */
00060    int      wrap_sign,  /* input:  constraint direction     */
00061    WrapStruct*     mwrap,     /* in/out: muscle wrap structure */
00062    int*     p_flag,     /* output: did wrapping occur?      */
00063    WrapObject* wo);
00064 int    calc_line_intersect_sphere(double p1[], double p2[], double m[],
00065                 double r, double *rlen, double r1[],
00066                 double r2[],
00067                 double** wrap_pts, int *num_wrap_pts,
00068                 int wrap_axis, int wrap_sign, WrapStruct* mwrap,
00069                 int *p_flag,
00070                 WrapObject* wo);
00071 void   calc_muscle_power(MuscleStruct* ms);
00072 void   calc_muscle_tendon_force(MuscleStruct* ms, double activation);
00073 double calc_muscle_tendon_length(MuscleStruct* ms);
00074 double calc_muscle_tendon_velocity(MuscleStruct* ms);
00075 double calc_nonzero_passive_force(MuscleStruct* ms, double norm_fiber_length,
00076               double norm_fiber_velocity);
00077 double calc_passive_force(MuscleStruct* ms, double norm_fiber_length,
00078            double norm_fiber_velocity);
00079 double calc_pennation(double fiber_length, double optimal_fiber_length,
00080             double initial_pennation_angle);
00081 void   calc_system_energy(SystemInfo* si);
00082 double calc_tendon_force(MuscleStruct* ms, double norm_tendon_length);
00083 void   check_object_info(void);
00084 void   check_wrapping_points(MuscleStruct* ms, double state[]);
00085 char*  clean_string(char buf[]);
00086 void   convert_point(double pt[], int frame1, int frame2);
00087 void   convert_string(char str[]);
00088 int    count_muscle_states(SDModelStruct* sdm);
00089 int    enter_gencoord(SDModelStruct* sdm, char gencoord_name[]);
00090 int    enter_segment(SDModelStruct* sdm, char segment_name[]);
00091 void   error(ErrorAction action, char str_buffer[]);
00092 double get_muscle_param_value(MuscleStruct* ms, char param_name[]);
00093 ReturnCode get_string_pair(char str_buffer[], char str1[], char str2[]);
00094 char*  get_temp_file_name(const char* baseFileName);
00095 WrapObject* get_wrap_object(char name[]);
00096 ReturnCode get_xypair_from_string(char str_buffer[], double* x, double* y);
00097 void   init_joint_functions(void);
00098 void   init_muscle_states(SDModelStruct* sdm, double state[]);
00099 void   init_object_info(void);
00100 void   init_q_restraint_functions(void);
00101 void   init_qs(void);
00102 void   init_segments(void);
00103 void   integrate(void (*func)(), double *time, double st[], double dst[], double param[],
00104                  double dt, double *step, int neqin, double tol, double work[], int *err, int *which);
00105 void   invert_3x3matrix(double matrix[][3], double inverse[][3]);
00106 void   invert_4x4matrix(double matrix[][4], double inverse[][4]);
00107 void   invert_4x4transform(double matrix[][4], double inverse[][4]);
00108 void   invert_matrix(double* matrix[], double* inverse[], int size);
00109 SBoolean is_absolute_path(char *path);
00110 ReturnCode load_kinetics_data(SDModelStruct* sdm, MotionData* data, char filename[],
00111                SBoolean verify_data);
00112 ReturnCode malloc_function(SplineFunction* func, int numpoints);
00113 void   message(char message_str[]);
00114 ReturnCode mstrcpy(char* dest_str[], char original_str[]);
00115 char*  parse_string(char str_buffer[], VariableType var_type,
00116           void* dest_var);
00117 FILE*  preprocess_file(char infile[], char outfile[]);
00118 void   prescribe_inverse_dynamics(SDModelStruct* sdm, MotionData* inv_data, int frame);
00119 void   print_3x3matrix(double mat[][3], char string[], FILE* stream);
00120 void   read_contact_pair(FILE** fp);
00121 ReturnCode read_double_array(FILE **fp, char ending[], char name[],
00122               SplineFunction* func);
00123 int    read_line(FILE** fp, char str_buffer[]);
00124 MusclePoint* read_muscle_attachment_points(FILE** fp, SDModelStruct* sdm,
00125                   int* numpoints, int* mp_array_size,
00126                   SBoolean* has_wrapping_points);
00127 ReturnCode read_muscle_file(SDModelStruct* sdm, char filename[]);
00128 ReturnCode read_muscle_groups(FILE** fp);
00129 int    read_nonempty_line(FILE** fp, char str_buffer[]);
00130 void   read_object(FILE** fp);
00131 void   read_object_group(FILE** fp);
00132 ReturnCode read_parameters_file(char params_file[], SDModelStruct* sdm,
00133             char** muscle_file, char** kinetics_file,
00134             char** output_motion_file, char** output_kinetics_file);
00135 ReturnCode read_polyhedron(PolyhedronStruct* ph, char filename[]);
00136 int    read_string(FILE** fp, char str_buffer[]);
00137 ReturnCode realloc_function(SplineFunction* func, int size);
00138 int    sduforce(double t, double q[], double u[]);
00139 int    sdumotion(double t, double q[], double u[]);
00140 void   set_data_frame(SDModelStruct* sdm, MotionData* inv_data, double q[],
00141             double u[], int frame);
00142 void   set_fixed_gencoords(SDModelStruct* sdm);
00143 void   set_prescribed_gencoords(double t, double q[], double u[],
00144             SDModelStruct* sdm, MotionData* kinetics_data);
00145 void   set_prescribed_motion(SDModelStruct* sdm, QType type, int value);
00146 FILE*  simm_fopen (const char* name, const char* mode);
00147 void*  simm_malloc(unsigned mem_size);
00148 void*  simm_calloc(unsigned num_elements, unsigned elem_size);
00149 void*  simm_realloc(void* ptr, unsigned mem_size, ReturnCode* rc);
00150 ReturnCode verify_assembly(SDModelStruct* sdm, double state[]);
00151 void write_data(SDModelStruct* sdm, MotionData* inv_data, FILE** fp);
00152 
00153 /* Function Prototypes for the user-created muscle-state functions */
00154 
00155 /* functions defined in INITS.C */
00156 int muscle_init_func1(MuscleStruct *ms, double state[]);
00157 int muscle_init_func2(MuscleStruct *ms, double state[]);
00158 int muscle_init_func3(MuscleStruct *ms, double state[]);
00159 int muscle_init_func4(MuscleStruct *ms, double state[]);
00160 int muscle_init_func5(MuscleStruct *ms, double state[]);
00161 int muscle_init_func6(MuscleStruct *ms, double state[]);
00162 int muscle_init_func7(MuscleStruct *ms, double state[]);
00163 int muscle_init_func8(MuscleStruct *ms, double state[]);
00164 int muscle_init_func9(MuscleStruct *ms, double state[]);
00165 int muscle_init_func10(MuscleStruct *ms, double state[]);
00166 
00167 /* functions defined in DERIVS.C */
00168 int muscle_deriv_func1(double time, MuscleStruct *ms, double state[],
00169              double dstate[], double *muscle_force);
00170 int muscle_deriv_func2(double time, MuscleStruct *ms, double state[],
00171              double dstate[], double *muscle_force);
00172 int muscle_deriv_func3(double time, MuscleStruct *ms, double state[],
00173              double dstate[], double *muscle_force);
00174 int muscle_deriv_func4(double time, MuscleStruct *ms, double state[],
00175              double dstate[], double *muscle_force);
00176 int muscle_deriv_func5(double time, MuscleStruct *ms, double state[],
00177              double dstate[], double *muscle_force);
00178 int muscle_deriv_func6(double time, MuscleStruct *ms, double state[],
00179              double dstate[], double *muscle_force);
00180 int muscle_deriv_func7(double time, MuscleStruct *ms, double state[],
00181              double dstate[], double *muscle_force);
00182 int muscle_deriv_func8(double time, MuscleStruct *ms, double state[],
00183              double dstate[], double *muscle_force);
00184 int muscle_deriv_func9(double time, MuscleStruct *ms, double state[],
00185              double dstate[], double *muscle_force);
00186 int muscle_deriv_func10(double time, MuscleStruct *ms, double state[],
00187          double dstate[], double *muscle_force);
00188 
00189 /* functions defined in ASSIGNS.C */
00190 int muscle_assign_func1(double time, MuscleStruct *ms, double state[]);
00191 int muscle_assign_func2(double time, MuscleStruct *ms, double state[]);
00192 int muscle_assign_func3(double time, MuscleStruct *ms, double state[]);
00193 int muscle_assign_func4(double time, MuscleStruct *ms, double state[]);
00194 int muscle_assign_func5(double time, MuscleStruct *ms, double state[]);
00195 int muscle_assign_func6(double time, MuscleStruct *ms, double state[]);
00196 int muscle_assign_func7(double time, MuscleStruct *ms, double state[]);
00197 int muscle_assign_func8(double time, MuscleStruct *ms, double state[]);
00198 int muscle_assign_func9(double time, MuscleStruct *ms, double state[]);
00199 int muscle_assign_func10(double time, MuscleStruct *ms, double state[]);
00200 
00201 /* functions defined in PIPETOOLS.C */
00202 int check_for_sderror(char caller[]);
00203 void convert_point2(int frame1, double p1[], int frame2, double p2[]);
00204 void init_joints(void);
00205 
00206 /* functions defined in INVERT.C */
00207 void ludcmp(double* a[], int n, int indx[], double* d);
00208 void lubksb(double* a[], int n, int indx[], double b[]);
00209 
00210 /* functions defined in LCP_SOLVER.C */
00211 #if CONTACT_DETECTION
00212 void compute_contact_forces(int impact_flag);
00213 #endif
00214 
00215 /* functions defined in IMPACT.C */
00216 #if CONTACT_DETECTION
00217 int find_impact(double *t, double y[], double dy[], double t_final,
00218    double *work, double param[], int *status);
00219 void handle_impacts(double t, double y[], double dy[]);
00220 #endif
00221 
00222 /* functions defined in CONTACT.C */
00223 #if CONTACT_DETECTION
00224 void apply_forces_at_contacts(int n, ContactInfo list[]);
00225 void check_for_initial_penetration(FILE **out, double y[], double dy[]);
00226 void copy_cnode(ContactInfo from, ContactInfo *to);
00227 void create_bilateral_contacts(double y[]);
00228 void determine_contacts(double y[], double dy[]);
00229 void get_bilat_contact_info(void);
00230 void get_contact_info(void);
00231 double get_norm_rel_vel(int i, double vn[]);
00232 double get_rel_vel(int cont, double rel_vel[]);
00233 double get_tang_rel_vel(int i, double vt[]);
00234 void init_contact_info(void);
00235 ReturnCode makepaths(void);
00236 void print_contact_list(ContactInfo list[], int n);
00237 #endif
00238 
00239 /* functions defined in GMC.C */
00240 void calc_muscle_derivatives(double time, double state[], double dstate[], 
00241    double param[], int* status);
00242 
00243 /* functions derived in FORMAIN.C */
00244 void calc_derivatives(double t, double y[], double dy[], double param[], int *status);
00245 
00246 /* functions defined in OUTPUT.c */
00247 void get_reaction_forces(void);
00248 double get_time_now(void);
00249 void print_body_info(void);
00250 void print_final_information(int step, int num_steps, double t, double y[], double dy[], SystemInfo* si);
00251 void print_simulation_info(int interval, double time, double state[], SystemInfo* si);
00252 void print_state(double y[], double dy[]);
00253 void set_up_motion_file(FILE **fp, char filename[], int num_steps, double step_size);
00254 void write_motion_frame(int interval, double time, double state[], 
00255    FILE **fp);
00256 void show_array(char name[], double vect[], int start, int end);
00257 void show_array_as_matrix(char name[], double vec[], int n, int m);
00258 void show_matrix(char name[], double *mat[], int m, int n);
00259 void show_vector(char name[], double vect[]);
00260 void time_elapsed(double t_in, double t_out);
00261 
00262 /* functions defined in OBJECT.c */
00263 void copy_polyhedron(PolyhedronStruct* from, PolyhedronStruct* to);
00264 void show_object_info(void);
00265 
00266 /* spring-based contact detection routines */
00267 void check_spring_info(void);
00268 void apply_spring_forces(SDModelStruct *sdm);
00269 void show_spring_info(void);
00270 
00271 
00272 #endif /* FUNCTIONS_H */

Generated on Wed Aug 20 02:17:05 2003 for Simulation Software by doxygen1.3