Exemple #1
0
void* OPS_ElasticBeam2d()
{
    if(OPS_GetNumRemainingInputArgs() < 7) {
	opserr<<"insufficient arguments:eleTag,iNode,jNode,A,E,Iz,transfTag\n";
	return 0;
    }

    int ndm = OPS_GetNDM();
    int ndf = OPS_GetNDF();
    if(ndm != 2 || ndf != 3) {
	opserr<<"ndm must be 2 and ndf must be 3\n";
	return 0;
    }

    // inputs: 
    int iData[3];
    int numData = 3;
    if(OPS_GetIntInput(&numData,&iData[0]) < 0) return 0;

    double data[3];
    if(OPS_GetDoubleInput(&numData,&data[0]) < 0) return 0;

    numData = 1;
    int transfTag;
    if(OPS_GetIntInput(&numData,&transfTag) < 0) return 0;
    
    // options
    double mass = 0.0, alpha=0.0, depth=0.0;
    int cMass = 0;
    while(OPS_GetNumRemainingInputArgs() > 0) {
	std::string type = OPS_GetString();
	if(type == "-alpha") {
	    if(OPS_GetNumRemainingInputArgs() > 0) {
		if(OPS_GetDoubleInput(&numData,&alpha) < 0) return 0;
	    }
	} else if(type == "-depth") {
	    if(OPS_GetNumRemainingInputArgs() > 0) {
		if(OPS_GetDoubleInput(&numData,&depth) < 0) return 0;
	    }

	} else if(type == "-mass") {
	    if(OPS_GetNumRemainingInputArgs() > 0) {
		if(OPS_GetDoubleInput(&numData,&mass) < 0) return 0;
	    }
	} else if(type == "-cMass") {
	    cMass = 1;
	}
    }

    // check transf
    CrdTransf* theTransf = OPS_GetCrdTransf(transfTag);
    if(theTransf == 0) {
	opserr<<"coord transfomration not found\n";
	return 0;
    }

    return new ElasticBeam2d(iData[0],data[0],data[1],data[2],iData[1],iData[2],
			     *theTransf,alpha,depth,mass,cMass);
}
int
TclModelBuilder_addDispBeamColumnInt(ClientData clientData, Tcl_Interp *interp,  
				int argc, 
				TCL_Char **argv, 
				Domain*theTclDomain,
				TclModelBuilder *theTclBuilder)
{
	// ensure the destructor has not been called - 
	if (theTclBuilder == 0) {
		opserr << "WARNING builder has been destroyed\n";    
		return TCL_ERROR;
	}

	int ndm = theTclBuilder->getNDM();
	int ndf = theTclBuilder->getNDF();

	int ok = 0;
	if (ndm == 2 && ndf == 3)
		ok = 1;


if (ok == 0) {
		opserr << "WARNING -- NDM = " << ndm << " and NDF = " << ndf
			<< " not compatible with dispBeamColumn element" << endln;
		return TCL_ERROR;
	}

	if (argc < 9) {			//8
		opserr << "WARNING insufficient arguments\n";
		printCommand(argc, argv);
		opserr << "Want: element dispBeamColumn eleTag? iNode? jNode? nIP? secTag? transfTag? C1? t1? NStrip1? t2? NStrip2? t3? NStrip3?\n";
		return TCL_ERROR;
	}

	// get the id and end nodes 
	int eleTag, iNode, jNode, nIP, transfTag;
	double C1;
	int secTag[10]; // Max size of integration rule ... can change if needed
	int argi = 2;

	if (Tcl_GetInt(interp, argv[argi++], &eleTag) != TCL_OK) {
		opserr << "WARNING invalid dispBeamColumn eleTag" << endln;
		return TCL_ERROR;
	}

	if (Tcl_GetInt(interp, argv[argi++], &iNode) != TCL_OK) {
		opserr << "WARNING invalid iNode ";
		opserr << "dispBeamColumn element: " << eleTag << endln;
		return TCL_ERROR;
	}

	if (Tcl_GetInt(interp, argv[argi++], &jNode) != TCL_OK) {
		opserr << "WARNING invalid jNode ";
		opserr << "dispBeamColumn element: " << eleTag << endln;
		return TCL_ERROR;
	}
  
	if (Tcl_GetInt(interp, argv[argi++], &nIP) != TCL_OK) {
		opserr << "WARNING invalid nIP ";
		opserr << "dispBeamColumn element: " << eleTag << endln;
		return TCL_ERROR;
	}  
  
	if (strcmp(argv[argi], "-sections") == 0) {
	  argi++;
	  if (argi+nIP > argc) {
	    opserr << "WARNING insufficient number of section tags - element dispBeamColumn eleTag? iNode? jNode? nIP? secTag? transfTag?\n";
	    return TCL_ERROR;
	  }
	  int section;
	  for (int i = 0; i < nIP; i++) {
	    if (Tcl_GetInt(interp, argv[argi+i], &section) != TCL_OK) {
	      opserr << "WARNING invalid secTag - element dispBeamColumn eleTag? iNode? jNode? nIP? secTag? transfTag?\n";
	      return TCL_ERROR;
	    }
	    secTag[i] = section;
	  }
	  argi += nIP;
	}
	
	else {
	  int section;
	  if (Tcl_GetInt(interp, argv[argi++], &section) != TCL_OK) {
	    opserr << "WARNING invalid secTag - element dispBeamColumn eleTag? iNode? jNode? nIP? secTag? transfTag?\n";
	    return TCL_ERROR;
	  }
	  for (int i = 0; i < nIP; i++)
	    secTag[i] = section;
	}
	
	if (argi >= argc || Tcl_GetInt(interp, argv[argi++], &transfTag) != TCL_OK) {
	  opserr << "WARNING invalid transfTag? - element dispBeamColumn eleTag? iNode? jNode? nIP? secTag? transfTag?\n";
	  return TCL_ERROR;
	}

	if (Tcl_GetDouble(interp, argv[argi++], &C1) != TCL_OK) {
		opserr << "WARNING invalid dispBeamColumn C1" << endln;
		return TCL_ERROR;
	}


	double massDens = 0.0;

	while (argi != argc) {
	  if (strcmp(argv[argi++],"-mass") == 0 && argi < argc) {
	    if (Tcl_GetDouble(interp, argv[argi++], &massDens) != TCL_OK) {
	      opserr << "WARNING invalid massDens - element dispBeamColumn eleTag? iNode? jNode? nIP? secTag? transfTag? C1? t? NStrip?\n";
	      return TCL_ERROR;
	    }
	  }
	}

	SectionForceDeformation **sections = new SectionForceDeformation* [nIP];
	
	if (!sections) {
	  opserr << "WARNING TclElmtBuilder - addFrameElement - Insufficient memory to create sections\n";
	  return TCL_ERROR;
	}
	
	for (int j=0; j<nIP; j++) {
	  SectionForceDeformation *theSection = theTclBuilder->getSection(secTag[j]);
	  
	  if (theSection == 0) {
	    opserr << "WARNING TclElmtBuilder - frameElement - no Section found with tag ";
	    opserr << secTag[j] << endln;
	    delete [] sections;
	    return TCL_ERROR;
	  }

	  sections[j] = theSection;
	}
	
	Element *theElement = 0;

	if (ndm == 2) {

		CrdTransf *theTransf = OPS_GetCrdTransf(transfTag);
      
		if (theTransf == 0) {
			opserr << "WARNING transformation not found\n";
			opserr << "transformation: " << transfTag;
			opserr << "\ndispBeamColumn element: " << eleTag << endln;
			return TCL_ERROR;
		}

		// now create the DispBeamColumn and add it to the Domain
		theElement = new DispBeamColumn2dInt(eleTag,iNode,jNode,nIP,sections,*theTransf,C1,massDens);

		delete [] sections;
	}

	if (theElement == 0) {
		opserr << "WARNING ran out of memory creating element\n";
		opserr << "dispBeamColumn element: " << eleTag << endln;
		return TCL_ERROR;
	}

	if (theTclDomain->addElement(theElement) == false) {
		opserr << "WARNING could not add element to the domain\n";
		opserr << "dispBeamColumn element: " << eleTag << endln;
		delete theElement;
		return TCL_ERROR;
	}

	// if get here we have sucessfully created the element and added it to the domain
	return TCL_OK;
}
Exemple #3
0
CrdTransf *OPS_GetCrdTransfPtr(int tag)
{
    return OPS_GetCrdTransf(tag);
}
Exemple #4
0
OPS_Export void *
OPS_PileToe3D(void)
{
  if (num_PileToe3D == 0) {
    num_PileToe3D++;
    //OPS_Error("PileToe3D element - Written: P.Arduino, P.Mackenzie-Helnwein, U.Washington\n", 1);
    opserr <<"PileToe3D element - Written: P.Arduino, P.Mackenzie-Helnwein, U.Washington\n";
  }

  // Pointer to a uniaxial material that will be returned
  Element *theElement = 0;

  int numRemainingInputArgs = OPS_GetNumRemainingInputArgs();

  if (numRemainingInputArgs < 7) {
    opserr << "Invalid #args,  want: element PileToe3D eleTag?  iNode? BiNode? BjNode? radius? k? crdTransf?\n";
    return 0;
  }
   
  int    iData[5];
  double dData[2];

  int numData = 4;
  if (OPS_GetIntInput(&numData, iData) != 0) {
    opserr << "WARNING invalid integer data: element PileToe3D" << endln;
    return 0;
  }

  numData = 1;
  if (OPS_GetDoubleInput(&numData, dData) != 0) {
    opserr << "WARNING invalid radius data: element PileToe3D " << iData[0] << endln;
    return 0;  
  }

  numData = 1;
  if (OPS_GetDoubleInput(&numData, &dData[1]) != 0) {
    opserr << "WARNING invalid  k data: element PileToe3D " << iData[0] << endln;
    return 0;  
  }

  numData = 1;
  if (OPS_GetIntInput(&numData, &iData[4]) != 0) {
    opserr << "WARNING invalid integer crdTransf data: element PileToe3D" << iData[0] << endln;
    return 0;
  }

  int transfTag = iData[4];
  CrdTransf *theTransf = OPS_GetCrdTransf(transfTag);
  if (theTransf == 0) {
    opserr << "WARNING element PileToe3D " << iData[0] << endln;
    opserr << " coordTransf: " << transfTag << "not found\n";
    return 0;
  }

  // Parsing was successful, allocate the element
  theElement = new PileToe3D(iData[0], iData[1], iData[2], iData[3], dData[0], dData[1], *theTransf);

  if (theElement == 0) {
    opserr << "WARNING could not create element of type PileToe3D\n";
    return 0;
  }

  return theElement;
}
void *
OPS_ModElasticBeam2d()
{
  // print out a message about who wrote this element & any copyright info wanted
  if (numModElasticBeam2d == 0) {
    opserr << "ModElasticBeam2d element -> for Stiffness Modification Factors by D.Lignos";
    numModElasticBeam2d++;
  }

  Element *theEle = 0;

  int numRemainingArgs = OPS_GetNumRemainingInputArgs();

  if (numRemainingArgs == 0) { // parallel processing
    theEle = new ModElasticBeam2d();
    return theEle;
  }

  if (numRemainingArgs < 10) {
    opserr << "ERROR not enough args provided, want: element ModElasticBeam2d tag? iNode? jNode? A? E? I? K11? K33? K44? transfType? <-alpha $alpha> <-d $d> <-rho $rho> <-cMass>\n";
    return 0;
  }

  int numData;
  int iData[5];     //tag, iNode, jNode, transfTag, cMass
  double dData[9];  // A, E, I, K11, K33, K44, alpha, d, rho

  iData[4] = 0;  // cMass
  dData[6] = 0.0; dData[7] = 0.0;  // alpha and d
  dData[8] = 0.0;  // rho

  numData = 3;
  if (OPS_GetIntInput(&numData, iData) != 0) {
    opserr << "WARNING invalid element data (tag, iNode, jNode) element ElasticBeamColumn2d\n";
    return 0;
  }

  int eleTag = iData[0];

  numData = 3;
  if (OPS_GetDoubleInput(&numData, dData) != 0) {
    opserr << "WARNING error reading element data (A, E, I) element ElasticBeamColumn2d " << eleTag << endln;
    return 0;
  }

  numData = 3;
  if (OPS_GetDoubleInput(&numData, &dData[3]) != 0) {
    opserr << "WARNING error reading element data (K11, K33, K44) element ElasticBeamColumn2d " << eleTag << endln;
    return 0;
  }
	
  numData = 1;
  if (OPS_GetIntInput(&numData, &iData[3]) != 0) {
	opserr << "WARNING error reading data (transfTag) element ElasticBeamColumn2d " << eleTag << endln;
	return 0;
  }
	
  numRemainingArgs = OPS_GetNumRemainingInputArgs();
  while (numRemainingArgs > 1) {
    const char *argvLoc = OPS_GetString();;
    numData = 1;

    if ((strcmp(argvLoc, "-alpha") == 0) || (strcmp(argvLoc, "-Alpha") == 0) || (strcmp(argvLoc, "-ALPHA") == 0)) {
      if (OPS_GetDoubleInput(&numData, &dData[6]) != 0) {
	opserr << "WARNING error reading element data (alpha) element ElasticBeamColumn2d " << eleTag << endln;
	return 0;
      }
    } else if ((strcmp(argvLoc, "-d") == 0) || (strcmp(argvLoc, "-D") == 0)) {
      if (OPS_GetDoubleInput(&numData, &dData[7]) != 0) {
	opserr << "WARNING error reading element data (D) element ElasticBeamColumn2d " << eleTag << endln;
	return 0;
      }
    } else if ((strcmp(argvLoc, "-rho") == 0) || (strcmp(argvLoc, "Rho") == 0) || (strcmp(argvLoc, "-RHO") == 0)) {
      if (OPS_GetDoubleInput(&numData, &dData[8]) != 0) {
	opserr << "WARNING error reading element data (rho) element ElasticBeamColumn2d " << eleTag << endln;
	return 0;
      }
    } else if ((strcmp(argvLoc, "-lMass") == 0) || (strcmp(argvLoc, "lMass") == 0)) {
      iData[4] = 0;  // lumped mass matrix (default)
    } else if ((strcmp(argvLoc, "-cMass") == 0) || (strcmp(argvLoc, "cMass") == 0)) {
      iData[4] = 1;  // consistent mass matrix
    }
    numRemainingArgs = OPS_GetNumRemainingInputArgs();      
  }

  CrdTransf *theTransf = OPS_GetCrdTransf(iData[3]);
  if (theTransf == 0) {
    opserr << "WARNING error could not find a transformation with tag: " << iData[3] << "element ElasticBeamColumn2d " << eleTag << endln;
    return 0;
  } 

  theEle = new ModElasticBeam2d(iData[0], dData[0], dData[1], dData[2],
				iData[1], iData[2],
				dData[3], dData[4], dData[5],
				*theTransf,
				dData[6], dData[7], dData[8], iData[4]);

  //  delete theTransf;

  return theEle;
}
void *OPS_ElasticTimoshenkoBeam2d()
{
    Element *theElement = 0;
    
    int numRemainingArgs = OPS_GetNumRemainingInputArgs();
    
    if (numRemainingArgs == 0)  { // parallel processing
        theElement = new ElasticTimoshenkoBeam2d();
        return theElement;
    }
    
    if (numRemainingArgs < 9)  {
        opserr << "ERROR not enough args provided, want: element ElasticTimoshenkoBeam2d $tag $iNode $jNode $E $G $A $Iz $Avy $transTag <-mass $m> <-cMass> \n";
        return 0;
    }
    
    int numData;
    int iData[5];     // tag, iNode, jNode, transTag, cMass
    double dData[6];  // E, G, A, Iz, Avy, mass
    
    iData[4] = 0;     // cMass
    dData[5] = 0.0;   // mass per unit length
    
    numData = 3;
    if (OPS_GetIntInput(&numData, iData) != 0)  {
        opserr << "WARNING invalid element data (tag, iNode, jNode) element ElasticTimoshenkoBeam2d.\n";
        return 0;
    }
    
    numData = 5;
    if (OPS_GetDoubleInput(&numData, dData) != 0) {
        opserr << "WARNING error reading element data (E, G, A, Iz, Avy) element ElasticTimoshenkoBeam2d " << iData[0] << endln;
        return 0;
    }
    
    numData = 1;
    if (OPS_GetIntInput(&numData, &iData[3]) != 0)  {
        opserr << "WARNING invalid element data (transTag) element ElasticTimoshenkoBeam2d " << iData[0] << endln;
        return 0;
    }

    CrdTransf *theTrans = OPS_GetCrdTransf(iData[3]);
    if (theTrans == 0)  {
	    opserr << "WARNING transformation object not found for ElasticTimoshenkoBeam2d " << iData[0] << endln;
	    return 0;
    }
    
    numRemainingArgs = OPS_GetNumRemainingInputArgs();
    while (numRemainingArgs > 0)  {
      const char *argvLoc = OPS_GetString();
        numData = 1;
        
        if ((strcmp(argvLoc, "-mass") == 0) || (strcmp(argvLoc, "mass") == 0))  {
            if (OPS_GetDoubleInput(&numData, &dData[5]) != 0)  {
                opserr << "WARNING error reading element data (mass) element ElasticTimoshenkoBeam2d " << iData[0] << endln;
                return 0;
            }
        }
        if ((strcmp(argvLoc, "-lMass") == 0) || (strcmp(argvLoc, "lMass") == 0))  {
            iData[4] = 0;  // lumped mass matrix (default)
        }
        if ((strcmp(argvLoc, "-cMass") == 0) || (strcmp(argvLoc, "cMass") == 0))  {
            iData[4] = 1;  // consistent mass matrix
        }
        numRemainingArgs = OPS_GetNumRemainingInputArgs();      
    }
    
    theElement = new ElasticTimoshenkoBeam2d(iData[0], iData[1], iData[2],
        dData[0], dData[1], dData[2], dData[3], dData[4], *theTrans, dData[5], iData[4]);
    
    return theElement;
}