Subversion Repositories OpenSees

Rev

Rev 764 | Rev 1321 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* ****************************************************************** **
**    OpenSees - Open System for Earthquake Engineering Simulation    **
**          Pacific Earthquake Engineering Research Center            **
**                                                                    **
**                                                                    **
** (C) Copyright 1999, The Regents of the University of California    **
** All Rights Reserved.                                               **
**                                                                    **
** Commercial use of this program without express permission of the   **
** University of California, Berkeley, is strictly prohibited.  See   **
** file 'COPYRIGHT'  in main directory for information on usage and   **
** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
**                                                                    **
** Developed by:                                                      **
**   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
**   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
**   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
**                                                                    **
** ****************************************************************** */


// $Revision: 1.3 $
// $Date: 2003-02-14 23:01:41 $
// $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/drain/TclDrainMaterialCommand.cpp,v $

// Written: MHS
// Created: Aug 2001
//
// Description: This file contains the implementation of the
// TclModelBuilder_addDrainMaterial() function.

#include <DrainHardeningMaterial.h>
#include <DrainBilinearMaterial.h>
#include <DrainClough1Material.h>
#include <DrainClough2Material.h>
#include <DrainPinch1Material.h>

#include <TclModelBuilder.h>
#include <Vector.h>
#include <string.h>

static void printCommand(int argc, char **argv)
{
    opserr << "Input command: ";
    for (int i=0; i<argc; i++)
        opserr << argv[i] << " ";
    opserr << endln;
}

UniaxialMaterial *
TclModelBuilder_addDrainMaterial(ClientData clientData, Tcl_Interp *interp, int argc,
                                char **argv, TclModelBuilder *theTclBuilder)
{
        if (argc < 3) {
                opserr << "WARNING insufficient number of arguments\n";
                printCommand(argc, argv);
                return 0;
        }

        int tag;
        if (Tcl_GetInt(interp, argv[2], &tag) != TCL_OK) {
            opserr << "WARNING invalid uniaxialMaterial tag\n";
                printCommand(argc, argv);
            return 0;
        }

        UniaxialMaterial *theMaterial = 0;

        if (strcmp(argv[1],"Hardening2") == 0 || strcmp(argv[1],"Hardening02") == 0) {
                if (argc < 7) {
                        opserr << "WARNING invalid number of arguments\n";
                        printCommand(argc,argv);
                        opserr << "Want: uniaxialMaterial Hardening02 tag? E? sigY? Hiso? Hkin?" << endln;
                        return 0;
                }
               
                double E, sigY, Hiso, Hkin;

                if (Tcl_GetDouble(interp, argv[3], &E) != TCL_OK) {
                        opserr << "WARNING invalid E\n";
                        printCommand(argc, argv);
                        return 0;      
                }
                if (Tcl_GetDouble(interp, argv[4], &sigY) != TCL_OK) {
                        opserr << "WARNING invalid sigY\n";
                        printCommand(argc, argv);
                        return 0;      
                }
                if (Tcl_GetDouble(interp, argv[5], &Hiso) != TCL_OK) {
                        opserr << "WARNING invalid Hiso\n";
                        printCommand(argc, argv);
                        return 0;      
                }
                if (Tcl_GetDouble(interp, argv[6], &Hkin) != TCL_OK) {
                        opserr << "WARNING invalid Hkin\n";
                        printCommand(argc, argv);
                        return 0;      
                }

                theMaterial = new DrainHardeningMaterial(tag, E, sigY, Hiso, Hkin);
        }
       
        else if (strcmp(argv[1],"BiLinear") == 0) {
                if (argc < 19) {
                        opserr << "WARNING insufficient arguments\n";
                        printCommand(argc,argv);
                        opserr << "Want: uniaxialMaterial BiLinear tag? ..." << endln;
                        return 0;
                }
               
                Vector input(16);
                double temp;

                for (int i = 3, j = 0; j < 16; i++, j++) {
                        if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
                                opserr << "WARNING invalid input, data " << i << endln;
                                printCommand(argc, argv);
                                return 0;
                        }
                        input(j) = temp;
                }

                theMaterial = new DrainBilinearMaterial(tag, input);
        }

        else if (strcmp(argv[1],"Clough1") == 0) {
                if (argc < 19) {
                        opserr << "WARNING insufficient arguments\n";
                        printCommand(argc,argv);
                        opserr << "Want: uniaxialMaterial Clough1 tag? ..." << endln;
                        return 0;
                }
               
                Vector input(16);
                double temp;

                for (int i = 3, j = 0; j < 16; i++, j++) {
                        if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
                                opserr << "WARNING invalid input, data " << i << endln;
                                printCommand(argc, argv);
                                return 0;
                        }
                        input(j) = temp;
                }

                theMaterial = new DrainClough1Material(tag, input);
        }

        else if (strcmp(argv[1],"Clough2") == 0) {
                if (argc < 19) {
                        opserr << "WARNING insufficient arguments\n";
                        printCommand(argc,argv);
                        opserr << "Want: uniaxialMaterial Clough2 tag? ..." << endln;
                        return 0;
                }
               
                Vector input(16);
                double temp;

                for (int i = 3, j = 0; j < 16; i++, j++) {
                        if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
                                opserr << "WARNING invalid input, data " << i << endln;
                                printCommand(argc, argv);
                                return 0;
                        }
                        input(j) = temp;
                }

                theMaterial = new DrainClough2Material(tag, input);
        }

        else if (strcmp(argv[1],"Pinch1") == 0) {
                if (argc < 22) {
                        opserr << "WARNING insufficient arguments\n";
                        printCommand(argc,argv);
                        opserr << "Want: uniaxialMaterial Pinch1 tag? ..." << endln;
                        return 0;
                }
               
                Vector input(19);
                double temp;

                for (int i = 3, j = 0; j < 19; i++, j++) {
                        if (Tcl_GetDouble(interp, argv[i], &temp) != TCL_OK) {
                                opserr << "WARNING invalid input, data " << i << endln;
                                printCommand(argc, argv);
                                return 0;
                        }
                        input(j) = temp;
                }

                theMaterial = new DrainPinch1Material(tag, input);
        }

        return theMaterial;
}