예제 #1
0
def testEuler(order=9):
    """Test euler formulations, with different flux types, slopelimiters, and curved integrations"""
    import globalVar2D as glb
    glb.globalInit()
    import mesh2D

    # Order of polynomials used for approximation
    glb.N = order

    # Define Simulation Data
    fluxType = 'HLL'
    gssState = 'on'
    cubState = 'on'
    limiter = 'on'
    simData = [fluxType, gssState, cubState, limiter]

    # Read in Mesh
    #filename = 'Grid/neu/Euler2D/vortexA04.neu'
    #InitialSolution = isentropicVortexIC2D
    #ExactSolution   = isentropicVortexIC2D
    #BCSolution      = isentropicVortexBC2D

    # Read in Mesh
    filename = 'Grid/msh/2Dcyl.msh'
    #filename = 'Grid/neu/Euler2D/fstepA001.neu'
    InitialSolution = fwdStepIC2D
    ExactSolution = fwdStepIC2D
    BCSolution = fwdStepBC2D

    # read mesh from file
    [glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV,
     glb.BCType] = mesh2D.readGmsh(filename)
    #[glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV, glb.BCType] = mesh2D.createBC(filename)

    # set up nodes and basic operations
    execfile("initiate2D.py")

    # turn cylinders into walls
    # There are no curved elements in isentropic vortex case
    ids = numpy.nonzero(glb.BCType == glb.Cyl)
    glb.BCType[ids] = glb.Wall
    glb.straight = range(glb.K)

    functions2D.BuildBCMaps2D()

    # compute initial condition
    Q = InitialSolution(glb.x, glb.y, 0.)

    # Solve Problem
    FinalTime = 1.0
    Q = Euler2D(Q, FinalTime, ExactSolution, BCSolution, simData)

    # Calculate error
    err = Q - ExactSolution(glb.x, glb.y, FinalTime)
    L2Err = [(numpy.average((err[:, :, i]**2).flatten()))**0.5
             for i in range(4)]
    return (Q, L2Err)
예제 #2
0
def testEuler(order=9):
	"""Test euler formulations, with different flux types, slopelimiters, and curved integrations"""
	import globalVar2D as glb
	glb.globalInit()
	import mesh2D

	# Order of polynomials used for approximation 
	glb.N = order
	
	# Define Simulation Data
	fluxType = 'HLL'
	gssState = 'on'
	cubState = 'on'
	limiter = 'on'
	simData = [fluxType,gssState,cubState,limiter]

	# Read in Mesh
	#filename = 'Grid/neu/Euler2D/vortexA04.neu'
	#InitialSolution = isentropicVortexIC2D
	#ExactSolution   = isentropicVortexIC2D
	#BCSolution      = isentropicVortexBC2D
	
	# Read in Mesh
	filename = 'Grid/msh/2Dcyl.msh'
	#filename = 'Grid/neu/Euler2D/fstepA001.neu'
	InitialSolution = fwdStepIC2D
	ExactSolution   = fwdStepIC2D
	BCSolution      = fwdStepBC2D

	# read mesh from file
	[glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV, glb.BCType] = mesh2D.readGmsh(filename)
	#[glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV, glb.BCType] = mesh2D.createBC(filename)
	
	# set up nodes and basic operations
	execfile("initiate2D.py")
	
	# turn cylinders into walls
	# There are no curved elements in isentropic vortex case
	ids = numpy.nonzero(glb.BCType==glb.Cyl) 
	glb.BCType[ids] = glb.Wall
	glb.straight=range(glb.K)
	
	functions2D.BuildBCMaps2D()
	
	# compute initial condition
	Q = InitialSolution(glb.x, glb.y, 0.)
	
	# Solve Problem
	FinalTime = 1.0
	Q = Euler2D(Q, FinalTime, ExactSolution, BCSolution, simData)
	
	# Calculate error
	err=Q-ExactSolution(glb.x,glb.y,FinalTime)
	L2Err=[(numpy.average((err[:,:,i]**2).flatten()))**0.5 for i in range(4)]
	return(Q,L2Err)
예제 #3
0
def testBasicEuler(order=9):
    """Driver script for solving the 2D Euler  Isentropic vortex equations"""
    import globalVar2D as glb
    glb.globalInit()
    import mesh2D

    # Order of polynomials used for approximation
    glb.N = order

    # Read in Mesh
    filename = 'Grid/neu/Euler2D/vortexA04.neu'
    InitialSolution = isentropicVortexIC2D
    ExactSolution = isentropicVortexIC2D
    BCSolution = isentropicVortexBC2D

    # read mesh from file
    [glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV,
     glb.BCType] = mesh2D.createBC(filename)

    # set up nodes and basic operations
    execfile("initiate2D.py")

    # turn cylinders into walls
    ids = numpy.nonzero(glb.BCType == glb.Cyl)
    glb.BCType[ids] = glb.Wall

    functions2D.BuildBCMaps2D()

    # compute initial condition
    Q = InitialSolution(glb.x, glb.y, 0.)

    # Solve Problem
    FinalTime = 1.0
    Q = basicEulerSolve(Q, FinalTime, BCSolution)

    # Calculate error
    err = Q - ExactSolution(glb.x, glb.y, FinalTime)
    L2Err = [(numpy.average((err[:, :, i]**2).flatten()))**0.5
             for i in range(4)]

    return (Q, L2Err)
예제 #4
0
def testBasicEuler(order=9):
	"""Driver script for solving the 2D Euler  Isentropic vortex equations"""
	import globalVar2D as glb
	glb.globalInit()
	import mesh2D

	# Order of polynomials used for approximation 
	glb.N = order
	
	# Read in Mesh
	filename = 'Grid/neu/Euler2D/vortexA04.neu'
	InitialSolution = isentropicVortexIC2D
	ExactSolution   = isentropicVortexIC2D
	BCSolution      = isentropicVortexBC2D

	# read mesh from file
	[glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV, glb.BCType] = mesh2D.createBC(filename)
	
	# set up nodes and basic operations
	execfile("initiate2D.py")
	
	# turn cylinders into walls
	ids = numpy.nonzero(glb.BCType==glb.Cyl) 
	glb.BCType[ids] = glb.Wall
	
	functions2D.BuildBCMaps2D()
	
	# compute initial condition
	Q = InitialSolution(glb.x, glb.y, 0.)
	
	# Solve Problem
	FinalTime = 1.0
	Q = basicEulerSolve(Q, FinalTime, BCSolution)
	
	# Calculate error
	err=Q-ExactSolution(glb.x,glb.y,FinalTime)
	L2Err=[(numpy.average((err[:,:,i]**2).flatten()))**0.5 for i in range(4)]
	
	return(Q,L2Err)
예제 #5
0
# Codes for Nodal Discontinuous Galerkin Methods
#Written by: Achyut Panchal
# Aerospace Engineering, Indian Institute of Technology Bombay
# The codes are inspired , and examples are followed from reference
#Jan S. Hesthaven. Nodal Discontinuous Galerkin Methods. Springer, 2008

# Driver script for solving 2D advection
# This currently does not work properly! Work on boundary condition implementation
import globalVar2D as glb
import math
import numpy
import matplotlib.pyplot as plt
import functions2D

glb.globalInit()
# Polynomial order used for approximation
glb.N = 10

# Read in Mesh
import mesh2D
[glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV,
 glb.BCType] = mesh2D.create('Grid/neu/Maxwell2D/Maxwell1.neu')

# Initialize solver and construct grid and metric
execfile("initiate2D.py")

# Set initial conditions
u = numpy.vectorize(math.sin)(math.pi * glb.x) * numpy.vectorize(math.sin)(
    math.pi * glb.y)
#u=numpy.array([(abs(glb.x.flatten()[i])<0.1) and (abs(glb.y.flatten()[i])<0.1) for i in range(len(glb.x.flatten()))]).reshape(glb.x.shape)
uinit = u.copy()
예제 #6
0
# Codes for Nodal Discontinuous Galerkin Methods
#Written by: Achyut Panchal 
# Aerospace Engineering, Indian Institute of Technology Bombay
# The codes are inspired , and examples are followed from reference
#Jan S. Hesthaven. Nodal Discontinuous Galerkin Methods. Springer, 2008

# Driver script for solving 2D advection
# This currently does not work properly! Work on boundary condition implementation
import globalVar2D as glb
import math
import numpy
import matplotlib.pyplot as plt
import functions2D

glb.globalInit()
# Polynomial order used for approximation 
glb.N = 10

# Read in Mesh
import mesh2D
[glb.Nv, glb.VX, glb.VY, glb.K, glb.EToV, glb.BCType] = mesh2D.create('Grid/neu/Maxwell2D/Maxwell1.neu')

# Initialize solver and construct grid and metric
execfile("initiate2D.py")

# Set initial conditions
u=numpy.vectorize(math.sin)(math.pi*glb.x)*numpy.vectorize(math.sin)(math.pi*glb.y)
#u=numpy.array([(abs(glb.x.flatten()[i])<0.1) and (abs(glb.y.flatten()[i])<0.1) for i in range(len(glb.x.flatten()))]).reshape(glb.x.shape)
uinit=u.copy()
functions2D.plot2D(uinit)