00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00029
00030
00031
00032 #ifndef EIGHTNODEBRICK_H
00033 #define EIGHTNODEBRICK_H
00034
00035 #ifndef _bool_h
00036 #include "bool.h"
00037 #endif
00038
00039 #include <Element.h>
00040 #include <Node.h>
00041
00042
00043
00044
00045
00046 #include <ID.h>
00047 #include <Renderer.h>
00048 #include <Domain.h>
00049 #include <string.h>
00050
00051 #include <GaussQuadRule1d.h>
00052
00053 #include <OPS_Globals.h>
00054
00055 #include <Matrix.h>
00056 #include <Vector.h>
00057
00058
00059 #include <basics.h>
00060 #include <BJtensor.h>
00061 #include <nDarray.h>
00062 #include <stresst.h>
00063 #include <straint.h>
00064
00065
00066
00067
00068 #include <MatPoint3D.h>
00069
00070 #include <NDMaterial.h>
00071 #include <Template3Dep.h>
00072
00073 #include <NDMaterial.h>
00074 #include <Matrix.h>
00075 #include <Vector.h>
00076 #include <ID.h>
00077 #include <Renderer.h>
00078 #include <Domain.h>
00079 #include <string.h>
00080 #include <Information.h>
00081 #include <Channel.h>
00082 #include <FEM_ObjectBroker.h>
00083 #include <ElementResponse.h>
00084
00085 #include <ElementalLoad.h>
00086
00087
00088
00089 class Node;
00090
00091
00092
00093 class EightNodeBrick: public Element
00094 {
00095
00096 public:
00097 EightNodeBrick(int element_number,
00098 int node_numb_1, int node_numb_2, int node_numb_3, int node_numb_4,
00099 int node_numb_5, int node_numb_6, int node_numb_7, int node_numb_8,
00100 NDMaterial * Globalmmodel, double b1, double b2, double b3,
00101 double r, double p);
00102
00103
00104
00105 EightNodeBrick ();
00106 ~EightNodeBrick();
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 int update(void);
00118
00119 int getNumExternalNodes () const;
00120 const ID &getExternalNodes ();
00121 Node **getNodePtrs(void);
00122
00123 int getNumDOF ();
00124 void setDomain(Domain *theDomain);
00125
00126
00127 int commitState ();
00128 int revertToLastCommit ();
00129 int revertToStart ();
00130
00131
00132
00133
00134
00135 const Matrix &getTangentStiff ();
00136 const Matrix &getInitialStiff();
00137 const Matrix &getMass ();
00138
00139 const Matrix &getConsMass ();
00140
00141 void zeroLoad ();
00142 int addLoad(ElementalLoad *theLoad, double loadFactor);
00143 int addInertiaLoadToUnbalance(const Vector &accel);
00144
00145 const Vector FormEquiBodyForce(void);
00146 const Vector &getResistingForce ();
00147 const Vector &getResistingForceIncInertia ();
00148
00149
00150 int sendSelf (int commitTag, Channel &theChannel);
00151 int recvSelf (int commitTag, Channel &theChannel, FEM_ObjectBroker
00152 &theBroker);
00153 int displaySelf (Renderer &theViewer, int displayMode, float fact);
00154 void Print(OPS_Stream &s, int flag =0);
00155
00156
00157 Response *setResponse (const char **argv, int argc, Information &eleInformation);
00158 int getResponse (int responseID, Information &eleInformation);
00159
00160 protected:
00161
00162 private:
00163
00164
00165
00166
00167 int numDOF;
00168 ID connectedExternalNodes;
00169
00170 Matrix *Ki;
00171 Node *theNodes[8];
00172
00173 static Matrix K;
00174 static Matrix C;
00175 static Matrix M;
00176 static Vector P;
00177 Vector Q;
00178 Vector bf;
00179
00180
00181
00182
00183 double rho;
00184 double pressure;
00185 int order;
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 private:
00207
00208
00209
00210 double determinant_of_Jacobian;
00211
00212
00213 int nodes_in_brick;
00214
00215
00216
00217 NDMaterial * mmodel;
00218
00219 int r_integration_order;
00220 int s_integration_order;
00221 int t_integration_order;
00222
00223
00224
00225
00226 MatPoint3D ** matpoint;
00227
00228
00229
00230
00231
00232
00233
00234
00235 int LM[24];
00236 public:
00237
00238 void incremental_Update(void);
00239
00240
00241
00242 tensor H_3D(double r1, double r2, double r3);
00243 tensor interp_poli_at(double r, double s, double t);
00244 tensor dh_drst_at(double r, double s, double t);
00245
00246
00247
00248
00249 EightNodeBrick & operator[](int subscript);
00250
00251
00252
00253 tensor getStiffnessTensor(void);
00254
00255
00256 void set_strain_stress_tensor(FILE *fp, double * u);
00257 tensor getMassTensor(void);
00258
00259
00260 tensor Jacobian_3D(tensor dh);
00261 tensor Jacobian_3Dinv(tensor dh);
00262 tensor Nodal_Coordinates(void);
00263
00264 tensor incr_disp(void);
00265 tensor total_disp(void);
00266
00267 tensor total_disp(FILE *fp, double * u);
00268
00269 tensor stiffness_matrix(const tensor & K);
00270 tensor mass_matrix(const tensor & M);
00271
00272
00273 int get_global_number_of_node(int local_node_number);
00274 int get_Brick_Number(void);
00275
00276 int * get_LM(void);
00277
00278
00279
00280 double get_Gauss_p_c(short order, short point_numb);
00281 double get_Gauss_p_w(short order, short point_numb);
00282
00283
00284 tensor nodal_forces(void);
00285
00286 tensor iterative_nodal_forces(void);
00287
00288 tensor nodal_forces_from_stress(stresstensor & );
00289
00290
00291 tensor linearized_nodal_forces(void);
00292
00293 tensor update_stress_strain(tensor & disp);
00294
00295 void report(char *);
00296 void reportshort(char *);
00297 void reportPAK(char *);
00298 void reportpqtheta(int);
00299
00300 void computeGaussPoint(void);
00301 void reportCIPIC(char *);
00302 void reportTensorF(FILE *);
00303
00304
00305
00306
00307
00308 };
00309
00310
00311 #endif
00312