wcs.h
Go to the documentation of this file.
1 #ifndef WCSH
2 #define WCSH
3 
4 #include "boolean.h"
5 #include "parameters.h"
6 
7 #include "cuiksystem.h"
8 #include "world.h"
9 
10 #ifdef _OPENMP
11  #include <omp.h>
12 #endif
13 
30 typedef struct {
31  boolean isCS;
34  Tworld *w;
36 } TAtlasBase;
37 
38 
48 #define CS_WD_EXT "world/cuik"
49 
50 
75 void InitCSWDFromFile(Tparameters *pr,char *name,TAtlasBase *wcs);
76 
89 #define CS_WD_INIT(pr,name,wcs) InitCSWDFromFile(pr,name,wcs)
90 
108 #define CS_WD_FROM_WORLD(ptr,wcs) { (wcs)->isCS=FALSE; (wcs)->cs=NULL; (wcs)->w=ptr; }
109 
127 #define CS_WD_FROM_CUIKSYSTEM(ptr,wcs) { (wcs)->isCS=TRUE; (wcs)->cs=ptr; (wcs)->w=NULL; }
128 
139 #define ON_CUIKSYSTEM(wcs) (wcs)->isCS
140 
141 
150 #define GET_WORLD(wcs) (wcs)->w
151 
160 #define GET_CUIKSYSTEM(wcs) (wcs)->cs
161 
162 
176 #define CS_WD_EVALUATE_SIMP_EQUATIONS(pr,p,r,wcs) if ((wcs)->isCS) EvaluateSimpCSEquations(pr,p,r,(wcs)->cs); else WorldEvaluateSimpEquations(pr,p,r,(wcs)->w);
177 
192 #define CS_WD_EVALUATE_SUBSET_SIMP_EQUATIONS(pr,st,p,r,wcs) if ((wcs)->isCS) EvaluateSubSetSimpCSEquations(pr,st,p,r,(wcs)->cs); else WorldEvaluateSubSetSimpEquations(pr,st,p,r,(wcs)->w);
193 
207 #define CS_WD_SIMP_INEQUALITIES_HOLD(pr,p,wcs) ((wcs)->isCS ? SimpInequalitiesHoldOnPoint(pr,p,(wcs)->cs) : WorldSimpInequalitiesHold(pr,p,(wcs)->w))
208 
209 
223 #define CS_WD_SIMP_INEQUALITIES_ERROR(pr,p,wcs) ((wcs)->isCS ? ErrorInSimpInequalitiesOnPoint(pr,p,(wcs)->cs) : WorldErrorInSimpInequalities(pr,p,(wcs)->w))
224 
238 #define CS_WD_GET_SYSTEM_VARS(sv,wcs) ((wcs)->isCS ? GetCSSystemVars(sv,(wcs)->cs) : GetWorldSystemVars(sv,(wcs)->w))
239 
250 #define CS_WD_GET_NUM_SYSTEM_VARS(wcs) ((wcs)->isCS ? GetCSNumSystemVariables((wcs)->cs) : GetWorldNumSystemVariables((wcs)->w))
251 
263 #define CS_WD_GET_VAR_TOPOLOGY(varID,wcs) ((wcs)->isCS ? GetCSVarTopology(varID,(wcs)->cs) : GetWorldVarTopology(varID,(wcs)->w))
264 
279 #define CS_WD_REGENERATE_ORIGINAL_POINT(pr,p,o,wcs) ((wcs)->isCS ? RegenerateOriginalPoint(pr,p,o,(wcs)->cs) : RegenerateWorldOriginalPoint(pr,p,o,(wcs)->w))
280 
294 #define CS_WD_INIT_CD(pr,mt,wcs) { if (!(wcs)->isCS) InitWorldCD(pr,mt,(wcs)->w); }
295 
312 #ifdef _OPENMP
313 #define CS_WD_IN_COLLISION(f,pr,s,sPrev,wcs) { if (((wcs)->isCS)||(!WorldCanCollide((wcs)->w))) f=FALSE; else { double *oPrev=NULL,*o; \
314  RegenerateWorldOriginalPoint(pr,s,&o,(wcs)->w);if ((sPrev!=NULL)&&(WorldContinuousCD((wcs)->w))) RegenerateWorldOriginalPoint(pr,sPrev,&oPrev,(wcs)->w); \
315  f=MoveAndCheckCD(pr,FALSE,omp_get_thread_num(),o,oPrev,(wcs)->w); \
316  free(o);if (oPrev!=NULL) free(oPrev);} \
317  }
318 #else
319 #define CS_WD_IN_COLLISION(f,pr,s,sPrev,wcs) { if (((wcs)->isCS)||(!WorldCanCollide((wcs)->w))) f=FALSE; else { double *oPrev=NULL,*o; \
320  RegenerateWorldOriginalPoint(pr,s,&o,(wcs)->w);if ((sPrev!=NULL)&&(WorldContinuousCD((wcs)->w))) RegenerateWorldOriginalPoint(pr,sPrev,&oPrev,(wcs)->w); \
321  f=MoveAndCheckCD(pr,FALSE,0,o,oPrev,(wcs)->w); \
322  free(o);if (oPrev!=NULL) free(oPrev);} \
323  }
324 #endif
325 
345 #ifdef _OPENMP
346  #define CS_WD_ORIGINAL_IN_COLLISION(pr,o,oPrev,wcs) (((wcs)->isCS)||(!WorldCanCollide((wcs)->w)) ? FALSE : MoveAndCheckCD(pr,FALSE,omp_get_thread_num(),o,oPrev,(wcs)->w))
347 #else
348  #define CS_WD_ORIGINAL_IN_COLLISION(pr,o,oPrev,wcs) (((wcs)->isCS)||(!WorldCanCollide((wcs)->w)) ? FALSE : MoveAndCheckCD(pr,FALSE,0,o,oPrev,(wcs)->w))
349 #endif
350 
359 #define CS_WD_COST_PTR(wcs) ((wcs)->isCS ? (void *)((wcs)->cs) : (void *)((wcs)->w))
360 
369 #define CS_WD_COST_FN(wcs) ((wcs)->isCS ? EvaluateCSCost : EvaluateWorldCost)
370 
387 #define CS_WD_COST(pr,simp,p,wcs) ((wcs)->isCS ? EvaluateCSCost(pr,simp,p,(void *)((wcs)->cs)) : EvaluateWorldCost(pr,simp,p,(void *)((wcs)->w)))
388 
401 #define CS_WD_GET_SIMP_TOPOLOGY(pr,tp,wcs) ((wcs)->isCS ? GetSimpCSTopology(pr,tp,(wcs)->cs) : GetWorldSimpTopology(pr,tp,(wcs)->w))
402 
417 #define CS_WD_REGENERATE_SOLUTION_POINT(pr,p,r,wcs) ((wcs)->isCS ? RegenerateSolutionPoint(pr,p,r,(wcs)->cs) : RegenerateWorldSolutionPoint(pr,p,r,(wcs)->w))
418 
432 #define CS_WD_GENERATE_SIMPLIFIED_POINT(pr,p,r,wcs) ((wcs)->isCS ? GenerateSimplifiedPoint(pr,p,r,(wcs)->cs) : WorldGenerateSimplifiedPoint(pr,p,r,(wcs)->w))
433 
446 #define CS_WD_ERROR_IN_SIMP_EQUATIONS(pr,p,wcs) ((wcs)->isCS ? ErrorInSimpCSEquations(pr,p,(wcs)->cs) : WorldErrorInSimpEquations(pr,p,(wcs)->w))
447 
460 #define CS_WD_GENERATE_SIMP_INITIAL_BOX(pr,b,wcs) { if ((wcs)->isCS) GenerateSimpInitialBox(pr,b,(wcs)->cs); else GetWorldSimpInitialBox(pr,b,(wcs)->w); }
461 
474 #define CS_WD_GET_SIMP_JACOBIAN(pr,J,wcs) { if ((wcs)->isCS) GetSimpCSJacobian(pr,J,(wcs)->cs); else GetWorldSimpJacobian(pr,J,(wcs)->w); }
475 
488 #define CS_WD_NEWTON_IN_SIMP(pr,p,wcs) ((wcs)->isCS ? CuikNewtonSimp(pr,p,(wcs)->cs) : WorldSimpCuikNewton(pr,p,(wcs)->w))
489 
500 #define CS_WD_DELETE(wcs) { if ((wcs)->isCS) { DeleteCuikSystem((wcs)->cs); free((wcs)->cs); } else { DeleteWorld((wcs)->w); free((wcs)->w); } }
501 
502 #endif
Definition of the boolean type.
boolean isCS
Definition: wcs.h:31
void InitCSWDFromFile(Tparameters *pr, char *name, TAtlasBase *wcs)
Initializes a world or a CuikSystem structre.
Definition: chart.c:618
All the necessary information to generate equations for mechanisms.
Definition: world.h:124
Definition of the Tworld type and the associated functions.
TCuikSystem * cs
Definition: wcs.h:32
Tworld * w
Definition: wcs.h:34
A table of parameters.
Definition of the TCuikSystem type and the associated functions.
Type defining the equations on which the atlas is defined.
Definition: wcs.h:30
A cuiksystem, i.e., a set of variables and equations defining a position analysis problem...
Definition: cuiksystem.h:181
Definition of the Tparameters type and the associated functions.