Skip to content

Commit

Permalink
Spherical Grid, Interpolation
Browse files Browse the repository at this point in the history
  • Loading branch information
OsKnoth committed Jan 19, 2024
1 parent 3defbf4 commit d22545b
Show file tree
Hide file tree
Showing 31 changed files with 982 additions and 231 deletions.
50 changes: 0 additions & 50 deletions AA

This file was deleted.

155 changes: 155 additions & 0 deletions Examples/testCartGrid.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import CGDycore:
Thermodynamics, Examples, Parallels, Models, Grids, Outputs, Integration, GPU, DyCore
using MPI
using Base
using CUDA
using AMDGPU
using Metal
using KernelAbstractions
using StaticArrays
using ArgParse
using MPI


# Model
parsed_args = DyCore.parse_commandline()
Problem = parsed_args["Problem"]
ProfRho = parsed_args["ProfRho"]
ProfTheta = parsed_args["ProfTheta"]
PertTh = parsed_args["PertTh"]
ProfVel = parsed_args["ProfVel"]
ProfpBGrd = parsed_args["ProfpBGrd"]
ProfRhoBGrd = parsed_args["ProfRhoBGrd"]
HorLimit = parsed_args["HorLimit"]
Upwind = parsed_args["Upwind"]
Damping = parsed_args["Damping"]
Relax = parsed_args["Relax"]
StrideDamp = parsed_args["StrideDamp"]
NumV = parsed_args["NumV"]
NumTr = parsed_args["NumTr"]
BoundaryWE = parsed_args["BoundaryWE"]
BoundarySN = parsed_args["BoundarySN"]
BoundaryBT = parsed_args["BoundaryBT"]
Thermo = parsed_args["Thermo"]
RefProfile = parsed_args["RefProfile"]
Profile = parsed_args["Profile"]
Curl = parsed_args["Curl"]
ModelType = parsed_args["ModelType"]
Equation = parsed_args["Equation"]
Microphysics = parsed_args["Microphysics"]
TypeMicrophysics = parsed_args["TypeMicrophysics"]
RelCloud = parsed_args["RelCloud"]
Rain = parsed_args["Rain"]
#Orography
TopoS = parsed_args["TopoS"]
P1 = parsed_args["P1"]
P2 = parsed_args["P2"]
P3 = parsed_args["P3"]
P4 = parsed_args["P4"]

# Parallel
Decomp = parsed_args["Decomp"]
SimDays = parsed_args["SimDays"]
SimHours = parsed_args["SimHours"]
SimMinutes = parsed_args["SimMinutes"]
SimSeconds = parsed_args["SimSeconds"]
SimTime = parsed_args["SimTime"]
dtau = parsed_args["dtau"]
IntMethod = parsed_args["IntMethod"]
Table = parsed_args["Table"]
GridType = parsed_args["GridType"]
Coriolis = parsed_args["Coriolis"]
CoriolisType = parsed_args["CoriolisType"]
Source = parsed_args["Source"]
VerticalDiffusion = parsed_args["VerticalDiffusion"]
JacVerticalDiffusion = parsed_args["JacVerticalDiffusion"]
JacVerticalAdvection = parsed_args["JacVerticalAdvection"]
VerticalDiffusionMom = parsed_args["VerticalDiffusionMom"]
SurfaceFlux = parsed_args["SurfaceFlux"]
SurfaceFluxMom = parsed_args["SurfaceFluxMom"]
# Grid
nx = parsed_args["nx"]
ny = parsed_args["ny"]
nz = parsed_args["nz"]
H = parsed_args["H"]
Stretch = parsed_args["Stretch"]
StretchType = parsed_args["StretchType"]
OrdPoly = parsed_args["OrdPoly"]
Lx = parsed_args["Lx"]
Ly = parsed_args["Ly"]
x0 = parsed_args["x0"]
y0 = parsed_args["y0"]
# Viscosity
HyperVisc = parsed_args["HyperVisc"]
HyperDCurl = parsed_args["HyperDCurl"]
HyperDGrad = parsed_args["HyperDGrad"]
HyperDDiv = parsed_args["HyperDDiv"]
# Output
PrintDays = parsed_args["PrintDays"]
PrintHours = parsed_args["PrintHours"]
PrintMinutes = parsed_args["PrintMinutes"]
PrintSeconds = parsed_args["PrintSeconds"]
PrintTime = parsed_args["PrintTime"]
PrintStartTime = parsed_args["PrintStartTime"]
# Device
Device = parsed_args["Device"]
GPUType = parsed_args["GPUType"]
FloatTypeBackend = parsed_args["FloatTypeBackend"]
NumberThreadGPU = parsed_args["NumberThreadGPU"]

MPI.Init()

if Device == "CPU" || Device == "CPU_P"
backend = CPU()
elseif Device == "GPU" || Device == "GPU_P"
if GPUType == "CUDA"
backend = CUDABackend()
CUDA.allowscalar(false)
CUDA.device!(MPI.Comm_rank(MPI.COMM_WORLD))
elseif GPUType == "AMD"
backend = ROCBackend()
AMDGPU.allowscalar(false)
elseif GPUType == "Metal"
backend = MetalBackend()
Metal.allowscalar(true)
end
else
backend = CPU()
end

if FloatTypeBackend == "Float64"
FTB = Float64
elseif FloatTypeBackend == "Float32"
FTB = Float32
else
@show "False FloatTypeBackend"
stop
end
Param = Examples.Parameters(FTB,Problem)

KernelAbstractions.synchronize(backend)

OrdPolyZ=1
nx = 10
ny = 20
nz = 10
Lx = 1.0
Ly = 1.0
x0 = 0.0
y0 = 0.0

Boundary = Grids.Boundary()
Boundary.WE = ""
Boundary.SN = ""


GridCart = Grids.CartGrid(backend,FTB,nx,ny,Lx,Ly,x0,y0,Grids.OrientFaceCart,Boundary,nz)
@show GridCart.NumFaces
vtkSkeletonMeshCart = Outputs.vtkStruct{Float64}(backend,GridCart)
c = ones(FTB,GridCart.NumFaces)
for i = 1 : GridCart.NumFaces
c[i] = i
end
Outputs.vtkSkeleton(vtkSkeletonMeshCart,"Cart", 1, 1,c)


81 changes: 34 additions & 47 deletions Examples/testInterpolateMesh.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import CGDycore:
Examples, Parallels, Models, Grids, Outputs, Integration, GPU, DyCore
Examples, Parallels, Models, Grids, Outputs, Integration, GPU, DyCore
using MPI
using Base
using CUDA
Expand All @@ -11,23 +11,7 @@ using ArgParse
using MPI


function main()
FTB = Float64
Problem = "AdvectionSphereSlottedCylinder"
Param = Examples.Parameters(FTB,Problem)
Phys=DyCore.PhysParameters{FTB}()
Profile = Examples.DivergentSphereExample()(Param,Phys)

nz = 1
nPanel = 30
RefineLevel = 5
RadEarth = 1.0
FT = Float64
backend = CPU()

SrcGrid = Grids.CubedGrid(backend,FT,nPanel,Grids.OrientFaceSphere,RadEarth,nz)
# DestGrid = Grids.TriangularGrid(backend,FT,RefineLevel,RadEarth,nz)
DestGrid = Grids.DelaunayGrid(backend,FT,RefineLevel,RadEarth,nz)
function Interpolate(SrcGrid,DestGrid,Profile,Example)

Inter = Grids.interpolate(SrcGrid,DestGrid)
#Test
Expand All @@ -47,35 +31,38 @@ function main()
end
c2 = Inter * c1
vtkSkeletonMeshSrc = Outputs.vtkStruct{Float64}(backend,SrcGrid)
Outputs.vtkSkeleton(vtkSkeletonMeshSrc,"Source1CuSp", 1, 1, c1)
Outputs.vtkSkeleton(vtkSkeletonMeshSrc,Example*"Source", 1, 1, c1)
vtkSkeletonMeshDest = Outputs.vtkStruct{Float64}(backend,DestGrid)
Outputs.vtkSkeleton(vtkSkeletonMeshDest,"Destination1Del", 1, 1, c2)
Outputs.vtkSkeleton(vtkSkeletonMeshDest,Example*"Destin", 1, 1, c2)
end

nPanelSrc = 40
nPanelDest = 47
SrcGrid = Grids.CubedGrid(backend,FT,nPanelSrc,Grids.OrientFaceSphere,RadEarth,nz)
DestGrid = Grids.CubedGrid(backend,FT,nPanelDest,Grids.OrientFaceSphere,RadEarth,nz)
FTB = Float64
backend = CPU()

Inter = Grids.interpolate(SrcGrid,DestGrid)
#Test
c1 = ones(SrcGrid.NumFaces)
c2 = Inter * c1
@show maximum(c2)
@show minimum(c2)
for iFD = 1 : DestGrid.NumFaces
if c2[iFD] < 0.9
@show iFD,c2[iFD]
end
end
for iFS = 1 : SrcGrid.NumFaces
Mid = SVector{3}(SrcGrid.Faces[iFS].Mid.x,SrcGrid.Faces[iFS].Mid.y,SrcGrid.Faces[iFS].Mid.z)
_,_,_,_,Tr = Profile(Mid,0.0)
c1[iFS] = Tr
end
c2 = Inter * c1
vtkSkeletonMeshSrc = Outputs.vtkStruct{Float64}(backend,SrcGrid)
Outputs.vtkSkeleton(vtkSkeletonMeshSrc,"Source2CuSp", 1, 1, c1)
vtkSkeletonMeshDest = Outputs.vtkStruct{Float64}(backend,DestGrid)
Outputs.vtkSkeleton(vtkSkeletonMeshDest,"Destination2CuSp", 1, 1, c2)
return nothing
end
Problem = "AdvectionSphereSlottedCylinder"
Param = Examples.Parameters(FTB,Problem)
Phys=DyCore.PhysParameters{FTB}()
Profile = Examples.DivergentSphereExample()(Param,Phys)

nz = 1
nPanel = 30
RefineLevel = 5
RadEarth = 1.0

SrcGrid = Grids.CubedGrid(backend,FTB,nPanel,Grids.OrientFaceSphere,RadEarth,nz)
DestGrid = Grids.DelaunayGrid(backend,FTB,RefineLevel,RadEarth,nz)
Interpolate(SrcGrid,DestGrid,Profile,"CubeDelau")

nPanelSrc = 40
nPanelDest = 47
SrcGrid = Grids.CubedGrid(backend,FTB,nPanelSrc,Grids.OrientFaceSphere,RadEarth,nz)
DestGrid = Grids.CubedGrid(backend,FTB,nPanelDest,Grids.OrientFaceSphere,RadEarth,nz)
Interpolate(SrcGrid,DestGrid,Profile,"CubeCube")

nPanelSrc = 40
nLon = 200
nLat = 100
LatB = (1.0 - 0.001) * pi / 2
SrcGrid = Grids.CubedGrid(backend,FTB,nPanelSrc,Grids.OrientFaceSphere,RadEarth,nz)
DestGrid = Grids.SphericalGrid(backend,FTB,nLon,nLat,LatB,Grids.OrientFaceSphere,RadEarth,nz)
Interpolate(SrcGrid,DestGrid,Profile,"CubeSphere")
19 changes: 17 additions & 2 deletions Examples/testNHSphere.jl
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Stretch = parsed_args["Stretch"]
StretchType = parsed_args["StretchType"]
TopoS = parsed_args["TopoS"]
GridType = parsed_args["GridType"]
AdaptGridType = parsed_args["AdaptGridType"]
RadEarth = parsed_args["RadEarth"]
ScaleFactor = parsed_args["ScaleFactor"]
# CG Element
Expand All @@ -95,6 +96,12 @@ FloatTypeBackend = parsed_args["FloatTypeBackend"]
NumberThreadGPU = parsed_args["NumberThreadGPU"]

MPI.Init()
comm = MPI.COMM_WORLD
Proc = MPI.Comm_rank(comm) + 1
ProcNumber = MPI.Comm_size(comm)
ParallelCom = DyCore.ParallelComStruct()
ParallelCom.Proc = Proc
ParallelCom.ProcNumber = ProcNumber

if Device == "CPU"
backend = CPU()
Expand Down Expand Up @@ -122,6 +129,7 @@ else
@show "False FloatTypeBackend"
stop
end

Param = Examples.Parameters(FTB,Problem)

KernelAbstractions.synchronize(backend)
Expand Down Expand Up @@ -212,6 +220,9 @@ if RadEarth == 0.0
end
end

Grid, Exchange = Grids.InitGrid(backend,FTB,OrdPoly,nz,nPanel,GridType,Decomp,RadEarth,Model,ParallelCom)


Topography = (TopoS=TopoS,H=H,Rad=RadEarth)
#Topography
if TopoS == "BaroWaveHill"
Expand All @@ -222,9 +233,13 @@ else
TopoProfile = Examples.Flat()()
end

Grid.AdaptGrid = Grids.AdaptGrid(FTB,AdaptGridType,H)

@show "InitSphere"
(CG, Metric, Exchange, Global) = DyCore.InitSphere(backend,FTB,OrdPoly,OrdPolyZ,nz,nPanel,H,
GridType,Topography,Decomp,Model,Phys,RadEarth,TopoProfile)
(CG, Metric, Global) = DyCore.InitSphere(backend,FTB,OrdPoly,OrdPolyZ,H,Topography,Model,
Phys,TopoProfile,Exchange,Grid,ParallelCom)
#(CG, Metric, Exchange, Global) = DyCore.InitSphere(backend,FTB,OrdPoly,OrdPolyZ,nz,nPanel,H,
# GridType,Topography,Decomp,Model,Phys,RadEarth,TopoProfile)

# Initial values
Examples.InitialProfile!(Model,Problem,Param,Phys)
Expand Down
Loading

0 comments on commit d22545b

Please sign in to comment.