New question #681720 on Yade:
https://answers.launchpad.net/yade/+question/681720

I want to add load on the assign nodes in FEM during the coupling of FEM/DEM, 
but something was wrong by the procedure with the error prompt as following:
------------------------------------------------------------
Error:(/home/.../oofemlib/domain.C:353)
In Domain::giveload, number : 1:
cannot cast boundary condition 1 to Load class
------------------------------------------------------------
Part of my script was as following:
############
import liboofem

def readUnvFile111(fName):
...
## read the mesh file of UNV and get the nodes
global Nodes4unv,Elems4unv111
Nodes4unv,Elems4unv111 = readUnvFile111('/tmp/membrane3Dtr12.unv')
##
class Node:
        def __init__(self,id,coords):
                self.id = id
                self.coords = list(coords)
                self.bcs = [0,0,0]
        def toOofem(self):
                kw = dict(coords=self.coords)
                if any(self.bcs):
                        kw["bc"] = self.bcs
                return liboofem.node(self.id,domain,**kw)

def createOofemNodes():
        nodes = [Node(-1,tuple(nodexyz)) for _, (nodexyz) in 
enumerate(Nodes4unv)]
        for i,n in enumerate(nodes):
                n.id = i+1
                if n.coords[2] == 0.17:
                        n.bcs = [1,1,1]
                elif n.coords[2] == 0.72:
                        n.bcs = [1,1,1]
        return [n.toOofem() for n in nodes]
##
class Shell4tr:
        def __init__(self,id,nodes):
                self.id = id
                self.nodes = list(nodes)
        def toOofem(self):
                return liboofem.element("LTRSpace",self.id, domain, 
nodes=self.nodes, mat=1, crossSect=1, nlgeo=1)

def createOofemElems():
        elems = []
        #for _, (NumId41) in enumerate(Elems4unv41):
                #elems.append(Shell3tr(-1,(NumId41)))
        for _, (NumId111) in enumerate(Elems4unv111):
                elems.append(Shell4tr(-1,(NumId111)))
        for i,e in enumerate(elems):
                e.id = i+1
        return [e.toOofem() for e in elems]
### all above was get the mesh information from unv and built the geom of 
object in fem

def sortNodes():
        fxpNodes = []
        fxnNodes = []
        fypNodes = []
        fynNodes = []
        for i in xrange(domain.giveNumberOfDofManagers()):
                a = domain.giveDofManager(i+1).giveCoordinates()
                c = [a[j] for j in xrange(3)]
                if abs(c[0]-0.04)<0.006:
                        fxpNodes.append(i+1)
                if abs(c[0]-0.36)<0.006:
                        fxnNodes.append(i+1)
                if abs(c[1]-0.04)<0.006:
                        fypNodes.append(i+1)
                if abs(c[1]-0.36)<0.006:
                        fynNodes.append(i+1)
        return fxpNodes,fxnNodes,fypNodes,fynNodes

## above I sort the parts of nodes for loading

def loadmembrane():
        loadxp = liboofem.FloatArray()
        loadxp.resize(3)
        loadxp.zero()
        loadxp[0] = 3 #x=0.045 & 0.035
        loadxn = liboofem.FloatArray()
        loadxn.resize(3)
        loadxn.zero()
        loadxn[0] = -3 #x=0.355 & 0.365
        loadyp = liboofem.FloatArray()
        loadyp.resize(3)
        loadyp.zero()
        loadyp[1] = 3 #x=0.045 & 0.035
        loadyn = liboofem.FloatArray()
        loadyn.resize(3)
        loadyn.zero()
        loadyn[1] = -3 #x=0.355 & 0.365
        for ixp in fxpNodes:
                lxp = domain.giveLoad(ixp)
                axp = lxp.giveComponentArray()
                axp.add(loadxp)
                lxp.setComponentArray(axp)
        for ixn in fxnNodes:
                lxn = domain.giveLoad(ixn)
                axn = lxn.giveComponentArray()
                axn.add(loadxn)
                lxn.setComponentArray(axn)
        for iyp in fypNodes:
                lyp = domain.giveLoad(iyp)
                ayp = lyp.giveComponentArray()
                ayp.add(loadyp)
                lyp.setComponentArray(ayp)
        for iyn in fynNodes:
                lyn = domain.giveLoad(iyn)
                ayn = lyn.giveComponentArray()
                ayn.add(loadyn)
                lyn.setComponentArray(ayn)

###and I apply the load on these nodes


############################################################
# engngModel
problem = 
liboofem.engngModel("nldeidynamic",1,nSteps=5,dumpCoef=.1,deltaT=10000,outFile="/tmp/membrane_oofem.out")

# domain
domain = liboofem.domain(1, 1, problem, liboofem.domainType._3dMode, 
tstep_step=10000, dofman_all=True, element_all=True)
problem.setDomain(1, domain, True)

# vtkxml
vtkxmlModule = 
liboofem.vtkxml(1,problem,tstep_step=10000,vars=[1,6],primvars=[1,4])
#vtkxmlModule = liboofem.vtkxml(1,problem,tstep_step=10000)
exportModuleManager = problem.giveExportModuleManager()
exportModuleManager.resizeModules(1)
exportModuleManager.setModule(1,vtkxmlModule)

# boundary condition and time function
ltf = liboofem.loadTimeFunction("constantFunction",1,f_t=0)
bc = liboofem.boundaryCondition(1, domain, loadTimeFunction=1, 
prescribedValue=0.0)


# nodes
nodes = createOofemNodes()

# material and cross section
mat = liboofem.isoLE(1, domain, d=1200, E=1.2e7, n=0.48, tAlpha=0)
cs  = liboofem.simpleCS(1, domain,)

# elements
elems = createOofemElems()

# add eveything to domain (resize container first)
domain.resizeDofManagers(len(nodes))
for n in nodes:
        domain.setDofManager(n.number, n)
domain.resizeElements(len(elems))
for e in elems:
        domain.setElement(e.number, e)
domain.resizeMaterials(1)
domain.setMaterial(1, mat)
domain.resizeCrossSectionModels(1)
domain.setCrossSection(1, cs)
domain.resizeBoundaryConditions(1)
domain.setBoundaryCondition(bc.number, bc)
domain.resizeFunctions(1)
domain.setFunction(ltf.number, ltf)

vtkxmlModule.initialize() # (!)

fxpNodes,fxnNodes,fypNodes,fynNodes = sortNodes()
loadmembrane()


#####
so did something wrong with the boundary or loading ?

Best regards,

Dez


-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to