示例#1
0
def getPfem():
    global w
    if w:
        return w
    w = pfem

    mshFile = runPath + os.sep + 'cylinder.msh'

    rho0 = 1.0
    mu = 0.01

    pbl = w.Problem()
    pbl.rho0 = rho0
    pbl.mu = mu
    pbl.alpha = 1.4
    pbl.extP = 1.0
    pbl.scalingU = 1.0
    pbl.bodyForceY = -9.81

    msh = w.MshData(pbl)
    msh.load(mshFile)
    print(msh)

    toll = 1e-6
    nItMax = 20

    solScheme = w.SchemeMonolithicPSPG(msh, pbl)
    convCriterion = w.ForceBalanceCriterion(msh, pbl, toll, 9.81 * rho0)
    nonLinAlgo = w.PicardAlgorithm(solScheme, convCriterion, nItMax)

    scheme = w.TimeIntegration(msh, pbl, solScheme)

    bndno = 9

    w.Medium(msh, 15, 0., 0., 3)
    w.Medium(msh, 14, mu, rho0, 1)

    # boundaries
    w.Boundary(msh, 8, 3, pbl.extP)
    w.Boundary(msh, 7, 1, 0.0)
    w.Boundary(msh, 7, 2, 0.0)
    w.Boundary(msh, 9, 1, 0.0)
    w.Boundary(msh, 9, 2, 0.0)

    scheme.savefreq = 1
    scheme.gamma = 0.6
    scheme.omega = 0.5
    scheme.addRemoveNodesOption = True

    # Results
    extManager = w.ExtractorsManager(msh)
    extManager.add(1, w.PositionExtractor(msh, 6))
    extManager.add(20, w.IntForceExtractor(msh, "Cylinder"))
    extManager.add(21, wt.TotalIntForceExtractor(msh, "Cylinder"))

    import pfem.tools.link2vtk as v
    gui = v.Link2VTK(msh, scheme, False, True)

    return Module(w, msh, pbl, solScheme, nonLinAlgo, convCriterion, scheme,
                  extManager, gui, bndno)
示例#2
0
def getPfem():
    global w
    if w:
        return w
    w = pfem

    mshFile = runPath + os.sep + 'lsdyna.msh'

    rho0 = 781.
    mu = 0.01
    U0 = 0.05
    V0 = -0.01
    N = 10

    pbl = w.Problem()
    pbl.rho0 = rho0
    pbl.mu = mu
    pbl.nonLinAlgorithm = 1
    pbl.solScheme = 1
    pbl.alpha = 1.2
    pbl.beta = 0.
    pbl.gravity = 0.
    pbl.scalingU = U0

    msh = w.MshData(pbl)
    msh.load(mshFile)
    print(msh)

    toll = 1e-6
    nItMax = 10

    solScheme = w.SchemeMonolithicPSPG(msh, pbl)
    convCriterion = w.ForceBalanceCriterion(msh, pbl, toll, 9.81 * rho0)
    nonLinAlgo = w.PicardAlgorithm(solScheme, convCriterion, nItMax)

    scheme = w.TimeIntegration(msh, pbl, solScheme)

    bndno = 15  # fsi boundary

    w.Medium(msh, 15, 0., 0., 3)
    w.Medium(msh, 17, mu, rho0, 1)

    # boundaries
    w.Boundary(msh, 14, 3, 0.0)
    w.Boundary(msh, 15, 1, 0.0)
    w.Boundary(msh, 15, 2, 0.0)

    # Initial velocity
    bird = w.Group(msh, 17)
    loadingset = w.LoadingSet(msh)
    loadingset.add(1, w.InitialVelocity(msh, bird, U0, V0, 0.))

    scheme.savefreq = 1
    scheme.gamma = 0.5
    scheme.omega = 0.5
    scheme.addRemoveNodesOption = True
    scheme.tollNLalgo = 1e-7

    # Results
    extManager = w.ExtractorsManager(msh)
    extManager.add(1, w.PositionExtractor(msh, 4))
    extManager.add(2, w.PositionExtractor(msh, 3))
    '''extManager.add(1,w.IntForceExtractor(msh,"Wall"))
    extManager.add(2,w.ExtForceExtractor(msh,"Wall"))
    extManager.add(3,w.IneForceExtractor(msh,"Wall"))
    extManager.add(4,w.PressureExtractor(msh,"Wall"))
    extManager.add(5,w.PositionExtractor(msh,"Wall"))
    extManager.add(6,wt.KineticEnergyExtractor(msh,pbl,"Body"))
    extManager.add(7,wt.ViscousEnergyExtractor(msh,pbl,scheme,"Body"))'''

    import pfem.tools.link2vtk as v
    gui = v.Link2VTK(msh, scheme, False, True)

    return Module(w, msh, pbl, solScheme, nonLinAlgo, convCriterion, bird,
                  loadingset, scheme, extManager, gui, bndno)
示例#3
0
def getPfem():
    global w
    if w:
        return w
    w = pfem

    mshFile = runPath + os.sep + 'impactaxi.msh'

    rho0 = 1000.
    mu = 0.001
    U0 = 100

    pbl = w.Problem()
    pbl.rho0 = rho0
    pbl.mu = mu
    pbl.nonLinAlgorithm = 1
    pbl.solScheme = 1
    pbl.alpha = 1.2
    pbl.beta = 0.
    pbl.gravity = 0.
    pbl.scalingU = U0
    pbl.isAxisymmetric = True

    msh = w.MshData(pbl)
    msh.load(mshFile)
    print(msh)

    toll = 1e-6
    nItMax = 10

    solScheme = w.SchemeMonolithicPSPG(msh, pbl)
    convCriterion = w.ForceBalanceCriterion(msh, pbl, toll, 9.81 * rho0)
    nonLinAlgo = w.PicardAlgorithm(solScheme, convCriterion, nItMax)

    scheme = w.TimeIntegration(msh, pbl, solScheme)

    bndno = 13  # fsi boundary no

    w.Medium(msh, 13, 0., 0., 3)
    w.Medium(msh, 17, mu, rho0, 1)

    # boundaries
    w.Boundary(msh, 15, 7, 0.0)
    w.Boundary(msh, 16, 3, 0.0)
    w.Boundary(msh, 13, 1, 0.0)
    w.Boundary(msh, 13, 2, 0.0)

    # --- Necessary for the correct elimination of nodes along the axis of symmetry ---
    n4 = msh.getNode(4)
    n4.isOnAxisOfSymmetry = True
    # ---

    # Initial velocity
    bird = w.Group(msh, 17)
    loadingset = w.LoadingSet(msh)
    loadingset.add(1, w.InitialVelocity(msh, bird, 0., -U0, 0.))

    scheme.savefreq = 10
    scheme.nthreads = 3
    scheme.gamma = 0.5
    scheme.omega = 0.5
    scheme.addRemoveNodesOption = True
    scheme.tollNLalgo = 1e-7

    # Results
    extManager = w.ExtractorsManager(msh)
    extManager.add(1, w.PositionExtractor(msh, 4))
    extManager.add(6, wt.KineticEnergyExtractor(msh, pbl, 17))
    extManager.add(7, wt.ViscousEnergyExtractor(msh, pbl, scheme, 17))
    extManager.add(8, wt.PressureWorkExtractor(msh, pbl, scheme, 17))
    extManager.add(9, w.MassExtractor(msh, pbl, 17))

    import pfem.tools.link2vtk as v
    gui = v.Link2VTK(msh, scheme, False, True)

    return Module(w, msh, pbl, solScheme, nonLinAlgo, convCriterion, bird,
                  loadingset, scheme, extManager, gui, bndno)
示例#4
0
def getPfem():
    global w
    if w:
        return w
    w = pfem

    mshFile = runPath+os.sep+'matching.msh'

    rho0 = 1000.
    mu = 0.001

    pbl = w.Problem()
    pbl.rho0 = rho0
    pbl.mu = mu
    pbl.alpha = 1.2
    pbl.extP = 0.
    pbl.scalingU = 5.0
    pbl.bodyForceY = -9.81

    msh = w.MshData(pbl)
    msh.load(mshFile)
    print msh

    toll = 1e-6
    nItMax = 20

    solScheme = w.SchemeMonolithicPSPG(msh, pbl)
    convCriterion = w.ForcesBalanceNormedBodyForceCriterion(msh, pbl, toll)
    nonLinAlgo = w.PicardAlgorithm(solScheme, convCriterion, nItMax)

    scheme = w.BackwardEuler(msh, pbl, nonLinAlgo)

    bndno = 17 # fsi boundary

    contactTag = w.Tag(100, "Contact", 2)
    msh.ptags[100] = contactTag
    msh.ntags["Contact"] = contactTag

    w.Medium(msh, 100, 0., 0., 0., 4)
    w.Medium(msh, 17, 0., 0., 3)
    w.Medium(msh, 16, mu, rho0, 1)
    w.Medium(msh, 20, mu, rho0, 1)

    # boundaries
    w.Boundary(msh, 18, 3, pbl.extP)
    w.Boundary(msh, 16, 1, 0.0)
    w.Boundary(msh, 16, 2, 0.0)
    w.Boundary(msh, 17, 1, 0.0)
    w.Boundary(msh, 17, 2, 0.0)

    scheme.savefreq = 100
    scheme.gamma = 0.6
    scheme.omega = 0.5
    scheme.addRemoveNodesOption = True

    # Results
    extManager = w.ExtractorsManager(msh)
    extManager.add(1, w.PositionExtractor(msh, 6))
    '''extManager.add(1,w.PositionExtractor(msh,1))
    extManager.add(2,w.IntForceExtractor(msh,1))
    extManager.add(3,w.ExtForceExtractor(msh,1))
    extManager.add(4,w.IneForceExtractor(msh,1))'''
    extManager.add(5, w.IntForceExtractor(msh, 6))
    '''extManager.add(6,w.ExtForceExtractor(msh,6))
    extManager.add(7,w.IneForceExtractor(msh,6))
    extManager.add(8,w.PressureExtractor(msh,1))
    extManager.add(9,w.VelocityExtractor(msh,"Water"))
    extManager.add(10,w.MassExtractor(msh,"Water"))
    extManager.add(11,wt.KineticEnergyExtractor(msh,pbl,"Water"))
    extManager.add(12,wt.ViscousEnergyExtractor(msh,pbl,scheme,"Water"))'''

    import pfem.tools.link2vtk as v
    gui = v.Link2VTK(msh, scheme, True)

    return Module(w, msh, pbl, contactTag, solScheme, nonLinAlgo, convCriterion, scheme, extManager, gui, bndno)
示例#5
0
def getPfem():
    global w
    if w:
        return w
    w = pfem

    mshFile = runPath+os.sep+'impact.msh'

    print 'mshFile: ', mshFile

    rho0 = 1000.
    mu = 0.001
    U0 = 100

    pbl = w.Problem()
    pbl.rho0 = rho0
    pbl.mu = mu
    pbl.nonLinAlgorithm = 1
    pbl.solScheme = 1
    pbl.alpha = 1.2
    pbl.beta = 0.
    pbl.gravity = 0.
    pbl.scalingU = U0

    msh = w.MshData(pbl)
    msh.load(mshFile)
    print msh

    toll = 1e-6
    nItMax = 10

    solScheme = w.SchemeMonolithicPSPG(msh, pbl)
    convCriterion = w.ForcesBalanceNormedBodyForceCriterion(msh, pbl, toll)
    nonLinAlgo = w.PicardAlgorithm(solScheme, convCriterion, nItMax)

    scheme = w.TimeIntegration(msh, pbl, solScheme)

    bndno = 13 # fsi boundary

    w.Medium(msh, 13, 0., 0., 3)
    w.Medium(msh, 16, mu, rho0, 1)

    # boundaries
    w.Boundary(msh, 15, 3, 0.0)
    w.Boundary(msh, 13, 1, 0.0)
    w.Boundary(msh, 13, 2, 0.0)

    # Initial velocity
    bird = w.Group(msh, 16)
    loadingset = w.LoadingSet(msh)
    loadingset.add(1, w.InitialVelocity(msh, bird, 0., -U0, 0.))

    scheme.savefreq = 10
    scheme.gamma = 0.5
    scheme.omega = 0.5
    scheme.addRemoveNodesOption = True
    scheme.tollNLalgo = 1e-7

    # Results
    extManager = w.ExtractorsManager(msh)
    extManager.add(1, w.PositionExtractor(msh, 310))
    extManager.add(6, wt.KineticEnergyExtractor(msh, pbl, 16))
    extManager.add(7, wt.ViscousEnergyExtractor(msh, pbl, scheme, 16))
    extManager.add(8, wt.PressureWorkExtractor(msh, pbl, scheme, 16))
    extManager.add(9, w.MassExtractor(msh, pbl, 16))

    import pfem.tools.link2vtk as v
    gui = v.Link2VTK(msh, scheme, False, True)

    return Module(w, msh, pbl, solScheme, nonLinAlgo, convCriterion, bird, loadingset, scheme, extManager, gui, bndno)
示例#6
0
def getPfem():
    global w
    if w:
        return w
    w = pfem

    mshFile = runPath + os.sep + 'gate.msh'

    rho0 = 1000.
    mu = 0.001

    pbl = w.Problem()
    pbl.rho0 = rho0
    pbl.mu = mu
    pbl.nonLinAlgorithm = 1
    pbl.solScheme = 1
    pbl.alpha = 1.3
    pbl.extP = 0.
    pbl.scalingU = 2.0
    pbl.bodyForceY = -9.81

    msh = w.MshData(pbl)
    msh.load(mshFile)
    print(msh)

    toll = 1e-6
    nItMax = 10

    solScheme = w.SchemeMonolithicPSPG(msh, pbl)
    convCriterion = w.ForceBalanceCriterion(msh, pbl, toll, 9.81 * rho0)
    nonLinAlgo = w.PicardAlgorithm(solScheme, convCriterion, nItMax)

    scheme = w.TimeIntegration(msh, pbl, solScheme)

    bndno = 17  # fsi boundary

    # w.Medium(msh, 100, 0., 0., 0., 4)
    w.Medium(msh, 17, 0., 0., 3)
    w.Medium(msh, 16, mu, rho0, 1)
    w.Medium(msh, 20, mu, rho0, 1)

    # boundaries
    w.Boundary(msh, 18, 3, pbl.extP)
    w.Boundary(msh, 16, 1, 0.0)
    w.Boundary(msh, 16, 2, 0.0)
    w.Boundary(msh, 17, 1, -1.0e-15)
    w.Boundary(msh, 17, 2, -1.0e-15)

    scheme.savefreq = 10
    scheme.gamma = 0.5
    scheme.omega = 0.5
    scheme.addRemoveNodesOption = True

    # Results
    extManager = w.ExtractorsManager(msh)
    extManager.add(1, w.PositionExtractor(msh, 9))
    extManager.add(3, w.IntForceExtractor(msh, 17))
    '''extManager.add(2,w.IntForceExtractor(msh,1))
    extManager.add(3,w.ExtForceExtractor(msh,1))
    extManager.add(4,w.IneForceExtractor(msh,1))
    extManager.add(5,w.IntForceExtractor(msh,6))
    extManager.add(6,w.ExtForceExtractor(msh,6))
    extManager.add(7,w.IneForceExtractor(msh,6))
    extManager.add(8,w.PressureExtractor(msh,1))
    extManager.add(9,w.VelocityExtractor(msh,"Water"))
    extManager.add(10,w.MassExtractor(msh,"Water"))
    extManager.add(11,wt.KineticEnergyExtractor(msh,pbl,"Water"))
    extManager.add(12,wt.ViscousEnergyExtractor(msh,pbl,scheme,"Water"))'''

    import pfem.tools.link2vtk as v
    gui = v.Link2VTK(msh, scheme, False, True)

    return Module(w, msh, pbl, solScheme, nonLinAlgo, convCriterion, scheme,
                  extManager, gui, bndno)