99f58bb6c6e0aa52230c7be80b83a61e356c3eae
[charm.git] / examples / fem / crack2D / crack.h
1 #include <string>
2 #include <stdlib.h>
3 #include "fem.h"
4
5 //Coord describes a property with X and Y components
6 struct Coord
7 {
8   double x;
9   double y;
10 };
11
12 // Declaration for class VolElement (Volumetric Elements) 
13 // These are 6-vertex triangles (each side has an extra vertex)
14 struct Vol
15 {
16   double s11l[3], s22l[3], s12l[3];//Stress coefficients
17 };
18
19
20 // Declaration for class CohElement (Cohesive Elements) 
21 //  These are 6-vertex rectangles (long sides have an extra vertex)
22 struct Coh
23 {
24   Coord T[3];//Tractions at each sample point
25   double sidel[3];//[0]->length of element; 
26                 //[1],[2] give cosine and sine of orientation
27   double Sthresh[3];//The threshold, and damage for this edge
28 };
29
30 // Declaration for class Element (generic elements)
31 struct Element
32 {
33   int material;          // matlst, matclst, matc
34   union {
35     Vol v;
36     Coh c;
37   };
38 };
39
40   
41 // Declaration for class Material
42 struct Material
43 {
44   double c[4], ci[4];          // Elastic stiffness constants & inverses
45 };
46
47 struct VolMaterial : public Material
48 {
49   double e1, e2;               // Young's moduli 
50   double g12, g23;             // Shear moduli 
51   double xnu12, xnu23;         // Poisson's ratios 
52   double rho;                  // density 
53   double alpha1, alpha2;       // thermal expansion coefficients 
54   double theta;                // principal material direction 
55 };
56
57 struct CohMaterial : public Material
58 {
59   double deltan;           // normal characteristic length
60   double deltat;           // tangent characteristic length
61   double sigmax;           // max. normal stress
62   double taumax;           // max. shearing stress
63   double mu;               // coefficient of friction
64   double Sinit;            // initial Sthreshold
65 };
66   
67 struct Node
68 {
69   Coord Rin;             //Internal force
70   Coord Rco;             //Cohesive traction load
71   Coord xM;              //Mass at this node (xM.x==xM.y, too)
72   Coord vel;
73   Coord accel;
74   Coord disp;
75   Coord pos;
76   Coord r;
77   unsigned char id1, id2;
78   unsigned char isbnd;
79 };
80
81 //Global constants
82 const int    numBoundMax = 1123;   // Maximum number of boundary nodes
83 const double   g1          = -0.774596669241483;
84 const double   g3          = 0.774596669241483;
85 const double   w1          = 0.555555555555555;
86 const double   w2          = 0.888888888888888;
87 const double   w3          = 0.555555555555555;
88 const double   pi          = 3.14159265358979;
89
90 struct GlobalData {
91   int myid;
92   int numNP;               //number of nodal points (numnp)
93   int numLST;              //number of LST elements (numlst)
94   int numCLST;             //number of LST cohesive elements (numclst)
95   int numBound;            //number of boundary nodes w/loads
96   int nTime;               //total number of time steps
97   int steps;               //ratio of delta and Courant cond
98   double delta;            //timestep
99   double delta2;           //delta squared times 2????
100   int *ts_proportion;      //time step for given constant
101   double *proportion;      //load proportionality constant
102
103   int lin;                 //elastic formulation, 0=nl, 1=linear
104   int ncoh;                //type of cohesive law, 0=exp., 1=linear
105   int nplane;              //type of plane analysis, 0=stress, 1=strain
106   int tsintFull;          //output interval in time steps
107   int tsintEnergy;        //partial output interval
108   int restart;
109   int imp;                //Is there impact?
110   double voImp;         //Velocity of impactor
111   double dImp;             //Displacement
112   double aImp;             //Acceleration
113   double vImp;             //Velocity
114   double xnuImp,eImp,eTop,radiusImp;   //Impact parameters
115   double indent;           //indentation of impactor
116   int nImp;            //node hit
117   double fImp;             //contact force
118   double massImp;          //mass
119
120   int numMatVol;           //number of volumetric materials (numat_vol)
121   int numMatCoh;           //number of cohesive materials (numat_coh)
122   int numProp;             //number of proportionality constants
123   VolMaterial *volm;
124   CohMaterial *cohm;
125
126   double *itimes;
127
128   int nn, ne, npere;
129   int *nnums, *enums, *conn;
130   Node *nodes;
131   Element *elements;
132   int scoh, ecoh, svol, evol;
133 };
134
135 extern void readFile(GlobalData *gd);
136 extern void vol_elem(GlobalData *gd);
137 extern void lst_NL(GlobalData *gd);
138 extern void lst_coh2(GlobalData *gd);