generator = GenerateRatioSphere3d(drCenter,
                                  drRatio,
                                  rho=rhoprofile,
                                  rmin=rmin,
                                  rmax=rmax,
                                  thetamin=thetamin,
                                  thetamax=thetamax,
                                  phi=phi,
                                  ntheta=ntheta,
                                  center=(xcenter, ycenter, zcenter),
                                  distributionType=distributionType,
                                  nNodePerh=nPerh,
                                  SPH=SPH)
distributeNodes((nodes, generator))

#-------------------------------------------------------------------------------
# Drop a viz file for inspection.
#-------------------------------------------------------------------------------
Hfield = nodes.Hfield()
HfieldInv = SymTensorField("H inverse", nodes)
for i in xrange(nodes.numNodes):
    HfieldInv[i] = SymTensor(Hfield[i].Inverse())
vizfile = siloPointmeshDump(
    baseName="ratio_sphere_test_" + distributionType,
    baseDirectory="ratio_sphere_test_" + distributionType,
    fields=[
        nodes.massDensity(),
        nodes.mass(),
        nodes.velocity(),
Exemple #2
0
                                               rmin=rmin,
                                               rmax=rmax,
                                               nNodePerh=nPerh,
                                               SPH=SPH)
    else:
        generator = GenerateNodesMatchingProfile2d(n,
                                                   diskProfile,
                                                   rmin=rmin,
                                                   rmax=rmax,
                                                   thetaMin=thetaMin,
                                                   thetaMax=thetaMax,
                                                   nNodePerh=nPerh)
    n1 = generator.globalNumNodes()

    print "Distributing nodes amongst processors."
    distributeNodes((diskNodes, generator))
    output('mpi.reduce(diskNodes.numInternalNodes, mpi.MIN)')
    output('mpi.reduce(diskNodes.numInternalNodes, mpi.MAX)')
    output('mpi.reduce(diskNodes.numInternalNodes, mpi.SUM)')

    # Loop over the nodes, and set the specific energies and velocities.
    for nodes in [diskNodes]:
        for i in xrange(nodes.numInternalNodes):
            r = nodes.positions()[i].magnitude()
            runit = nodes.positions()[i].unitVector()
            vunit = Vector(-runit.y, runit.x)
            vt = diskProfile.vt(r)
            nodes.specificThermalEnergy()[i] = diskProfile.eps(r)
            nodes.velocity()[i] = Vector(vt * vunit.x, vt * vunit.y)

#-------------------------------------------------------------------------------
Exemple #3
0
    nNodePerh=nPerh)

generatorMantle = MultiScaleMedialGenerator2d(
    n=nmantle,
    rho=rhomantle,
    gradrho=gradrhomantle,  # This is not necessary, but we'll use it if provided
    boundary=boundaryMantle,
    holes=[boundaryCore],
    centroidFrac=centroidFrac,
    maxIterationsPerStage=maxIterations,
    fracTol=fracTol,
    tessellationFileName="test_medial2d_mantle_maxiter=%i_tol=%g" %
    (maxIterations, fracTol),
    nNodePerh=nPerh)

distributeNodes((nodesCore, generatorCore), (nodesMantle, generatorMantle))

#-------------------------------------------------------------------------------
# Drop a viz file for inspection.
#-------------------------------------------------------------------------------
db = DataBase()
for nodes in nodeSet:
    db.appendNodeList(nodes)
vizfile = siloPointmeshDump(
    baseName="test_medial_maxiter=%i_tol=%g" % (maxIterations, fracTol),
    baseDirectory="test_medial2d_sphere_density",
    fieldLists=[
        db.fluidMassDensity, db.fluidMass, db.fluidVelocity,
        db.fluidSpecificThermalEnergy, db.fluidHfield
    ])
    fracTol=fracTol,
    #tessellationFileName = "test_medial_nodes3_maxiter=%i_tol=%g" % (maxIterations, fracTol),
    nNodePerh=nPerh)

print "Generator 4"
generator4 = MedialGenerator2d(
    n=n4,
    rho=0.1,
    boundary=outerBox,
    holes=[Hboundary, outerCircle],
    maxIterations=maxIterations,
    fracTol=fracTol,
    #tessellationFileName = "test_medial_nodes4_maxiter=%i_tol=%g" % (maxIterations, fracTol),
    nNodePerh=nPerh)

distributeNodes((nodes1, generator1), (nodes2, generator2),
                (nodes3, generator3), (nodes4, generator4))

#-------------------------------------------------------------------------------
# Drop a viz file for inspection.
#-------------------------------------------------------------------------------
Hfield = nodes.Hfield()
HfieldInv = SymTensorField("H inverse", nodes)
domainField = IntField("Domain", nodes)
for i in xrange(nodes.numNodes):
    HfieldInv[i] = Hfield[i].Inverse()
    domainField[i] = mpi.rank
vizfile = siloPointmeshDump(
    baseName="test_medial_maxiter=%i_tol=%g" % (maxIterations, fracTol),
    baseDirectory="test_medial",
    fields=([x.massDensity() for x in nodeSet] + [x.mass() for x in nodeSet] +
            [x.velocity()
Exemple #5
0
#-------------------------------------------------------------------------------
# Generate them nodes.
#-------------------------------------------------------------------------------
generator1 = AsciiFileNodeGenerator3D(filename=star1,
                                      materialName="Default",
                                      nNodePerh=nPerh,
                                      nodes=nodes1)

#msum = mpi.allreduce(sum(generator1.m + [0.0]), mpi.SUM)
#assert msum > 0.0
#print "Found star1 mass = %g." % (msum)

#ehash1,eheps1 = hashEnergy(generator1)

distributeNodes((nodes1, generator1))

eps = nodes1.specificThermalEnergy()
for i in xrange(nodes1.numInternalNodes):
    eps[i] = generator1.eps[i]

#energyHash(nodes1,ehash1,eheps1)

#-------------------------------------------------------------------------------
# Construct a DataBase to hold our node list
#-------------------------------------------------------------------------------
db = DataBase3d()
output("db")
output("db.appendNodeList(nodes1)")
output("db.numNodeLists")
output("db.numFluidNodeLists")
Exemple #6
0
def rhofunc(posi):
    return rho0 / max(posi.magnitude(), 1e-6)


gen = GenerateNodeDistribution3d(nx,
                                 nx,
                                 nx,
                                 rho=rhofunc,
                                 distributionType="lattice",
                                 xmin=(-R0, -R0, -R0),
                                 xmax=(R0, R0, R0),
                                 rmin=0.0,
                                 rmax=R0,
                                 nNodePerh=nPerh,
                                 SPH=not asph)
distributeNodes((nodes, gen))

# Force the mass to be exactly the desired total.
mass = nodes.mass()
M1 = mass.sumElements()
for i in xrange(nodes.numInternalNodes):
    mass[i] *= M0 / M1

print "Num internal nodes for ", nodes.name, " : ", mpi.allreduce(
    nodes.numInternalNodes, mpi.SUM)
print "Total mass: ", mass.sumElements()

# Set specific thermal energy.
eps0 = 0.05
eps = nodes.specificThermalEnergy()
for i in xrange(nodes.numInternalNodes):
Exemple #7
0
                                            thetaMax=thetaMax,
                                            nNodePerh=nPerh)
n1 = generator1.globalNumNodes()
generator2 = GenerateNodesMatchingProfile2d(n * 0.75,
                                            diskProfile2,
                                            rmin=rmax * 0.27,
                                            rmax=rmax,
                                            thetaMin=thetaMin,
                                            thetaMax=thetaMax,
                                            nNodePerh=nPerh,
                                            m0=generator1.m0)
n1 = generator1.globalNumNodes()
n2 = generator2.globalNumNodes()

print "Distributing nodes amongst processors."
distributeNodes((diskNodes1, generator1), (diskNodes2, generator2))
output('mpi.reduce(diskNodes1.numInternalNodes, mpi.MIN)')
output('mpi.reduce(diskNodes1.numInternalNodes, mpi.MAX)')
output('mpi.reduce(diskNodes1.numInternalNodes, mpi.SUM)')

# Loop over the nodes, and set the specific energies and velocities.
for nodes in [diskNodes1, diskNodes2]:
    for i in xrange(nodes.numInternalNodes):
        r = nodes.positions()[i].magnitude()
        #nodes.specificThermalEnergy()[i] = diskProfile.eps(r)

#-------------------------------------------------------------------------------
# Set an external pressure on the disk equivalent to the pressure at the
# cutoff radius.
#-------------------------------------------------------------------------------
externalPressure = eos2.polytropicConstant * diskProfile2.rho(
Exemple #8
0
    if not reflect:
        generator2 = GenerateNodeDistribution3d(nr, nz, 0,
                                                rho = rho0,
                                                distributionType = "cylindrical",
                                                rmin = rmin,
                                                rmax = rmax,
                                                thetamin = 0.0,
                                                thetamax = 2.0*pi,
                                                zmin = -zmax,
                                                zmax = -zmin,
                                                nNodePerh = nPerh,
                                                SPH = not asph)
        stuff2distribute.append((nodes2, generator2))

#...............................................................................
distributeNodes(*tuple(stuff2distribute))
for n in nodeSet:
    output('n.name')
    output('   mpi.reduce(n.numInternalNodes, mpi.MIN)')
    output('   mpi.reduce(n.numInternalNodes, mpi.MAX)')
    output('   mpi.reduce(n.numInternalNodes, mpi.SUM)')
del n

#-------------------------------------------------------------------------------
# Set initial conditions
#-------------------------------------------------------------------------------
if geometry in ("2d", "RZ"):
    v0 = Vector(-vz0, 0.0)
else:
    v0 = Vector(0.0, 0.0, -vz0)
nodes1.specificThermalEnergy(ScalarField("tmp", nodes1, eps0))
Exemple #9
0
            offset=(x0He, y0He),
            nNodePerh=nPerh,
            SPH=(HydroConstructor == SPHHydro))
        generatorAir = CompositeNodeDistribution(generatorAir1,
                                                 generatorAir1_interface)
    generatorAir2 = GenerateNodeDistribution2d(
        nxAir2,
        nyAir2,
        airDensity,
        distributionType="lattice",
        xmin=(x0Air2, y0),
        xmax=(x1Air2, y1),
        nNodePerh=nPerh,
        SPH=(HydroConstructor == SPHHydro))

    distributeNodes((nodesAir1, generatorAir), (nodesHe, generatorHe),
                    (nodesAir2, generatorAir2))
    for nodes in nodeSet:
        print "Num internal nodes for ", nodes.name, " : ", mpi.allreduce(
            nodes.numInternalNodes, mpi.SUM)

    # Set initial conditions.
    nodesAir1.specificThermalEnergy(ScalarField("eps", nodesAir1, airEnergy))
    nodesAir2.specificThermalEnergy(
        ScalarField("eps", nodesAir2, airHighEnergy))
    nodesHe.specificThermalEnergy(ScalarField("eps", nodesHe, HeEnergy))

#-------------------------------------------------------------------------------
# Construct a DataBase to hold our node list
#-------------------------------------------------------------------------------
db = DataBase()
output("db")
Exemple #10
0
    fracTol=fracTol,
    #tessellationFileName = "test_medial_nodes1_maxiter=%i_tol=%g" % (maxIterations, fracTol),
    nNodePerh=nPerh)

print "Generator 2"
generator2 = MedialGenerator3d(
    n=n2,
    rho=1.0,
    boundary=outerBoundary,
    holes=[innerBoundary],
    maxIterations=maxIterations,
    fracTol=fracTol,
    #tessellationFileName = "test_medial_nodes2_maxiter=%i_tol=%g" % (maxIterations, fracTol),
    nNodePerh=nPerh)

distributeNodes((nodes1, generator1), (nodes2, generator2))

#-------------------------------------------------------------------------------
# Drop a viz file for inspection.
#-------------------------------------------------------------------------------
Hfield = nodes.Hfield()
HfieldInv = SymTensorField("H inverse", nodes)
for i in xrange(nodes.numNodes):
    HfieldInv[i] = Hfield[i].Inverse()
vizfile = siloPointmeshDump(
    baseName="test_medial3d_maxiter=%i_tol=%g" % (maxIterations, fracTol),
    baseDirectory="test_medial3d",
    fields=([x.massDensity() for x in nodeSet] + [x.mass() for x in nodeSet] +
            [x.velocity()
             for x in nodeSet] + [x.specificThermalEnergy() for x in nodeSet] +
            [x.Hfield() for x in nodeSet]))