00001 #include <math.h>
00002 #include "tloadcase.h"
00003 #include "loadcase.h"
00004 #include "global.h"
00005 #include "gtopology.h"
00006 #include "matrix.h"
00007 #include "vector.h"
00008 #include "globmat.h"
00009 #include "dloadn.h"
00010 #include "dloadpd.h"
00011 #include "element.h"
00012 #include "node.h"
00013
00014
00015
00016 tloadcase::tloadcase (void)
00017 {
00018 nslc=0;
00019 nln = 0; nle = 0; npd = 0;
00020 lon = NULL; pd = NULL;
00021 slc = NULL; gf=NULL;
00022 direction = NULL;
00023 seism=NULL;
00024 }
00025
00026 tloadcase::~tloadcase (void)
00027 {
00028 delete [] lon; delete [] pd;
00029 delete [] slc; delete [] gf;
00030 delete [] direction;
00031 delete [] seism;
00032 }
00033
00034
00035
00036
00037
00038
00039
00040
00041 void tloadcase::read (FILE *in)
00042 {
00043 long i;
00044
00045
00046 fscanf (in,"%d",(int*)&tdl);
00047
00048 switch (tdl)
00049 {
00050 case forcedload:
00051 {
00052
00053 fscanf (in,"%ld",&nslc);
00054
00055 slc = new loadcase [nslc];
00056 gf = new gfunct [nslc];
00057
00058 for (i=0;i<nslc;i++)
00059 {
00060 slc[i].read (in);
00061 gf[i].read (in);
00062 }
00063
00064 break;
00065 }
00066 case seismicload:
00067 {
00068
00069 fscanf (in,"%ld",&nslc);
00070 direction = new dirdynload [nslc];
00071 gf = new gfunct [nslc];
00072
00073 for (i=0;i<nslc;i++)
00074 fscanf (in,"%d",(int*)&direction[i]);
00075
00076 for (i=0;i<nslc;i++)
00077 gf[i].read (in);
00078
00079 seism = new double [Ndofm*nslc];
00080 nullv (seism,Ndofm*nslc);
00081 seisminit (seism);
00082 break;
00083 }
00084 case forceload_dyn:
00085 {
00086
00087 fscanf (in,"%ld",&nln);
00088 lon = new dloadn [nln];
00089 for (i=0;i<nln;i++)
00090 lon[i].read (in);
00091
00092
00093
00094
00095
00096
00097
00098
00099 fscanf (in,"%ld",&npd);
00100 pd = new dloadpd [npd];
00101 for (i=0;i<npd;i++){
00102 pd[i].read (in);
00103 }
00104 break;
00105 }
00106
00107 default:
00108 fprintf (stderr,"\n\n unknown type of load case is required in function read (file %s, line %d).\n",__FILE__,__LINE__);
00109 }
00110 }
00111