def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()
    
    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "FallingCylinder_Franci_muchrefined.msh")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()    

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push( groupset(17) )  # physical group 17: cylinder
    interactionset.add( app1 )
    
    materset = domain.getMaterialSet()
    materset.define( 1, ElastHypoMaterial )
    mater1 = materset(1)
    mater1.put(MASS_DENSITY,    1200.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 1e7)  # [Pa]
    mater1.put(POISSON_RATIO,   0.35)   # [-]

    prp = ElementProperties(TriangleVolume2DElement)
    app1.addProperty(prp)
    prp.put (MATERIAL, 1)
    prp.put(GRAVITY_Y, -9.81) # m/s2
    prp.put(CAUCHYMECHVOLINTMETH,VES_CMVIM_STD)
    
    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(10)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results
    #vmgr = metafor.getValuesManager()
    #vmgr.add(1, MiscValueExtractor(metafor, EXT_T), 'time')
    #vmgr.add(2, DbNodalValueExtractor(groupset(104), Field1D(TY,RE)), 'dy')
    
    return metafor
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(
        os.path.dirname(__file__),
        "models/CantileverSquareChannel_BGS_parallel_solidMesh.geo")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push(groupset(100))  # physical group 100 = meshed beam
    interactionset.add(app1)

    materset = domain.getMaterialSet()
    materset.define(1, ElastHypoMaterial)
    mater1 = materset(1)
    mater1.put(MASS_DENSITY, 100.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 2.5e5)  # [Pa]
    mater1.put(POISSON_RATIO, 0.35)  # [-]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put(MATERIAL, 1)
    #prp.put(CAUCHYMECHVOLINTMETH,VES_CMVIM_STD)
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_SRI)

    # boundary conditions
    loadingset = domain.getLoadingSet()

    #Physical Line(101) - clamped side of the beam
    loadingset.define(groupset(101), Field1D(TX, RE))
    loadingset.define(groupset(101), Field1D(TY, RE))

    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(10)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    return metafor
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()
    
    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "waterColoumnWithElasticGate_Mtf_Pfem.msh")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()    

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push( groupset(21) )  # physical group 100: beam
    interactionset.add( app1 )

    materset = domain.getMaterialSet()
    materset.define( 1, ElastHypoMaterial )
    mater1 = materset(1)
    mater1.put(MASS_DENSITY,    1100.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 1.0e7)  # [Pa]
    mater1.put(POISSON_RATIO,   0.4)   # [-]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put (MATERIAL, 1)
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_EAS)
    prp.put(EASS, 2)
    prp.put(EASV, 2)
    prp.put(PEAS, 1e-10)
    
    # boundary conditions
    loadingset = domain.getLoadingSet()

    #Physical Line(101) - clamped side of the beam
    loadingset.define(groupset(19), Field1D(TX,RE))
    loadingset.define(groupset(19), Field1D(TY,RE))
    #Physical Line(102) - free surface of the beam  
    #Physical Line(103) - upper surface of the beam (for tests only)


    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(4)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results
    #vmgr = metafor.getValuesManager()
    #vmgr.add(1, MiscValueExtractor(metafor, EXT_T), 'time')
    #vmgr.add(2, DbNodalValueExtractor(groupset(104), Field1D(TY,RE)), 'dy')
    
    return metafor
示例#4
0
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimAxisymmetric()

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(
        os.path.dirname(__file__),
        "birdImpact_deformable_panel_Mtf_Pfem_Smojver_Axisym.msh")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push(groupset(22))  # physical group 22: panneau
    interactionset.add(app1)

    materset = domain.getMaterialSet()
    materset.define(1, EvpIsoHHypoMaterial)
    mater1 = materset(1)
    mater1.put(MASS_DENSITY, 2713.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 68.26e9)  # [Pa]
    mater1.put(POISSON_RATIO, 0.33)  # [-]
    mater1.put(YIELD_NUM, 1)

    materlawset = domain.getMaterialLawSet()
    materlawset.define(1, LinearIsotropicHardening)
    materlawset(1).put(IH_SIGEL, 262.0e6)  # [Pa]
    materlawset(1).put(IH_H, 2590.0e6)  # [Pa]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put(MATERIAL, 1)
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_SRIPR)

    # boundary conditions
    loadingset = domain.getLoadingSet()

    loadingset.define(groupset(15), Field1D(
        TY, RE))  # Forbid vertical displacements on part of the panel

    loadingset.define(groupset(16), Field1D(TX, RE))  # Clamping
    loadingset.define(groupset(16), Field1D(TY, RE))  # Clamping

    loadingset.define(groupset(18), Field1D(TX, RE))  # Axisymmetry

    mim = metafor.getMechanicalIterationManager()
    mim.setResidualTolerance(p['tolNR'])
    # mim.setResidualComputationMethod(Method4ResidualComputation(1000.))

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results (DOES NOT WORK PROPERLY!)
    vmgr = metafor.getValuesManager()
    vmgr.add(1,
             TdFieldValueExtractor(metafor, groupset(22), THERMODYN_TRAV_FINT),
             'panel_work_int_F')
    vmgr.add(2, TdFieldValueExtractor(metafor, groupset(22), THERMODYN_EN_CIN),
             'panel_kin_En')
    vmgr.add(3, TdFieldValueExtractor(metafor, groupset(22), THERMODYN_EN_DIS),
             'panel_diss_En')
    vmgr.add(4,
             TdFieldValueExtractor(metafor, groupset(22), THERMODYN_TRAV_FEXT),
             'panel_work_ext_F')

    metafor.getDbTdFieldsValueManager().setComputeEXW(True)
    metafor.getDbTdFieldsValueManager().setComputeINW(True)

    return metafor
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__),
                     "waterColoumnWithElasticGate_Mtf_Pfem_fine.msh")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push(groupset(21))  # physical group 100: beam
    interactionset.add(app1)

    G = 2.4e6  #2.6e6
    mooneyrivlin_c1 = -1.2e6
    mooneyrivlin_c2 = G / 2.0 - mooneyrivlin_c1
    penal = 1.3e6
    materset = domain.getMaterialSet()
    materset.define(1, MooneyRivlinHyperMaterial)
    mater1 = materset(1)
    mater1.put(MASS_DENSITY, 1100.)
    mater1.put(RUBBER_C1, mooneyrivlin_c1)
    mater1.put(RUBBER_C2, mooneyrivlin_c2)
    mater1.put(RUBBER_PENAL, penal)

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put(MATERIAL, 1)
    prp.put(GRAVITY_Y, -9.81)  # m/s2
    prp.put(STIFFMETHOD, STIFF_NUMERIC)
    # prp.put(CAUCHYMECHVOLINTMETH,VES_CMVIM_STD)

    # boundary conditions
    loadingset = domain.getLoadingSet()

    #Physical Line(101) - clamped side of the beam
    loadingset.define(groupset(19), Field1D(TX, RE))
    loadingset.define(groupset(19), Field1D(TY, RE))
    #Physical Line(102) - free surface of the beam
    #Physical Line(103) - upper surface of the beam (for tests only)

    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(4)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results
    #vmgr = metafor.getValuesManager()
    #vmgr.add(1, MiscValueExtractor(metafor, EXT_T), 'time')
    #vmgr.add(2, DbNodalValueExtractor(groupset(104), Field1D(TY,RE)), 'dy')

    return metafor
示例#6
0
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__),
                     "birdImpact_deformable_panel_Mtf_Pfem.msh")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push(groupset(17))  # physical group 100: beam
    interactionset.add(app1)

    materset = domain.getMaterialSet()
    materset.define(1, EvpIsoHHypoMaterial)
    mater1 = materset(1)
    mater1.put(MASS_DENSITY, 7800.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 210.0e9)  # [Pa]
    mater1.put(POISSON_RATIO, 0.3)  # [-]
    mater1.put(YIELD_NUM, 1)

    materlawset = domain.getMaterialLawSet()
    materlawset.define(1, LinearIsotropicHardening)
    materlawset(1).put(IH_SIGEL, 300.0e6)  # [Pa]
    materlawset(1).put(IH_H, 1000.0e6)  # [Pa]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put(MATERIAL, 1)
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_SRIPR)
    '''prp.put(EASS, 2)
    prp.put(EASV, 2)'''

    # boundary conditions
    loadingset = domain.getLoadingSet()

    #Physical Line(101) - clamped side of the beam
    x_ext_left = -0.4
    y_ext_left = -0.00635
    x_ext_right = 0.4
    y_ext_right = y_ext_left
    delta = 0.00001
    groupset.add(Group(50))
    groupset(50).addMeshPointsInBox(x_ext_left - delta, x_ext_left + delta,
                                    y_ext_left - delta, y_ext_left + delta,
                                    -delta, delta)
    groupset(50).addMeshPointsInBox(x_ext_right - delta, x_ext_right + delta,
                                    y_ext_right - delta, y_ext_right + delta,
                                    -delta, delta)
    loadingset.define(groupset(50), Field1D(TY, RE), 0.)
    loadingset.define(groupset(14), Field1D(TX, RE))
    #Physical Line(102) - free surface of the beam
    #Physical Line(103) - upper surface of the beam (for tests only)

    mim = metafor.getMechanicalIterationManager()
    mim.setResidualTolerance(p['tolNR'])
    # mim.setResidualComputationMethod(Method4ResidualComputation(1000.))

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results (DOES NOT WORK PROPERLY!)
    vmgr = metafor.getValuesManager()
    vmgr.add(1,
             TdFieldValueExtractor(metafor, groupset(17), THERMODYN_TRAV_FINT),
             'panel_work_int_F')
    vmgr.add(2, TdFieldValueExtractor(metafor, groupset(17), THERMODYN_EN_CIN),
             'panel_kin_En')
    vmgr.add(3, TdFieldValueExtractor(metafor, groupset(17), THERMODYN_EN_DIS),
             'panel_diss_En')
    vmgr.add(4,
             TdFieldValueExtractor(metafor, groupset(17), THERMODYN_TRAV_FEXT),
             'panel_work_ext_F')

    metafor.getDbTdFieldsValueManager().setComputeEXW(True)
    metafor.getDbTdFieldsValueManager().setComputeINW(True)

    return metafor
示例#7
0
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "elasticContainerFilling.msh")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push(groupset(7))  # physical group 100: beam
    interactionset.add(app1)

    materset = domain.getMaterialSet()
    materset.define(1, ElastHypoMaterial)
    mater1 = materset(1)
    mater1.put(MASS_DENSITY, 20.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 2.1e7)  # [Pa]
    mater1.put(POISSON_RATIO, 0.3)  # [-]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put(MATERIAL, 1)
    prp.put(GRAVITY_Y, -9.81)  # m/s2
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_STD)

    # boundary conditions
    loadingset = domain.getLoadingSet()

    #Physical Line(101) - clamped side of the beam
    loadingset.define(groupset(3), Field1D(TX, RE))
    loadingset.define(groupset(3), Field1D(TY, RE))
    #Physical Line(102) - free surface of the beam
    #Physical Line(103) - upper surface of the beam (for tests only)

    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(4)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results
    vmgr = metafor.getValuesManager()
    vmgr.add(1, MiscValueExtractor(metafor, EXT_T), 'timeMtf')
    vmgr.add(
        2,
        DbNodalValueExtractor(
            groupset(7), Field1D(TY, RE), SortByDist0(0., -6.19985, 0.),
            2))  #Vertical displacement of the center (upper skin) of the panel

    return metafor
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()

    # --- Define the type of computation (3D, plane stress, plane strain, ...)
    geometry.setDim3D()

    # -- Import the geometry .geo and mesh it with GMSH ---
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__),
                     "AGARD445_solidMesh_bis_coarse_opti.geo")
    importer = GmshImport(f, domain)
    importer.execute()

    groupset = domain.getGeometry().getGroupSet()

    # -- Define solid elements and material ---
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push(groupset(179))  #physical group 179 = volumic mesh of the wing
    interactionset.add(app1)

    materset = domain.getMaterialSet()
    materset.define(1, OrthoElastHypoMaterial)
    mater1 = materset(1)
    mater1.put(MASS_DENSITY, 381.98)  #kg/m3
    mater1.put(YOUNG_MODULUS_1, 3.151e9)  #Pa
    mater1.put(YOUNG_MODULUS_2, 0.4162e9)  #Pa
    mater1.put(YOUNG_MODULUS_3, 0.4162e9)  #Pa
    mater1.put(POISSON_RATIO_12, 0.31)  #-
    mater1.put(POISSON_RATIO_13, 0.31)  #-
    mater1.put(POISSON_RATIO_23, 0.31)  #-
    mater1.put(SHEAR_MODULUS_12, 0.4392e9)  #Pa
    mater1.put(SHEAR_MODULUS_13, 0.4392e9)  #Pa
    mater1.put(SHEAR_MODULUS_23, 0.4392e9)  #Pa
    sweepOrtho = pi / 4.0
    #sweepOrtho = 0.0
    mater1.put(ORTHO_AX1_X, sin(sweepOrtho))
    mater1.put(ORTHO_AX1_Y, cos(sweepOrtho))
    mater1.put(ORTHO_AX1_Z, 0.0)
    mater1.put(ORTHO_AX2_X, cos(sweepOrtho))
    mater1.put(ORTHO_AX2_Y, -sin(sweepOrtho))
    mater1.put(ORTHO_AX2_Z, 0.0)

    prp = ElementProperties(Volume3DElement)
    app1.addProperty(prp)
    prp.put(MATERIAL, 1)
    #prp.put(CAUCHYMECHVOLINTMETH,VES_CMVIM_STD)
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_EAS)
    #prp.put(CAUCHYMECHVOLINTMETH,VES_CMVIM_SRI)
    prp.put(PEAS, 1e-11)

    # --- Boundary conditions ---
    loadingset = domain.getLoadingSet()
    #Clamped face of the wing = physical 176
    loadingset.define(groupset(176), Field1D(TX, RE))
    loadingset.define(groupset(176), Field1D(TY, RE))
    loadingset.define(groupset(176), Field1D(TZ, RE))

    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(20)
    mim.setResidualTolerance(p['tolNR'])

    #ti = AlphaGeneralizedTimeIntegration(metafor)
    #metafor.setTimeIntegration(ti)

    # --- Used solver ---
    #Blas.setBlasNumThreads(14)
    #solman = metafor.getSolverManager()
    #solman.setSolver(MUMPSolver())

    vmgr = metafor.getValuesManager()
    vmgr.add(1, DbNodalValueExtractor(groupset(183), Field1D(TZ, RE)), 'LE_dz')
    vmgr.add(2, DbNodalValueExtractor(groupset(184), Field1D(TZ, RE)), 'TE_dz')
    vmgr.add(3, DbNodalValueExtractor(groupset(183), Field1D(TY, AB)), 'LE_Y')
    vmgr.add(4, DbNodalValueExtractor(groupset(184), Field1D(TY, AB)), 'TE_Y')

    return metafor
示例#9
0
def getMetafor(p={}):
    metafor = Metafor()
    p = params(p)

    # -- Geometry container and computation type
    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDim3D()

    # -- Import the geometry
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "models/agard445_solid.geo")
    importer = GmshImport(f, domain)
    importer.execute()
    groupset = domain.getGeometry().getGroupSet()

    # -- Define the material
    matset = domain.getMaterialSet()
    matset.define(1, ElastOrthoHypoMaterial)
    mat = matset(1)
    mat.put(MASS_DENSITY, 381.98)  # [kg/m3]
    mat.put(YOUNG_MODULUS_1, 3.151e9)  # [Pa]
    mat.put(YOUNG_MODULUS_2, 0.4162e9)  # [Pa]
    mat.put(YOUNG_MODULUS_3, 0.4162e9)  # [Pa]
    mat.put(POISSON_RATIO_12, 0.31)  # [-]
    mat.put(POISSON_RATIO_13, 0.31)  # [-]
    mat.put(POISSON_RATIO_23, 0.31)  # [-]
    mat.put(SHEAR_MODULUS_12, 0.4392e9)  # [Pa]
    mat.put(SHEAR_MODULUS_13, 0.4392e9)  # [Pa]
    mat.put(SHEAR_MODULUS_23, 0.4392e9)  # [Pa]
    sweepOrtho = pi / 4.0
    mat.put(ORTHO_AX1_X, sin(sweepOrtho))
    mat.put(ORTHO_AX1_Y, cos(sweepOrtho))
    mat.put(ORTHO_AX1_Z, 0.0)
    mat.put(ORTHO_AX2_X, cos(sweepOrtho))
    mat.put(ORTHO_AX2_Y, -sin(sweepOrtho))
    mat.put(ORTHO_AX2_Z, 0.0)

    # -- Define hexa solid elements
    interactionset = domain.getInteractionSet()
    fieldapp1 = FieldApplicator(1)
    fieldapp1.push(
        groupset(101))  #physical group 'material' = volumic mesh of the wing
    interactionset.add(fieldapp1)
    prp = ElementProperties(Volume3DElement)
    fieldapp1.addProperty(prp)
    prp.put(MATERIAL, 1)
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_EAS)
    prp.put(PEAS, 1e-11)

    # -- Define prism solid elements
    fieldapp2 = FieldApplicator(2)
    fieldapp2.push(groupset(101))
    interactionset.add(fieldapp2)
    prp2 = ElementProperties(PentaVolume3DElement)
    fieldapp2.addProperty(prp2)
    prp2.put(MATERIAL, 1)
    prp2.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_STD)

    # -- Boundary conditions
    loadingset = domain.getLoadingSet()
    # Clamped face
    loadingset.define(groupset(112), Field1D(TX, RE))
    loadingset.define(groupset(112), Field1D(TY, RE))
    loadingset.define(groupset(112), Field1D(TZ, RE))

    # -- Numerical parameters
    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(p['maxIt'])
    mim.setResidualTolerance(p['relTol'])

    # -- for pure Metafor testing
    if 0:
        # -- Time integration
        ti = QuasiStaticTimeIntegration(metafor)
        metafor.setTimeIntegration(ti)

        # -- Value manager
        vmgr = metafor.getValuesManager()
        vmgr.add(1, DbNodalValueExtractor(groupset(121), Field1D(TZ, RE)),
                 'TE_dz')
        vmgr.add(2, DbNodalValueExtractor(groupset(122), Field1D(TZ, RE)),
                 'LE_dz')

        # prescribe node displacement
        fct = PieceWiseLinearFunction()
        fct.setData(0.0, 0.0)
        fct.setData(1.0, 1.0)
        loadingset.define(groupset(122), Field1D(TZ, RE), 0.2, fct)

        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 0.1)
        tsm.setNextTime(1.0, 1, 0.1)

    return metafor
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "MovingSquareCoarse.msh")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push(groupset(5))  # physical group 5: square
    interactionset.add(app1)

    materset = domain.getMaterialSet()
    materset.define(1, ElastHypoMaterial)
    mater1 = materset(1)
    mater1.put(MASS_DENSITY, 1.2)  # [kg/m³]
    mater1.put(
        ELASTIC_MODULUS, 1e9
    )  # [Pa] (Value given by Franci et al. (CMAME, 2016) --> to be verified)
    mater1.put(POISSON_RATIO, 0.49)  # [-]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put(MATERIAL, 1)
    prp.put(GRAVITY_Y, -10.)  # m/s2
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_STD)

    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(10)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    '''ti.setAlphaM(0.)
    ti.setAlphaF(0.)
    ti.setBeta0(0.25)
    ti.setGamma0(0.5)'''
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results
    #vmgr = metafor.getValuesManager()
    #vmgr.add(1, MiscValueExtractor(metafor, EXT_T), 'time')
    #vmgr.add(2, DbNodalValueExtractor(groupset(104), Field1D(TY,RE)), 'dy')

    return metafor
示例#11
0
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "beam.geo")
    importer = GmshImport(f, domain)
    importer.execute()

    groupset = domain.getGeometry().getGroupSet()    

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push( groupset(100) )  # physical group 100
    interactionset.add( app1 )

    materset = domain.getMaterialSet()
    materset.define( 1, ElastHypoMaterial )
    mater1 = materset(1)
    mater1.put(MASS_DENSITY,    100.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 2.5e5)  # [Pa]
    mater1.put(POISSON_RATIO,   0.35)   # [-]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put (MATERIAL, 1)
    prp.put(CAUCHYMECHVOLINTMETH,VES_CMVIM_STD)
    
    # boundary conditions
    loadingset = domain.getLoadingSet()

    #Physical Line(101) - clamped side of the beam
    loadingset.define(groupset(101), Field1D(TX,RE))
    loadingset.define(groupset(101), Field1D(TY,RE))
    
    #Physical Line(102) - free surface of the beam
    
    #Physical Line(103) - upper surface of the beam (for tests only)

    #   - f(x)=x
    def funct(a): return a
    fct1 = PythonOneParameterFunction(funct)
    
    #  - basic pwl function
    fct2 = PieceWiseLinearFunction()
    fct2.setData(0.0, 0.0)
    fct2.setData(0.1, 1.0)
    fct2.setData(0.1+1e-15, 0.0)
    fct2.setData(1e10, 0.0)    


    gr = groupset(103)
    if p['bctype']=='pressure':
        trac1 = LoadingInteraction(2)
        trac1.push(gr)
        interactionset.add(trac1)
        prp = ElementProperties(Traction2DElement)
        prp.put(PRESSURE, -0.1)
        prp.depend(PRESSURE, fct2, Field1D(TM,RE))
        trac1.addProperty(prp)
    elif p['bctype']=='deadload':
        loadingset.define(gr, Field1D(TY,GF1), -1e-4, fct2)
    elif p['bctype']=='pydeadload1':
    
        #  - python fct
        def f(time):
            val=0
            t1=0.1
            if(time<=0.1):
               val=1.0/t1*time
            else:
               val=0.0
            #print "f(%f)=%f" % (time,val)
            return val
        fct3 = PythonOneParameterFunction(f)    
    
        loadingset.define(gr, Field1D(TY,GF1), -1e-4, fct3) 
        
    elif p['bctype']=='pydeadloads':
        # calculate xmin-xmax
        xmin=1e10
        xmax=-1e10
        nbnods=gr.getNumberOfMeshPoints()
        for i in range(nbnods):
            node = gr.getMeshPoint(i)
            px = gr.getMeshPoint(i).getPos0().get1()
            if px<xmin: xmin=px
            if px>xmax: xmax=px
        print "(xmin,xmax)=(%f,%f)" % (xmin,xmax)
        L = xmax-xmin
        print "L=%f" % L
        #raw_input()
        
        class LObj:
            def __init__(self, px, L):
                self.px=px
                self.L=L
            def __call__(self, time):
                import math
                return time*math.sin(8*math.pi*self.px/self.L)
            
        for i in range(nbnods):
            node = gr.getMeshPoint(i)
            px = gr.getMeshPoint(i).getPos0().get1()
            #print "creating load on ", node
            obj = LObj(px-xmin, L)
            fct4 = PythonOneParameterFunction(obj)
            loadingset.define(node, Field1D(TY,GF1), -3e-4, fct4)
    elif p['bctype']=='mpiloads':
        pass    
    else:
        raise Exception("Unknown bctype '%s'" % p['bctype'])
    
    # Time integration
    tsm = metafor.getTimeStepManager()
    tsm.setInitialTime(0.0, 0.02)
    tsm.setNextTime(p['tend'], 1, p['dtmax'])

    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(4)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # results
    vmgr = metafor.getValuesManager()
    vmgr.add(1, MiscValueExtractor(metafor, EXT_T), 'time')
    vmgr.add(2, DbNodalValueExtractor(groupset(104), Field1D(TY,RE)), 'dy')

    # plots
    try:
        plot1 = DataCurveSet()
        vmgr = metafor.getValuesManager()
        plot1.add(VectorDataCurve(1, vmgr.getDataVector(1), vmgr.getDataVector(2)))
        win1 = VizWin()
        win1.add(plot1)
        metafor.addObserver(win1)
    except:
        pass


    return metafor
示例#12
0
文件: beam.py 项目: rboman/fsi
def getMetafor(p={}):
    global metafor
    if metafor: return metafor
    metafor = Metafor()

    p = params(p)

    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # import .geo
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "beam.geo")
    importer = GmshImport(f, domain)
    importer.execute2D()

    groupset = domain.getGeometry().getGroupSet()    

    # solid elements / material
    interactionset = domain.getInteractionSet()

    app1 = FieldApplicator(1)
    app1.push( groupset(100) )  # physical group 100
    interactionset.add( app1 )

    materset = domain.getMaterialSet()
    materset.define( 1, ElastHypoMaterial )
    mater1 = materset(1)
    mater1.put(MASS_DENSITY,    100.0)  # [kg/m³]
    mater1.put(ELASTIC_MODULUS, 2.5e5)  # [Pa]
    mater1.put(POISSON_RATIO,   0.35)   # [-]

    prp = ElementProperties(Volume2DElement)
    app1.addProperty(prp)
    prp.put (MATERIAL, 1)
    prp.put(CAUCHYMECHVOLINTMETH,VES_CMVIM_STD)
    
    # boundary conditions
    loadingset = domain.getLoadingSet()

    #Physical Line(101) - clamped side of the beam
    loadingset.define(groupset(101), Field1D(TX,RE))
    loadingset.define(groupset(101), Field1D(TY,RE))
    #Physical Line(102) - free surface of the beam  
    #Physical Line(103) - upper surface of the beam (for tests only)


    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(4)
    mim.setResidualTolerance(p['tolNR'])

    ti = AlphaGeneralizedTimeIntegration(metafor)
    metafor.setTimeIntegration(ti)

    # visu
    if 0:
        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 1.0)
        tsm.setNextTime(1.0, 1, 1.0)

    # results
    #vmgr = metafor.getValuesManager()
    #vmgr.add(1, MiscValueExtractor(metafor, EXT_T), 'time')
    #vmgr.add(2, DbNodalValueExtractor(groupset(104), Field1D(TY,RE)), 'dy')

    return metafor
示例#13
0
def getMetafor(p={}):
    metafor = Metafor()
    p = params(p)

    # -- Geometry container and computation type
    domain = metafor.getDomain()
    geometry = domain.getGeometry()
    geometry.setDimPlaneStrain(1.0)

    # -- Import the geometry
    from toolbox.gmsh import GmshImport
    f = os.path.join(os.path.dirname(__file__), "models/diamond_solid.geo")
    importer = GmshImport(f, domain)
    importer.execute2D()
    groupset = domain.getGeometry().getGroupSet()

    # -- Define the material
    matset = domain.getMaterialSet()
    matset.define(1, ElastHypoMaterial)
    mat1 = matset(1)
    mat1.put(MASS_DENSITY, 100.0)  # [kg/m³]
    mat1.put(ELASTIC_MODULUS, 1e8)  # [Pa]
    mat1.put(POISSON_RATIO, 0.35)  # [-]

    # -- Define quad solid elements
    interactionset = domain.getInteractionSet()
    fieldapp1 = FieldApplicator(1)
    fieldapp1.push(
        groupset(121))  #physical group 'material' = volumic mesh of the wing
    interactionset.add(fieldapp1)
    prp = ElementProperties(Volume2DElement)
    fieldapp1.addProperty(prp)
    prp.put(MATERIAL, 1)
    prp.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_STD)

    # -- Define tri solid elements
    fieldapp2 = FieldApplicator(2)
    fieldapp2.push(groupset(121))
    interactionset.add(fieldapp2)
    prp2 = ElementProperties(TriangleVolume2DElement)
    fieldapp2.addProperty(prp2)
    prp2.put(MATERIAL, 1)
    prp2.put(CAUCHYMECHVOLINTMETH, VES_CMVIM_STD)

    # -- Boundary conditions
    loadingset = domain.getLoadingSet()
    # Clamped node
    loadingset.define(groupset(103), Field1D(TX, RE))
    loadingset.define(groupset(103), Field1D(TY, RE))
    # Supported node
    loadingset.define(groupset(102), Field1D(TX, RE))

    # -- Numerical parameters
    mim = metafor.getMechanicalIterationManager()
    mim.setMaxNbOfIterations(p['maxIt'])
    mim.setResidualTolerance(p['relTol'])

    # -- for pure Metafor testing
    if 0:
        # -- Time integration
        ti = QuasiStaticTimeIntegration(metafor)
        metafor.setTimeIntegration(ti)

        # -- Value manager
        vmgr = metafor.getValuesManager()
        vmgr.add(1, DbNodalValueExtractor(groupset(101), Field1D(TY, RE)),
                 'TE_dy')

        # prescribe node displacement
        fct = PieceWiseLinearFunction()
        fct.setData(0.0, 0.0)
        fct.setData(1.0, 1.0)
        loadingset.define(groupset(101), Field1D(TY, RE), 0.2, fct)

        tsm = metafor.getTimeStepManager()
        tsm.setInitialTime(0.0, 0.1)
        tsm.setNextTime(1.0, 1, 0.1)

    return metafor