Finite Element Domain Decomposition Library
FEDDLib
Loading...
Searching...
No Matches
sms.hpp
1#ifndef _SMS_H
2#define _SMS_H
3
4#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(WIN64) || defined(__WIN64__) || defined(_WIN64)
5#define SMSWINDOWS
6#define _CRT_SECURE_NO_DEPRECATE
7#endif
8
9#if defined (__linux) || defined (linux) || defined(__linux__)
10#define SMSLINUX
11#endif
12
13#if defined (__MACH) || defined (MACH) || defined(__MACH__)
14#define SMSMAC
15#endif
16
17#include <stdio.h>
18#include <stdlib.h>
19#include <math.h>
20#include <float.h>
21#include <string.h>
22
23#ifdef SMSWINDOWS
24#include <direct.h>
25#endif
26
27#ifdef SMSLINUX
28#include <unistd.h>
29#include <sys/dir.h>
30#include <sys/param.h>
31#include <dlfcn.h>
32#endif
33
34#ifdef SMSMAC
35#include <dlfcn.h>
36#endif
37
38#ifndef SMSMIN
39#define SMSMIN(a,b) (((a)<(b))?(a):(b))
40#endif
41#ifndef SMSMAX
42#define SMSMAX(a,b) (((a)>(b))?(a):(b))
43#endif
44
45#ifdef SMSWINDOWS
46#define TIMEB _timeb
47#define ISNAN _isnan
48#define FINITE _finite
49#define DLLEXPORT __declspec(dllexport)
50#define FTIME _ftime
51#define GETCWD _getcwd
52#define putw _putw
53#define getw _getw
54#endif
55
56#ifdef SMSLINUX
57#define GETCWD getcwd
58#define _copysign copysign
59#define FTIME ftime
60#define TIMEB timeb
61#define _MAX_PATH 4096
62#define _isnan isnan
63#define _finite finite
64#define ISNAN isnan
65#define FINITE finite
66#define CALLBACK
67#define DLLEXPORT
68#define _inline
69#endif
70
71#ifdef SMSMAC
72#define GETCWD getcwd
73#define _copysign copysign
74#define FTIME ftime
75#define TIMEB timeb
76#define _MAX_PATH 4096
77#define _isnan isnan
78#define _finite finite
79#define ISNAN isnan
80#define FINITE finite
81#define CALLBACK
82#define DLLEXPORT
83#define _inline
84#endif
85
86#define ID_IDataLength 0
87#define ID_RDataLength 1
88#define ID_IDataLast 2
89#define ID_RDataLast 3
90#define ID_feap1 4
91#define ID_Iteration 5
92#define ID_TotalIteration 6
93#define ID_LinearEstimate 7
94#define ID_ErrorStatus 8
95#define ID_MaterialState 9
96#define ID_NoSensParameters 10 /* number of sens parameters*/
97#define ID_ElementShape 11
98#define ID_SensIndex 12
99#define ID_OutputFile 13
100#define ID_MissingSubroutine 14
101#define ID_SubDivergence 15
102#define ID_ElementState 16
103#define ID_feap2 17
104#define ID_feap3 18
105#define ID_NoNodes 19
106#define ID_NoElements 20
107#define ID_NoESpec 21
108#define ID_MaxEquations 22 /*maximum number of equations - no constraints*/
109#define ID_Debug 23
110#define ID_NoDimensions 24
111#define ID_SymmetricTangent 25
112#define ID_MinNoTmpData 26
113#define ID_NoEquations 27
114#define ID_NegativePivots 28
115#define ID_Task 29
116#define ID_NoSubIterations 30
117#define ID_CurrentElement 31 /* 1,2,..*/
118#define ID_MaxPhysicalState 32
119#define ID_ExtrapolationType 33
120#define ID_TmpContents 34
121#define ID_AssemblyNodeResidual 35
122#define ID_NodeReordering 36
123#define ID_SkipSolver 37
124#define ID_NoNSpec 38
125#define ID_SetSolver 39
126#define ID_NoDesignVelocityFields 40 /* number of design velocity fields: user defined + 1 + 0 */
127#define ID_GeometricTangentMatrix 41
128#define ID_DataMemory 42
129#define ID_SolverMemory 43
130#define ID_Solver 44
131#define ID_ErrorElement 45
132#define ID_SkipTangent 46
133#define ID_SkipResidual 47
134#define ID_SubIterationMode 48
135#define ID_Solver1 49
136#define ID_Solver2 50
137#define ID_Solver3 51
138#define ID_Solver4 52
139#define ID_Solver5 53
140#define ID_ContactProblem 54
141#define ID_Contact1 55
142#define ID_Contact2 56
143#define ID_Contact3 57
144#define ID_Contact4 58
145#define ID_Contact5 59
146#define ID_PostIteration 60
147#define ID_dummy1 61
148#define ID_PostIterationCall 62
149#define ID_Step 63
150#define ID_DebugElement 64
151#define ID_ZeroPivots 65
152#define ID_GlobalIterationMode 66
153#define ID_NoDiscreteEvents 67
154#define ID_LineSearchUpdate 68
155#define ID_NoBackStep 69 /* number of failed iterative solution steps */
156#define ID_SkipSubIteration 70
157#define ID_HideIndeterminate 71
158#define ID_NoMessages 72
159#define ID_MaxMessages 73
160#define ID_NoThreads 74
161#define ID_NoMultipliers 75 /* number of boundary conditions multipliers*/
162#define ID_NoBCFields 76 /* number of bounday conditions design sensitivity fields*/
163#define ID_NoLinearConstraints 77 /* number of linear contrain equations */
164#define ID_DOFScaling 78 /* weather DOF are scaled in the case of multifield problems*/
165#define ID_SensIndexStart 79 /* starting sensitivity index in a group of derivatives calculated together*/
166#define ID_SensIndexEnd 80 /* ending sensitivity index in a group of derivatives calculated together*/
167#define ID_SensMaxGroupLength 81 /* maximal number of sensitivity derivatives calculated together - for dimensioning of working fields*/
168#define ID_NoFirstOrderDerivatives 82 /* == NoParameters*/
169#define ID_NoSecondOrderDerivatives 83
170#define ID_NoThirdOrderDerivatives 84
171#define ID_TangentMatrixMemory 85
172#define ID_ArcLengthStatus 86 /* 0 -arclength is not active */
173#define ID_ArcLengthPredictorSignCriterion 87 /* 1-> Sign=Sign(INCRp*up) - by Feng 2-> Sign=Sign(det[Kt]) */
174#define ID_ArcLengthMethod 88 /* 1 - Ordinary Arc Length analysis 2 - Arc Length analysis by Pohl */
175#define ID_NoSystemNodes 89 /* number of extra nodes dummy nodes, system lagrange, etc.
176 node selectors and operations only operates on true nodes unless domain is
177 defined explicitly*/
178#define ID_Solver6 90
179#define ID_SolverIDataLength 91 /*actual length of SolverIData is NoSolverGlobalConst+length of additional i parameters*/
180#define ID_SolverRDataLength 92 /*actual length of SolverRData is NoSolverGlobalConst+length of additional a parameters*/
181#define ID_NoSensProblems 93 /* number of solved sensitvity problems */
182#define ID_NoShapeFields 94
183#define ID_NoParameterFields 95
184#define ID_VVectorSize 96
185#define ID_NoAllNodes 97 /* NoNodes+NoSystemNodes*/
186#define ID_MaxNoNodes 98
187#define ID_MaxNoElements 99
188#define ID_NoSensDerivatives 100 /*NoFirstOrderDerivatives+NoSecondOrderDerivatives+NoThirdOrderDerivatives*/
189#define ID_SensRowStart 101 /* starting row of band of second order sensitvity matrix - ID_SensIndexStart*/
190#define ID_SensRowEnd 102 /* ending row of band of second order sensitvity matrix - ID_SensIndexEnd*/
191#define IData_Last 103 /* used space in IData field*/
192#define IData_Length 400 /* length of idata vector */
193
194#define ERROR_NoError 0
195#define ERROR_Warning 1
196#define ERROR_StepCut 2
197#define ERROR_Fatal 3
198
199#define TASK_Quit -1
200#define TASK_User 0
201#define TASK_TangentAndResidual 1
202#define TASK_Residual 2
203#define TASK_SensitivityPseudoLoad 3
204#define TASK_DependentSensitivity 4
205#define TASK_Postprocessing 5
206#define TASK_Tangent 6
207#define TASK_GlobalInitialisation 7
208#define TASK_ElementInitialisation 8
209#define TASK_NodePositionsNormals 9
210
211#define TMPContents_ZERO 0
212#define TMPContents_Residual 1
213#define TMPContents_Post 2
214
215#define SOLVER_FALSE 0
216#define SOLVER_LU 1
217#define SOLVER_LDL 2
218#define SOLVER_SLU 3
219#define SOLVER_UMF 4
220#define SOLVER_PARDISO 5
221#define SOLVER_ITERATIVE 6
222
223#define RD_Multiplier 0
224#define RD_ResidualError 1
225#define RD_IncrementError 2
226#define RD_MFlops 3
227#define RD_SubMFlops 4
228#define RD_Time 5
229#define RD_TimeIncrement 6
230#define RD_MultiplierIncrement 7
231#define RD_SubIterationTolerance 8
232#define RD_LineSearchStepLength 9
233#define RD_PostMaxValue 10
234#define RD_PostMinValue 11
235#define RD_TotalEnergy 12
236#define RD_PotentialEnergy 13
237#define RD_KineticEnergy 14
238#define RD_Solver1 15
239#define RD_Solver2 16
240#define RD_Solver3 17
241#define RD_Solver4 18
242#define RD_Solver5 19
243#define RD_Contact1 20
244#define RD_Contact2 21
245#define RD_Contact3 22
246#define RD_Contact4 23
247#define RD_Contact5 24
248#define RD_ContactSearchTolerance 25
249#define RD_MinX 26
250#define RD_MinY 27
251#define RD_MinZ 28
252#define RD_MaxX 29
253#define RD_MaxY 30
254#define RD_MaxZ 31
255#define RD_XYZRange 32
256#define RD_KAndRTime 33
257#define RD_SolverTime 34
258#define RD_PreviousMultiplierIncrement 35
259#define RD_SpatialTolerance 36
260#define RD_Parameter 37
261#define RD_ParameterIncrement 38
262#define RD_ArcLengthPsi1 39 /*scaling for natuaral BC norm*/
263#define RD_ArcLengthPsi2 40 /*scaling for essential BC norm*/
264#define RD_ArcLengthDirectionCheck 41 /*chect for false direction if RData[RD_IncrementError]<tol*/
265#define RD_ArcLengthDirectionTolerance 42 /*direction is false when cos fi < -1+ DirectionTolerance*/
266#define RD_MinElementSize 43
267#define RD_Solver6 44
268#define RD_SensRTime 45 /*time to evaluate sensitivity pseudo-load vectors and resolve locally coupled sensistivity problems*/
269#define RD_SensSolTime 46 /*time to solve right-hand sides of sensitvity problem*/
270#define RD_ProfileTime 47 /* slot for profiling - non specific*/
271#define RData_Last 48 /* used space in RData field*/
272#define RData_Length 400 /* length of rdata vector */
273
274/*comptibility with old C source codes before version 6.2*/
275#define NoGroupData NoDomainData
276#define GroupDataNames DomainDataNames
277
279
280typedef struct{
281 struct {
282 int NodeIndex; /*0,1,2,...*/
283 int NoDOF;
284 int SpecIndex; /*0,1,...*/
285 int NoElements; /* set by SetSolver */
286 } id;
287 int *DOF; /* 0,1,... active DOF
288 -1 constrained by input data
289 -2 constrained by user after SMTAnalysis (for e.g. staggered schemes)
290 -3 constrained automatically due to the deactivation of NodeSpec - set by SMTSetSolver
291 */
292 int *Elements; /* pointer set by SetSolver 1,2,3... */
293 double *X;
294 double *Bt; /* holds data fields Bt */
295 double *Bp; /* holds data fields Bp */
296 double *dB; /* holds data fields dB */
297 double *at;
298 double *ap;
299 double *da;
300 double *st; /*sens in time t dof/par*/
301 double *sp;
302 double *ht;
303 double *hp;
304 double *Data; /* holds data fields Data,ADVF length NoNodeData+NoDesignVelocityFields*/
305 double *tmp;
307
308typedef struct{
309 struct{
310 int SpecIndex; /*1 0,1,...*/
311 int NoDOF; /*2*/
312 int NoNodeStorage; /*3 length of node data ht and hp field*/
313 int NoNodeData; /*4 lenght of node data Data field */
314 int NoData; /*5 length of node spec Data field */
315 int NoTmpData; /*6 max(SMTIData["MinNoTmpData"],NoDOF)*/
316 int Constrained; /*7 */
317 int Fictive; /*8* not a topological node*/
318 int Dummy; /*9 True - specification is a dummy node specification*/
319 int DummyNode; /*10 index of dummy node if exists 1,2,...*/
320 int Active; /*11 0=>freeze all nodes with given spec */
321 int dummy1; /* compatibility */
322 int dummy2;
323 int dummy3;
324 int dummy4;
325 }id;
326 double *Data;
327 char *NodeID;
328 /* zero Bt, Bp, dB in the case that there are no boundary conditions specified
329 dimension (NoDOF+(1+NoSensDerivatives))NoMultipliers */
330 void *dummy1;
331 void *dummy2;
332 void *dummy3;
333 double *DOFScaling;/* DOF scaling factor for multifield problems - NoDOF numbers*/
334 int *SensBVFIndex;/* boundary conditions design velocity field index NoDOF*NoSensDerivatives
335 index to ADVF node Data field */
337
338typedef struct{
339 struct{
340 int ElemIndex; /*0,1...*/
341 int SpecIndex; /*0,1,..*/
342 int Active; /* >0 active element for assembly
343 1 - original active element
344 2 - added active element
345 0 - deleted element
346 -1 -original inactive (staggered schemes)
347 -2 -added inactive (staggered schemes)
348 */
349 }id;
350 double *Data;
351 int *Nodes; /*1,2,... cn=Nodes[ce->Nodes[l]-1] !! */
352 double *ht;
353 double *hp;
355
356#define DEFAULT_USER_ARGUMENTS double*,void*,ElementData*,NodeSpec**,NodeData**,double*,int*
357#ifndef USER1_ARGUMENTS
358#define USER1_ARGUMENTS DEFAULT_USER_ARGUMENTS
359#endif
360#ifndef USER2_ARGUMENTS
361#define USER2_ARGUMENTS DEFAULT_USER_ARGUMENTS
362#endif
363#ifndef USER3_ARGUMENTS
364#define USER3_ARGUMENTS DEFAULT_USER_ARGUMENTS
365#endif
366#ifndef USER4_ARGUMENTS
367#define USER4_ARGUMENTS DEFAULT_USER_ARGUMENTS
368#endif
369#ifndef USER5_ARGUMENTS
370#define USER5_ARGUMENTS DEFAULT_USER_ARGUMENTS
371#endif
372#ifndef USER6_ARGUMENTS
373#define USER6_ARGUMENTS DEFAULT_USER_ARGUMENTS
374#endif
375#ifndef USER7_ARGUMENTS
376#define USER7_ARGUMENTS DEFAULT_USER_ARGUMENTS
377#endif
378
379typedef struct ElementSpec{
380 char *Code;
381 struct{
382 int (*SetElSpec)(struct ElementSpec *,int *,int ,int);
383 void (*SKR)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *,double *,double **);
384 void (*SRE)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *,double *);
385 void (*SSE)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *,double **);
386 void (*SHI)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *);
387 void (*SPP)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *,double **,double **);
388 void (*ELI)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *);
389 void (*PAN)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *,double **);
390 void (*User1)(USER1_ARGUMENTS);
391 void (*User2)(USER2_ARGUMENTS);
392 void (*User3)(USER3_ARGUMENTS);
393 void (*User4)(USER4_ARGUMENTS);
394 void (*User5)(USER5_ARGUMENTS);
395 void(*SS2)(double *, struct ElementSpec *, ElementData *, NodeSpec **, NodeData **, double *, int *, double **);
396 void (*User7)(USER7_ARGUMENTS);
397 void (*Tasks)(double *,struct ElementSpec *,ElementData *,NodeSpec **,NodeData **,double *,int *,double *,double **,
398 int *,int *,int *,double *,int *, double *);
399 void (*CondensationData)(struct ElementSpec *,ElementData *, NodeSpec **,NodeData **, double *rdata,
400 int *idata,double **h, double **ha, double **hb,double **dh);
401 }user;
402 struct{
403 int SpecIndex; /*0,1,2...*/
404 int NoDimensions;
405 int NoDOFGlobal;
406 int NoDOFCondense;
407 int NoNodes;
408 int NoDomainData;
409 int NoSegmentPoints;
410 int IntCode;
411 int NoTimeStorage;
412 int NoElementData;
413 int NoIntPoints;
414 int NoGPostData;
415 int NoNPostData;
416 int SymmetricTangent;
417 int NoIntPointsA;
418 int NoIntPointsB;
419 int NoIntPointsC;
420 int NoSensNames;
421 int ShapeSensitivity;
422 int NoIData;
423 int NoRData;
424 int DefaultIntegrationCode;
425 int DemoLimitation;
426 int NoAdditionalData;
427 int NoCharSwitch;
428 int NoIntSwitch;
429 int NoDoubleSwitch;
430 int CreateDummyNodes; /*unused - for compatibility with old c files only*/
431 int PostIterationCall;
432 int Active; /* 11 0=>freeze all elements with given spec */
433 int DOFScaling; /* weather DOF scaling is supported */
434 int EBCSensitivity;
435 int SensitivityOrder;
436 int WorkingVectorSize;
437 }id;
438 char *Topology;
439 char **DomainDataNames;
440 char **GPostNames;
441 char **NPostNames;
442 int *Segments;
443 int *DOFGlobal;
444 int *dummy1;
445 int *SensPVFIndex; /* */
446 int *NoNodeStorage;
447 int *NoNodeData;
448 double *Data;
449 double *IntPoints;
450 double *ReferenceNodes;
451 int *NodeSpecs; /* index 0,1,2,.. */
452 double *AdditionalData;
453 char *OutFileName;
454 char *AdditionalNodes;
455 char **NodeID;
456 char *AdditionalGraphics;
457 char **CharSwitch;
458 int *IntSwitch;
459 double *DoubleSwitch;
460 char **SensitivityNames;
461 char *MainTitle;
462 char *SubTitle;
463 char *SubSubTitle;
464 int *SensLowerOrderIndex;/* fi_i, fi_j, fi_k, fi_ij, fi_ik, fi_jk ... for all sens par , all orders */
465 char *MMANextStep;
466 char *MMAStepBack;
467 char *MMAPreIteration;
468 char **IDataNames;
469 int *IDataIndex;
470 char **RDataNames;
471 int *RDataIndex;
472 void *dummy2;
473 char *Bibliography;
474 void *dummy3;
475 void *dummy4;
476 double *PostNodeWeights;
477 int *MMAInitialisation;
478 double *Version;
479 void *dummy5;
480 void *dummy6;
481 void *dummy7;
482 void *dummy8;
483 void *dummy9;
484 void *dummy10;
485 void *dummy11;
486 void (*Execute)(char *f,char *m);
487 void (*BreakPoint)(char *s, char *c,int m, int p);
488 int (*BoundCheck)(int i,int j,int k,char *m,char *s,char *d,char *e);
490
491double *SMTIntPoints(int *icode,int *ngpo);
492
493double *SMTMultiIntPoints(int *icode,int *idata, int *ngpo, int *na,int *nb,int *nc,int all);
494
495double *SMTSetReferenceNodes(char *code);
496
497double SMSDot(double a[],double b[],int n);
498
499double SMSSum(double a[],int n);
500
501_inline double SMSDeltaPart(double *a,int i, int j,int k);
502
503void SMSMove(double a[],double b[],int n);
504
505void SMSZero(double a[],int n);
506
507void SMSRecover(double *hb, double *hg, double *du, int nb, int ne);
508
509void SMSCondense(double **s,double *p,double *hb, double *hg,int nb, int ne);
510
511double SMSIsDOFConstrained(int i,double a,double b);
512
513double Time();
514
515/*sensitivity related definitions*/
516#define PD_MAXSensFirstOrder 200 /*max first order parameters in the case of second order analysis
517 to speed up some algorithms*/
518void SensDotProduct(ElementSpec *es,ElementData *ed,NodeSpec **ns,NodeData **nd,int *IData,double *KK,double **s,int symm);
519
520#define SMSKDelta(i,j) (((i)==(j))?(1e0):(0e0))
521#define Power SMSPower
522#define SMSPower(x,y) (pow((double)(x),(double)(y)))
523#define Sqrt(x) (sqrt((double)(x)))
524#define Cbrt(x) ( x<0 ? -pow(-(double)(x),1./3.) : pow((double)(x),1./3.) )
525#define SMSAbs(x) (fabs((double)(x)))
526#define Less(a,b,c) (a<b && b<c)
527#define LessEqual(a,b,c) (a<=b && b<=c)
528#define Greater(a,b,c) (a>b && b>c)
529#define GreaterEqual(a,b,c) (a>=b && b>=c)
530
531/* structures and function definitions for Steering */
532
533#define COPT_LEN 4
534#define MAX_DATA_LEN 100
535
536#define OPT_DIVERGENCE "Divergence"
537#define OPT_AUTOMATIC "Automatic"
538#define OPT_TRUE "True"
539#define OPT_FALSE "False"
540#define OPT_LIST "List"
541#define OPT_IGNORE "Ignore"
542
543#define STAT_N_A "N/A"
544#define STAT_NULL "Null"
545#define STAT_MAX_ITERATIONS "MaxIterations"
546#define STAT_CONVERGENCE "Convergence"
547#define STAT_ERR_STATUS_2 "ErrorStatus-2"
548#define STAT_ALTERNATE "Alternate"
549#define STAT_GLOB_DIVERGENCE "Global divergence"
550#define STAT_ERR_AND_DIVERGENCE "ErrorStatus & Divergence"
551#define STAT_IGNORE_MINB_ALTERNATE "IgnoredMinBound-Alternate"
552#define STAT_IGNORE_MINB_CONV "IgnoredMinBound-Convergence"
553#define STAT_MIN_BOUND "MinBound"
554
555#define T_Abort "Abort"
556#define T_Interrupt "Interrupt"
557#define T_Analyze "Analyze"
558#define T_AdaptiveBC "Adaptive BC"
559#define T_AdaptivePower "Adaptive Power"
560#define T_AdaptiveTime "Adaptive Time"
561#define T_MaxBound "MaxBound"
562#define T_IgnoredMinBound "IgnoredMinBound"
563#define T_MinBound "MinBound"
564
565#define TYPE_INT "int"
566#define TYPE_DOUBLE "double"
567#define TYPE_LONG "long"
569#define MAX_ITER 1000
570
571typedef struct
572{
573 char Alternate[MAX_DATA_LEN];
574 double AlternateList[6]; /* {{_,_},{_,_},{_,_}} */
575 int PostIteration; /* T/F (-1:automatic) */
576 int IgnoreMinBound; /* T/F */
577 int AlternativeTarget; /* T/F */
578 char Type[MAX_DATA_LEN];
579 int TargetIterations;
580 double MinIncrement; /* lambda or time */
581 double MaxIncrement;
582 double Target;
583 int ConvFunctOpt; /* 1,2,3 */
584 double LargeDrop;
586
587typedef struct
588{
589 char Indeterminate[MAX_DATA_LEN];
590 char MaxIterations[MAX_DATA_LEN];
591 char Convergence[MAX_DATA_LEN];
592 char ErrorStatus[MAX_DATA_LEN];
593 char Alternate[MAX_DATA_LEN];
594 char Divergence[MAX_DATA_LEN];
595 char Other[MAX_DATA_LEN];
596 int IsOtherDefined; /* T/F */
598
599typedef struct
600{
601 int StepBack;
602 int StepForward;
603 double Increment;
604 char Report[MAX_DATA_LEN];
605 ConvergenceStatus StateDiagnostic;
607
608typedef struct
609{
610 double CurrentDa;
611 int OneMoreIter; /* T/F */
612 int Converged; /* T/F */
613 double* Da;
614 int DaLen;
615 double DLambda;
616 int IsDLambdaNull;
617 double Dt;
618 int isDtNull;
619 ConvergenceStatus StateDiagnostic;
620 int FirstAlternateIter;
621 int Level;
622 int Error;
623 int PostIteration; /* T/F */
624 int ShortReturn; /* T/F */
625 int SubIterMode;
626 int GlobalIterMode;
627 double* R;
628 int RLen;
629 int* NoDiscreteEvents;
630 int NoDiscreteEventsLen;
631 int ConvergedIteration;
632 double ResidualError;
633 ConvergenceReturn LastReturnValueBeforePostIter;
635/* 19 - last 10 steps for tail window */
636/* default {} */
637
638typedef struct
639{
640 double TimeFrequency;
641 double MultiplierFrequency;
642 double StepFrequency;
643} PutOptions;
644
645typedef struct
646{
647 double Tolerance;
648 int Summation;
649 int *IntegerInput;
650 double *RealInput;
651 int *Elements;
652 int NoElements;
653 int LastIntegerOutputSize;
654 int LastRealOutputSize;
656
657typedef struct
658{
659 int Failed;
660 int Type;
661 int IntegerOutputLength;
662 int *IntegerOutput;
663 int RealOutputLength;
664 double *RealOutput;
665 int *IntegerOutputForElements;
666 double *RealOutputForElements;
667 double *PostVector; /* postprocessing vector length NoAllNodes */
668 double *MatrixGlobal; /* global matrix length NoDOF*NoDOF*/
669 double *VectorGlobal; /* global vector length NoDOF*/
670} TaskReturn;
671
672typedef struct
673{
674 char *SimulationDllFile;
675 char *H5InputFile;
676 void (*InitializeConvergence)();
677 int (*NextStep)(double, double, double);
678 int (*StepBack)();
679 int (*Convergence)(double, double,char *);
680 double (*NewtonIteration)();
681 void (*FreeConvergence)();
682 void (*Put)(int);
683 void (*DumpState)(char *dumpkey);
684 void (*RestartState)(char *dumpkey);
685 double (*TimeStamp)(char *msg);
686
687 void (*ExportVectorToH5File)(char *, char *, void *, int, char *);
688 ConvergenceOptions convergenceOptions;
689 ConvergenceReturn convergenceReturn;
690 PutOptions putOptions;
691
692 int (*Task)(char *code);
693 TaskReturn taskReturn;
694 TaskOptions taskOptions;
695
696 int (*Sensitivity)();
697
698 /* nodes and elements selection functions */
699 int (*FindNodes)(char *, int **);
700 int (*FindNodesPoint)(double *, char *,double tol, int **);
701 int (*FindNodesLine)(double **, int, char *,double, int **);
702 int (*FindNodesPolygon)(double **, int, char *,double tol, int **);
703 int (*FindNodesTetrahedron)(double **, char *,double tol, int **);
704 int (*FindNodesHexahedron)(double **, char *,double tol, int **);
705 int (*FindNodesFunction)(int (*)(double *, double), char *, int **);
706 int (*FindElements)(int *, int ,int , int **);
707 void (*Free)(void *);
709
710typedef int (*SimulationDll)(SMTStructure *SMT, ElementSpec** ElemSpecs, ElementData** Elements, NodeSpec** NodeSpecs, NodeData** Nodes, int *IData, double *RData);
711int RunDllSimulation(char *dllFileName);
712
713
714/*Matrix functions definitions*/
715void MatrixExponentialOMMF(double m[9], int *r, double mf[9]);
716void MatrixExponentialOMMFS(double m[6], int *r, double mf[6]);
717void MatrixExponentialOMM2D(double m[5], int *r, double mf[5]);
718void MatrixExponentialOMM2DS(double m[4], int *r, double mf[4]);
719void MatrixExponentialOMDMF(double m[9], int *r, double mf[9], double dmf[45]);
720void MatrixExponentialOMDMFS(double m[6], int *r, double mf[6], double dmf[21]);
721void MatrixExponentialOMDM2D(double m[5], int *r, double mf[5], double dmf[15]);
722void MatrixExponentialOMDM2DS(double m[4], int *r, double mf[4], double dmf[10]);
723void MatrixExponentialOMDDMF(double m[9], int *r, double mf[9], double dmf[45], double ddmf[165]);
724void MatrixExponentialOMDDMFS(double m[6], int *r, double mf[6], double dmf[21], double ddmf[74]);
725void MatrixExponentialOMDDM2D(double m[5], int *r, double mf[5], double dmf[15], double ddmf[35]);
726void MatrixExponentialOMDDM2DS(double m[4], int *r, double mf[4], double dmf[10], double ddmf[21]);
727void MatrixLogarithmOMMF(double m[9], int *r, double mf[9]);
728void MatrixLogarithmOMMFS(double m[6], int *r, double mf[6]);
729void MatrixLogarithmOMM2D(double m[5], int *r, double mf[5]);
730void MatrixLogarithmOMM2DS(double m[4], int *r, double mf[4]);
731void MatrixLogarithmOMDMF(double m[9], int *r, double mf[9], double dmf[45]);
732void MatrixLogarithmOMDMFS(double m[6], int *r, double mf[6], double dmf[21]);
733void MatrixLogarithmOMDM2D(double m[5], int *r, double mf[5], double dmf[15]);
734void MatrixLogarithmOMDM2DS(double m[4], int *r, double mf[4], double dmf[10]);
735void MatrixLogarithmOMDDMF(double m[9], int *r, double mf[9], double dmf[45], double ddmf[165]);
736void MatrixLogarithmOMDDMFS(double m[6], int *r, double mf[6], double dmf[21], double ddmf[74]);
737void MatrixLogarithmOMDDM2D(double m[5], int *r, double mf[5], double dmf[15], double ddmf[35]);
738void MatrixLogarithmOMDDM2DS(double m[4], int *r, double mf[4], double dmf[10], double ddmf[21]);
739void MatrixSquareRootOMMF(double m[9], int *r, double mf[9]);
740void MatrixSquareRootOMMFS(double m[6], int *r, double mf[6]);
741void MatrixSquareRootOMM2D(double m[5], int *r, double mf[5]);
742void MatrixSquareRootOMM2DS(double m[4], int *r, double mf[4]);
743void MatrixSquareRootOMDMF(double m[9], int *r, double mf[9], double dmf[45]);
744void MatrixSquareRootOMDMFS(double m[6], int *r, double mf[6], double dmf[21]);
745void MatrixSquareRootOMDM2D(double m[5], int *r, double mf[5], double dmf[15]);
746void MatrixSquareRootOMDM2DS(double m[4], int *r, double mf[4], double dmf[10]);
747void MatrixSquareRootOMDDMF(double m[9], int *r, double mf[9], double dmf[45], double ddmf[165]);
748void MatrixSquareRootOMDDMFS(double m[6], int *r, double mf[6], double dmf[21], double ddmf[74]);
749void MatrixSquareRootOMDDM2D(double m[5], int *r, double mf[5], double dmf[15], double ddmf[35]);
750void MatrixSquareRootOMDDM2DS(double m[4], int *r, double mf[4], double dmf[10], double ddmf[21]);
751void MatrixPowerOMMF(double m[9], double *p, int *r, double mf[9]);
752void MatrixPowerOMMFS(double m[6], double *p, int *r, double mf[6]);
753void MatrixPowerOMM2D(double m[5], double *p, int *r, double mf[5]);
754void MatrixPowerOMM2DS(double m[4], double *p, int *r, double mf[4]);
755void MatrixPowerOMDMF(double m[9], double *p, int *r, double mf[9], double dmf[45]);
756void MatrixPowerOMDMFS(double m[6], double *p, int *r, double mf[6], double dmf[21]);
757void MatrixPowerOMDM2D(double m[5], double *p, int *r, double mf[5], double dmf[15]);
758void MatrixPowerOMDM2DS(double m[4], double *p, int *r, double mf[4], double dmf[10]);
759void MatrixPowerOMDDMF(double m[9], double *p, int *r, double mf[9], double dmf[45], double ddmf[165]);
760void MatrixPowerOMDDMFS(double m[6], double *p, int *r, double mf[6], double dmf[21], double ddmf[74]);
761void MatrixPowerOMDDM2D(double m[5], double *p, int *r, double mf[5], double dmf[15], double ddmf[35]);
762void MatrixPowerOMDDM2DS(double m[4], double *p, int *r, double mf[4], double dmf[10], double ddmf[21]);
763void MatrixPowerSeriesOMMF(double m[9], double *cp, int *n, int *r, double mf[9]);
764void MatrixPowerSeriesOMMFS(double m[6], double *cp, int *n, int *r, double mf[6]);
765void MatrixPowerSeriesOMM2D(double m[5], double *cp, int *n, int *r, double mf[5]);
766void MatrixPowerSeriesOMM2DS(double m[4], double *cp, int *n, int *r, double mf[4]);
767void MatrixPowerSeriesOMDMF(double m[9], double *cp, int *n, int *r, double mf[9], double dmf[45]);
768void MatrixPowerSeriesOMDMFS(double m[6], double *cp, int *n, int *r, double mf[6], double dmf[21]);
769void MatrixPowerSeriesOMDM2D(double m[5], double *cp, int *n, int *r, double mf[5], double dmf[15]);
770void MatrixPowerSeriesOMDM2DS(double m[4], double *cp, int *n, int *r, double mf[4], double dmf[10]);
771void MatrixPowerSeriesOMDDMF(double m[9], double *cp, int *n, int *r, double mf[9], double dmf[45], double ddmf[165]);
772void MatrixPowerSeriesOMDDMFS(double m[6], double *cp, int *n, int *r, double mf[6], double dmf[21], double ddmf[74]);
773void MatrixPowerSeriesOMDDM2D(double m[5], double *cp, int *n, int *r, double mf[5], double dmf[15], double ddmf[35]);
774void MatrixPowerSeriesOMDDM2DS(double m[4], double *cp, int *n, int *r, double mf[4], double dmf[10], double ddmf[21]);
775
776void MatrixFunctionCompressMMF(double m[3][3],double mc[9]);
777void MatrixFunctionUncompressMFMF(double mf[9],double mffull[3][3]);
778void MatrixFunctionUncompressDMFMF(double dmf[45],double dmffull[3][3][3][3]);
779void MatrixFunctionUncompressDDMFMF(double ddmf[165],double ddmffull[3][3][3][3][3][3]);
780void MatrixFunctionCompressMMFS(double m[3][3],double mc[6]);
781void MatrixFunctionUncompressMFMFS(double mf[6],double mffull[3][3]);
782void MatrixFunctionUncompressDMFMFS(double dmf[21],double dmffull[3][3][3][3]);
783void MatrixFunctionUncompressDDMFMFS(double ddmf[74],double ddmffull[3][3][3][3][3][3]);
784void MatrixFunctionCompressMM2D(double m[3][3],double mc[5]);
785void MatrixFunctionUncompressMFM2D(double mf[5],double mffull[3][3]);
786void MatrixFunctionUncompressDMFM2D(double dmf[15],double dmffull[3][3][3][3]);
787void MatrixFunctionUncompressDDMFM2D(double ddmf[35],double ddmffull[3][3][3][3][3][3]);
788void MatrixFunctionCompressMM2DS(double m[3][3],double mc[4]);
789void MatrixFunctionUncompressMFM2DS(double mf[4],double mffull[3][3]);
790void MatrixFunctionUncompressDMFM2DS(double dmf[10],double dmffull[3][3][3][3]);
791void MatrixFunctionUncompressDDMFM2DS(double ddmf[21],double ddmffull[3][3][3][3][3][3]);
792
793
794#endif
Definition sms.hpp:569
Definition sms.hpp:597
Definition sms.hpp:585
Definition sms.hpp:336
Definition sms.hpp:377
Definition sms.hpp:606
Definition sms.hpp:278
Definition sms.hpp:306
Definition sms.hpp:636
Definition sms.hpp:670
Definition sms.hpp:643
Definition sms.hpp:655