examples: add diagnostic printout
[charm.git] / examples / ParFUM / 2Dexample / pgm.h
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <math.h>
4 #include "charm++.h"
5 #include "ParFUM.h"
6 #include "netfem.h"
7 #include "vector2d.h"
8 #include "ParFUM_internals.h"
9
10
11 //One element's connectivity information
12 typedef int connRec[3];
13 typedef int connRec2[4];
14
15 // A structure for handling data that may need to be migrated
16 struct myGlobals {
17   int nnodes;
18   int nelems;
19   vector2d *coord;
20   connRec *conn;
21
22   int nelems2;
23   connRec2 *conn2;
24
25   vector2d *R_net, *d, *v, *a;
26   
27   double *S11, *S22, *S12;
28 };
29
30 void FEM_mesh_smooth(int mesh, int *nodes, int nNodes, int attrNo);
31
32 void interpolate(FEM_Interpolate::NodalArgs args,FEM_Mesh *meshP);
33 //Compute forces on constant-strain triangles:
34 void CST_NL(const vector2d *coor,const connRec *lm,vector2d *R_net,
35             const vector2d *d,const double *c,
36             int numnp,int numel,
37             double *S11o,double *S22o,double *S12o);
38
39 // Prototypes
40 void advanceNodes(const double dt,int nnodes,const vector2d *coord,
41                   vector2d *R_net,vector2d *a,vector2d *v,vector2d *d,bool dampen);
42
43 void pup_myGlobals(pup_er p,myGlobals *g);
44
45 //The material constants c, as computed by fortran mat_const
46 // I think the units here are Pascals (N/m^2)
47 const double matConst[4]={3.692e9,  1.292e9,  3.692e9,  1.200e9 };
48
49 //The timestep, in seconds
50 const double dt=1.0e-9;
51
52 // A convenient error function
53 static void die(const char *str) {
54   CkError("Fatal error: %s\n",str);
55   CkExit();
56 }
57
58
59
60 #define NANCHECK 1 /*Check for NaNs at each timestep*/