Ejemplo n.º 1
0
const Matrix&
FiberSection3d::getInitialTangent(void)
{
  static double kInitialData[9];
  static Matrix kInitial(kInitialData, 3, 3);
  
  kInitialData[0] = 0.0; kInitialData[1] = 0.0; 
  kInitialData[2] = 0.0; kInitialData[3] = 0.0;
  kInitialData[4] = 0.0; kInitialData[5] = 0.0; 
  kInitialData[6] = 0.0; kInitialData[7] = 0.0;
  kInitialData[8] = 0.0; 

  static double yLocs[10000];
  static double zLocs[10000];
  static double fiberArea[10000];

  if (sectionIntegr != 0) {
    sectionIntegr->getFiberLocations(numFibers, yLocs, zLocs);
    sectionIntegr->getFiberWeights(numFibers, fiberArea);
  }  
  else {
    for (int i = 0; i < numFibers; i++) {
      yLocs[i] = matData[3*i];
      zLocs[i] = matData[3*i+1];
      fiberArea[i] = matData[3*i+2];
    }
  }

  for (int i = 0; i < numFibers; i++) {
    UniaxialMaterial *theMat = theMaterials[i];
    double y = yLocs[i] - yBar;
    double z = zLocs[i] - zBar;
    double A = fiberArea[i];

    double tangent = theMat->getInitialTangent();

    double value = tangent * A;
    double vas1 = -y*value;
    double vas2 = z*value;
    double vas1as2 = vas1*z;

    kInitialData[0] += value;
    kInitialData[1] += vas1;
    kInitialData[2] += vas2;
    
    kInitialData[4] += vas1 * -y;
    kInitialData[5] += vas1as2;
    
    kInitialData[8] += vas2 * z; 
  }

  kInitialData[3] = kInitialData[1];
  kInitialData[6] = kInitialData[2];
  kInitialData[7] = kInitialData[5];

  return kInitial;
}
Ejemplo n.º 2
0
const Matrix&
FiberSection3dThermal::getInitialTangent(void)
{
  static double kInitialData[9];
  static Matrix kInitial(kInitialData, 3, 3);
  
  kInitialData[0] = 0.0; kInitialData[1] = 0.0; 
  kInitialData[2] = 0.0; kInitialData[3] = 0.0;
  kInitialData[4] = 0.0; kInitialData[5] = 0.0; 
  kInitialData[6] = 0.0; kInitialData[7] = 0.0;
  kInitialData[8] = 0.0; 

  int loc = 0;

  for (int i = 0; i < numFibers; i++) {
    UniaxialMaterial *theMat = theMaterials[i];
    double y = matData[loc++] - yBar;
    double z = matData[loc++] - zBar;
    double A = matData[loc++];

    double tangent = theMat->getInitialTangent();

    double value = tangent * A;
    double vas1 = y*value;
    double vas2 = z*value;
    double vas1as2 = vas1*z;

    kInitialData[0] += value;
    kInitialData[1] += vas1;
    kInitialData[2] += vas2;
    
    kInitialData[4] += vas1 * y;
    kInitialData[5] += vas1as2;
    
    kInitialData[8] += vas2 * z; 
  }

  kInitialData[3] = kInitialData[1];
  kInitialData[6] = kInitialData[2];
  kInitialData[7] = kInitialData[5];

  return kInitial;
}
Ejemplo n.º 3
0
const Matrix&
FiberSection2d::getInitialTangent(void)
{
  static double kInitial[4];
  static Matrix kInitialMatrix(kInitial, 2, 2);
  kInitial[0] = 0.0; kInitial[1] = 0.0; kInitial[2] = 0.0; kInitial[3] = 0.0;

  static double fiberLocs[10000];
  static double fiberArea[10000];

  if (sectionIntegr != 0) {
    sectionIntegr->getFiberLocations(numFibers, fiberLocs);
    sectionIntegr->getFiberWeights(numFibers, fiberArea);
  }  
  else {
    for (int i = 0; i < numFibers; i++) {
      fiberLocs[i] = matData[2*i];
      fiberArea[i] = matData[2*i+1];
    }
  }

  for (int i = 0; i < numFibers; i++) {
    UniaxialMaterial *theMat = theMaterials[i];
    double y = fiberLocs[i] - yBar;
    double A = fiberArea[i];

    double tangent = theMat->getInitialTangent();

    double ks0 = tangent * A;
    double ks1 = ks0 * -y;
    kInitial[0] += ks0;
    kInitial[1] += ks1;
    kInitial[3] += ks1 * -y;
  }

  kInitial[2] = kInitial[1];

  return kInitialMatrix;
}
Ejemplo n.º 4
0
// constructors:
RCFTSTLFiberSection3D::RCFTSTLFiberSection3D(int tag, int num, Fiber **fibers, double gj): 
  SectionForceDeformation(tag, SEC_TAG_RCFTSTLFiberSection3D),
  numFibers(num), theMaterials(0), matData(0),
  yBar(0.0), zBar(0.0), e(4), eCommit(4), GJ(gj)
{
  ofstream stlfib;
  stlfib.open("stlfib.dat",ios::app);
  double EA = 0.0;
  double EQz = 0.0;
  double EQy = 0.0;
  double EIz = 0.0;
  double EIy = 0.0;
  double EIyz = 0.0;
  
  double Es = 0.0;    
  if (numFibers != 0) {
    theMaterials = new UniaxialMaterial *[numFibers];

    if (theMaterials == 0) {
      opserr << "RCFTSTLFiberSection3D::RCFTSTLFiberSection3D -- failed to allocate Material pointers\n";
      exit(-1);
    }

    matData = new double [numFibers*3];

    if (matData == 0) {
      opserr << "RCFTSTLFiberSection3D::RCFTSTLFiberSection3D -- failed to allocate double array for material data\n";
      exit(-1);
    }
    double Qz = 0.0;
    double Qy = 0.0;
    double A  = 0.0;
   
    for (int i = 0; i < numFibers; i++) {
      Fiber *theFiber = fibers[i];
      double yLoc, zLoc, Area;
      theFiber->getFiberLocation(yLoc, zLoc);
      Area = theFiber->getArea();
      UniaxialMaterial *theMat = theFiber->getMaterial();
      
      stlfib<<i<<"  "<<yLoc<<"  "<<zLoc<<"  "<<Area<<endl;
      Es = theMat->getInitialTangent();
      Qz += yLoc*Area;
      Qy += zLoc*Area;
      A  += Area;
      EQz += yLoc*Area*Es;
      EQy += zLoc*Area*Es;
      EA  += Area*Es;
      EIz += yLoc*yLoc*Area*Es;
      EIy += zLoc*zLoc*Area*Es;
      EIyz += yLoc*zLoc*Area*Es;
      
      matData[i*3] = -yLoc;
      matData[i*3+1] = zLoc;
      matData[i*3+2] = Area;
      theMaterials[i] = theMat->getCopy();

      if (theMaterials[i] == 0) {
	opserr << "RCFTSTLFiberSection3D::RCFTFiberSection3D -- failed to get copy of a Material\n";
	exit(-1);
      }
    }

    yBar = -Qz/A;
    zBar = Qy/A;
  }

  ks.Zero();

  ks(0,0) = EA;
  ks(0,1) = ks(1,0) = -EQz;
  ks(0,2) = ks(2,0) = -EQy;
  ks(1,1) = EIz;
  ks(2,2) = EIy;
  ks(2,1) = ks(1,2) = EIyz;
  ks(3,3) = GJ;

  //ks(0,0) = 449602.6;
  //ks(0,1) = ks(1,0) = 0.0;
  //ks(0,2) = ks(2,0) = 0.0;
  //ks(1,1) = 6968845.86;
  //ks(2,2) = 6968845.86;
  //ks(2,1) = ks(1,2) = 0.0;
  //ks(3,3) = GJ;

  //ks(0,0) = 1000.0;
  //ks(0,1) = ks(1,0) = 0.0;
  //ks(0,2) = ks(2,0) = 0.0;
  //ks(1,1) = 1.0;
  //ks(2,2) = 1.0;
  //ks(2,1) = ks(1,2) = 0.0;
  //ks(3,3) = GJ;

  //ks(0,0) = 300000.0;
  //ks(0,1) = ks(1,0) = 0.0;
  //ks(0,2) = ks(2,0) = 0.0;
  //ks(1,1) = 3000000.0;
  //ks(2,2) = 3000000.0;
  //ks(2,1) = ks(1,2) = 0.0;
  //ks(3,3) = GJ;

  //ks(0,0) = 43200000.0;
  //ks(0,1) = ks(1,0) = 0.0;
  //ks(0,2) = ks(2,0) = 0.0;
  //ks(1,1) = 14400000.0;
  //ks(2,2) = 14400000.0;
  //ks(2,1) = ks(1,2) = 0.0;
  //ks(3,3) = GJ;
  
  //ks(0,0) = 449509.3;
  //ks(0,1) = ks(1,0) = 0.0;
  //ks(0,2) = ks(2,0) = 0.0;
  //ks(1,1) = 6967684.16;
  //ks(2,2) = 6967684.16;
  //ks(2,1) = ks(1,2) = 0.0;
  //ks(3,3) = GJ;

  sData[0] = 0.0;
  sData[1] = 0.0;
  sData[2] = 0.0;

  kData[0] = EA;
  kData[1] = -EQz;
  kData[2] = EIyz;
  kData[3] = 0.0;
  kData[4] = -EQz;
  kData[5] = EIz;
  kData[6] = -EQy;
  kData[7] = 0.0;
  kData[8] = EIyz;
  kData[9] = -EQy;
  kData[10] = EIy;
  kData[11] = 0.0;
  kData[12] = 0.0;
  kData[13] = 0.0;
  kData[14] = 0.0;
  kData[15] = GJ;

  //kData[0] = 43200000.0;
  //kData[1] = 0.0;
  //kData[2] = 0.0;
  //kData[3] = 0.0;
  //kData[4] = 0.0;
  //kData[5] = 14400000.0;
  //kData[6] = 0.0;
  //kData[7] = 0.0;
  //kData[8] = 0.0;
  //kData[9] = 0.0;
  //kData[10] = 14400000.0;
  //kData[11] = 0.0;
  //kData[12] = 0.0;
  //kData[13] = 0.0;
  //kData[14] = 0.0;
  //kData[15] = GJ;

  code(0) = SECTION_RESPONSE_P;
  code(1) = SECTION_RESPONSE_MZ;
  code(2) = SECTION_RESPONSE_MY;
  code(3) = SECTION_RESPONSE_T;
}
Ejemplo n.º 5
0
const Matrix&
RCFTSTLFiberSection3D::getInitialTangent(void)
{
  kData[0] = 0.0; kData[1] = 0.0; kData[2] = 0.0;
  kData[3] = 0.0; kData[4] = 0.0; kData[5] = 0.0;
  kData[6] = 0.0; kData[7] = 0.0; kData[8] = 0.0;
  kData[9] = 0.0; kData[10] = 0.0; kData[11] = 0.0;
  kData[12] = 0.0; kData[13] = 0.0; kData[14] = 0.0; kData[15] = 0.0;

  sData[0] = 0.0; sData[1] = 0.0; sData[2] = 0.0;

  int loc = 0;

  for (int i = 0; i < numFibers; i++) {
    UniaxialMaterial *theMat = theMaterials[i];
    double y = matData[loc++]; //- yBar;
    double z = matData[loc++]; //- zBar;
    double A = matData[loc++];

    double tangent = theMat->getInitialTangent();
    
    double value = tangent * A;
    double vas1 = y*value;
    double vas2 = z*value;
    double vas1as2 = vas1*z;
    double vas2as2 = vas2*z;
    double vas1as1 = vas1*y;

    kData[0] += value;
    kData[1] -= vas1;
    kData[1]  = 0.0;
    kData[2] -= vas2;
    kData[2]  = 0.0;
    kData[3]  = 0.0;
    kData[4] -= vas1;
    kData[4]  = 0.0;
    kData[5] += vas1as1;
    kData[6] += vas1as2;
    kData[6]  = 0.0;
    kData[7]  = 0.0;
    kData[8] -= vas2;
    kData[8]  = 0.0; 
    kData[9] += vas1as2;
    kData[9]  = 0.0;
    kData[10]+= vas2as2;
    kData[11] = 0.0;
    kData[12] = 0.0;
    kData[13] = 0.0;
    kData[14] = 0.0;
    kData[15] = GJ;
  }

  ks(0,0) = kData[0];
  ks(0,1) = ks(1,0) = kData[1];
  ks(0,2) = ks(2,0) = kData[2];
  ks(1,1) = kData[5];
  ks(1,2) = ks(2,1) = kData[6];
  ks(2,2) = kData[10];
  ks(3,3) = GJ;

  return ks;
}