00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00023
00024
00025
00026 #ifndef EIGHTNODEBRICK_H
00027 #define EIGHTNODEBRICK_H
00028
00029 #ifndef _bool_h
00030 #include "bool.h"
00031 #endif
00032
00033 #include <Element.h>
00034 #include <Node.h>
00035
00036
00037
00038
00039
00040 #include <ID.h>
00041 #include <Renderer.h>
00042 #include <Domain.h>
00043 #include <string.h>
00044
00045 #include <GaussQuadRule1d.h>
00046
00047 #include <G3Globals.h>
00048
00049 #include <Matrix.h>
00050 #include <Vector.h>
00051 #include <ID.h>
00052
00053
00054 #include <basics.h>
00055 #include <BJtensor.h>
00056 #include <nDarray.h>
00057 #include <stresst.h>
00058 #include <straint.h>
00059
00060
00061
00062
00063 #include <MatPoint3D.h>
00064
00065
00066 #include <Template3Dep.h>
00067
00068
00069 #include <Node.h>
00070
00072
00073 class EightNodeBrick: public Element
00074 {
00075
00076 public:
00078 EightNodeBrick(int element_number,
00079 int node_numb_1, int node_numb_2, int node_numb_3, int node_numb_4,
00080 int node_numb_5, int node_numb_6, int node_numb_7, int node_numb_8,
00081 NDMaterial * Globalmmodel, double b1, double b2, double b3,
00082 double r, double p);
00083
00085
00086 EightNodeBrick ();
00088 ~EightNodeBrick();
00089
00090
00091
00092
00093
00094
00095
00097
00098 int getNumExternalNodes () const;
00100 const ID &getExternalNodes ();
00102 int getNumDOF ();
00104 void setDomain(Domain *theDomain);
00105
00107 int commitState ();
00109 int revertToLastCommit ();
00111 int revertToStart ();
00112
00113
00114
00115
00117
00119
00121
00123
00124
00126 const Matrix &getConsMass ();
00127
00129 void zeroLoad ();
00131 int addLoad(const Vector &addP);
00133 int addInertiaLoadToUnbalance(const Vector &accel);
00135 const Vector FormEquiBodyForce(void);
00137 const Vector &getResistingForce ();
00139 const Vector &getResistingForceIncInertia ();
00140
00142 int sendSelf (int commitTag, Channel &theChannel);
00144 int recvSelf (int commitTag, Channel &theChannel, FEM_ObjectBroker
00145 &theBroker);
00147 int displaySelf (Renderer &theViewer, int displayMode, float fact);
00149 void Print(ostream &s, int flag =0);
00150
00152
00154
00155
00156 protected:
00157
00158 private:
00159
00160
00162
00163 int numDOF;
00164 ID connectedExternalNodes;
00165
00166 Node *nd1Ptr;
00167 Node *nd2Ptr;
00169 Node *nd3Ptr;
00171 Node *nd4Ptr;
00172
00174 Node *nd5Ptr;
00176 Node *nd6Ptr;
00178 Node *nd7Ptr;
00180 Node *nd8Ptr;
00181
00183 Matrix K;
00184 Matrix C;
00185 Matrix M;
00186 Vector P;
00187 Vector Q;
00188 Vector bf;
00189
00191 double rho;
00192 double pressure;
00193 int order;
00194
00195
00196
00197
00199
00200 Matrix J;
00201 Matrix L;
00202 Matrix B;
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214 private:
00215
00217
00218 double determinant_of_Jacobian;
00220
00221 int nodes_in_brick;
00222
00224
00225 NDMaterial * mmodel;
00226
00227 int r_integration_order;
00228 int s_integration_order;
00229 int t_integration_order;
00230
00231
00232
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00274 int LM[24];
00275 public:
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00309
00310
00311 void incremental_Update(void);
00313
00314 tensor H_3D(double r1, double r2, double r3);
00316 tensor interp_poli_at(double r, double s, double t);
00318 tensor dh_drst_at(double r, double s, double t);
00319
00320
00321
00323
00324
00326
00327 tensor getStiffnessTensor(void);
00329
00330 void set_strain_stress_tensor(FILE *fp, double * u);
00332 tensor getMassTensor(void);
00334
00335 tensor Jacobian_3D(tensor dh);
00337 tensor Jacobian_3Dinv(tensor dh);
00339 tensor Nodal_Coordinates(void);
00340
00342 tensor incr_disp(void);
00344 tensor total_disp(void);
00345
00347 tensor total_disp(FILE *fp, double * u);
00348
00350 tensor stiffness_matrix(const tensor & K);
00352 tensor mass_matrix(const tensor & M);
00353
00354
00356 int get_global_number_of_node(int local_node_number);
00358 int get_Brick_Number(void);
00359
00360
00362 int * get_LM(void);
00363
00364
00366 double get_Gauss_p_c(short order, short point_numb);
00368 double get_Gauss_p_w(short order, short point_numb);
00369
00371 tensor nodal_forces(void);
00373 tensor iterative_nodal_forces(void);
00375 tensor nodal_forces_from_stress(stresstensor & );
00376
00378
00380
00381
00383 void report(char *);
00385 void reportshort(char *);
00387 void reportPAK(char *);
00389 void reportpqtheta(int);
00391 void reportLM(char *);
00393 void reportTensor(char *);
00395 void reportCIPIC(char *);
00397 void reportTensorF(FILE *);
00398
00399
00400
00401
00402
00403 };
00404
00405
00406 #endif
00407
00408 ÿ