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
00028
00029
00030 #include <math.h>
00031 #include <Matrix.h>
00032 #include <Vector.h>
00033
00034 #include <ReinfBar.h>
00035 #include <CircReinfLayer.h>
00036
00037
00038 CircReinfLayer::CircReinfLayer(void):
00039 nReinfBars(0), matID(0), barDiam(0.0),
00040 area(0.0), centerPosit(2), arcRad(0.0),
00041 initAng(0.0), finalAng(0.0)
00042 {
00043 }
00044
00045
00046 CircReinfLayer::CircReinfLayer(int materialID, int numReinfBars,
00047 double reinfBarArea,
00048 const Vector ¢erPosition,
00049 double arcRadius, double initialAngle,
00050 double finalAngle):
00051 nReinfBars(numReinfBars),
00052 matID(materialID), area(reinfBarArea),
00053 barDiam(0.0),centerPosit(centerPosition),
00054 arcRad(arcRadius),initAng(initialAngle),
00055 finalAng(finalAngle)
00056 {
00057 }
00058
00059 CircReinfLayer::CircReinfLayer(int materialID, int numReinfBars, double reinfBarArea,
00060 const Vector ¢erPosition, double radius):
00061 nReinfBars(numReinfBars), matID(materialID), area(reinfBarArea),
00062 barDiam(0.0), centerPosit(centerPosition), arcRad(radius),
00063 initAng(0.0), finalAng(0.0)
00064 {
00065
00066
00067 if (nReinfBars > 0)
00068 finalAng = 360.0 - 360.0/nReinfBars;
00069 }
00070
00071 CircReinfLayer::~CircReinfLayer()
00072 {
00073
00074 }
00075
00076
00077 void CircReinfLayer::setNumReinfBars(int numReinfBars)
00078 {
00079 nReinfBars = numReinfBars;
00080 }
00081
00082 void CircReinfLayer::setMaterialID (int materialID)
00083 {
00084 matID = materialID;
00085 }
00086
00087 void CircReinfLayer::setReinfBarDiameter (double reinfBarDiameter)
00088 {
00089 barDiam = reinfBarDiameter;
00090 double pi = acos(-1.0);
00091 area = pi * barDiam*barDiam/4.0;
00092 }
00093
00094 void CircReinfLayer::setReinfBarArea(double reinfBarArea)
00095 {
00096 area = reinfBarArea;
00097 }
00098
00099
00100 int CircReinfLayer::getNumReinfBars (void) const
00101 {
00102 return nReinfBars;
00103 }
00104
00105 int CircReinfLayer::getMaterialID (void) const
00106 {
00107 return matID;
00108 }
00109
00110 double CircReinfLayer::getReinfBarDiameter (void) const
00111 {
00112 return barDiam;
00113 }
00114
00115 double CircReinfLayer::getReinfBarArea (void) const
00116 {
00117 return area;
00118 }
00119
00120 ReinfBar *
00121 CircReinfLayer::getReinfBars (void) const
00122 {
00123 double theta, dtheta;
00124 Vector barPosit(2);
00125 int i;
00126 ReinfBar *reinfBars;
00127 double pi = acos(-1.0);
00128 double initAngRad, finalAngRad;
00129
00130 if (nReinfBars > 1)
00131 {
00132 initAngRad = pi * initAng / 180.0;
00133 finalAngRad = pi * finalAng / 180.0;
00134
00135 dtheta = (finalAngRad - initAngRad) /(nReinfBars - 1);
00136
00137 reinfBars = new ReinfBar [nReinfBars];
00138
00139 for (i = 0; i < nReinfBars; i++)
00140 {
00141 theta = initAngRad + dtheta * i;
00142 barPosit(0) = centerPosit(0) + arcRad*cos(theta);
00143 barPosit(1) = centerPosit(1) + arcRad*sin(theta);
00144
00145 reinfBars[i].setPosition(barPosit);
00146 reinfBars[i].setArea(this->area);
00147 }
00148 }
00149 else
00150 return 0;
00151
00152 return reinfBars;
00153 }
00154
00155
00156 const Vector &
00157 CircReinfLayer::getCenterPosition(void) const
00158 {
00159 return centerPosit;
00160 }
00161
00162 double CircReinfLayer::getArcRadius(void) const
00163 {
00164 return arcRad;
00165 }
00166
00167 double CircReinfLayer::getInitAngle(void) const
00168 {
00169 return initAng;
00170 }
00171
00172 double CircReinfLayer::getFinalAngle(void) const
00173 {
00174 return finalAng;
00175 }
00176
00177
00178 ReinfLayer *
00179 CircReinfLayer::getCopy (void) const
00180 {
00181 CircReinfLayer *theCopy = new CircReinfLayer (matID, nReinfBars, area,
00182 centerPosit, arcRad,
00183 initAng, finalAng);
00184 return theCopy;
00185 }
00186
00187
00188
00189 void CircReinfLayer::Print(OPS_Stream &s, int flag) const
00190 {
00191 s << "\nReinforcing Layer type: Circ";
00192 s << "\nMaterial ID: " << matID;
00193 s << "\nReinf. bar diameter: " << barDiam;
00194 s << "\nReinf. bar area: " << area;
00195 s << "\nCenter Position: " << centerPosit;
00196 s << "\nArc Radius: " << arcRad;
00197 s << "\nInitial angle: " << initAng;
00198 s << "\nFinal angle: " << finalAng;
00199 }
00200
00201
00202 OPS_Stream &operator<<(OPS_Stream &s, const CircReinfLayer &CircReinfLayer)
00203 {
00204 CircReinfLayer.Print(s);
00205 return s;
00206 }
00207