CircReinfLayer.cpp

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // $Revision: 1.3 $
00022 // $Date: 2003/02/14 23:01:37 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/material/section/repres/reinfLayer/CircReinfLayer.cpp,v $
00024                                                                         
00025                                                                         
00026 // File: CircReinfLayer.C 
00027 // Written by Remo M. de Souza 
00028 // December 1998
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 &centerPosition,
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 &centerPosition, 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         // Figure out final angle so that complete circle does not put
00066         // two bars at the same location
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  

Generated on Mon Oct 23 15:05:18 2006 for OpenSees by doxygen 1.5.0