Merge branch 'master' of ssh://git.edgarpierre.fr:39529/m2cce/internship
This commit is contained in:
commit
18b6bea844
23 changed files with 111 additions and 311438 deletions
64
README.md
64
README.md
|
@ -22,12 +22,61 @@ options:
|
|||
|
||||
## Bathymetry
|
||||
|
||||
Configuration:
|
||||
```
|
||||
[inp]
|
||||
root: input directory
|
||||
base: bathymetry database (.xyz) -- not provided in this repository
|
||||
hires: 1d hires smoothed breakwater profile (.dat)
|
||||
hstru: 1d hires smoothed breakwater porosity height (.dat)
|
||||
poro: 1d breakwater porosity (.dat)
|
||||
psize: 1d porosity size (.dat)
|
||||
hires_step: mesh sizing of 1d profile
|
||||
|
||||
[out]
|
||||
margin: margin around the buoy and breakwater for subdomain
|
||||
no_breakwater: option to remove breakwater
|
||||
root: output directory
|
||||
sub: output file for subdomain
|
||||
out: output file for 1d projection
|
||||
step: mesh size
|
||||
left: margin for 1d projection (breakwater side)
|
||||
right: margin for 1d projection (buoy side)
|
||||
|
||||
[artha]
|
||||
lat: latitude of the breakwater
|
||||
lon: longitude of the breakwater
|
||||
|
||||
[buoy]
|
||||
lat: latitude of the buoy
|
||||
lon: longitude of the buoy
|
||||
```
|
||||
|
||||
* Insert database in `data/data`
|
||||
* Run `processing.subdomain` to generate 2D data in a smaller domain
|
||||
* Run `processing.projection` to generate a 1D bathymetry
|
||||
|
||||
## Swash
|
||||
|
||||
Configuration:
|
||||
```
|
||||
[data]
|
||||
out: input directory (output of bathymetry)
|
||||
|
||||
[swash]
|
||||
input: swash input file (.sws)
|
||||
path: path to swash directory (should contain swashrun and swash.exe)
|
||||
out: output directory for swash (created at the end of the computation)
|
||||
mpi: number of mpi threads (omit to use serial)
|
||||
|
||||
[post]
|
||||
inp: input directory for post-processing (output of sws_npz)
|
||||
compare: input directory for post-processing comparison (omit to display results from single case)
|
||||
out: output directory for figures
|
||||
x0: position of reflection calculations
|
||||
t0: minimum time for reflection calculations (necessary because of boundary condition ramping)
|
||||
```
|
||||
|
||||
* Run `processing.swash` to run the Swash model
|
||||
* Run `processing.sws_npz` to convert Swash output to Numpy files
|
||||
* Run `processing.post` to plot wave height at a point, water level at an
|
||||
|
@ -37,6 +86,21 @@ options:
|
|||
|
||||
## OlaFlow
|
||||
|
||||
Configuration:
|
||||
```
|
||||
[swash]
|
||||
np_out: input of olaflow from swash (output of sws_npz)
|
||||
|
||||
[bathy]
|
||||
bathy: bathymetry to be used by olaflow
|
||||
hstru: height of porous domain (see bathy)
|
||||
scale: openscad scaling (mesh sizing in [x,y,z])
|
||||
out: output folder for stl bathymetry
|
||||
|
||||
[olaflow]
|
||||
root: olaflow computation directory
|
||||
```
|
||||
|
||||
* Run `processing.bathy` to generate stl input files
|
||||
* Run `blockMesh`, `snappyHexMesh -overwrite`, copy `0.org` to `0`, `setFields`
|
||||
* Run `processing.sws_ola` to convert Swash output to OlaFlow input
|
||||
|
|
|
@ -8,12 +8,13 @@ psize=Psize.dat
|
|||
hires_step=0.5
|
||||
|
||||
[out]
|
||||
margin=0.005
|
||||
no_breakwater=True
|
||||
root=out_nb
|
||||
sub=bathy_sub.npy
|
||||
out=bathy.npy
|
||||
step=1
|
||||
left=0
|
||||
left=-300
|
||||
right=150
|
||||
|
||||
[artha]
|
||||
|
|
|
@ -14,7 +14,7 @@ root=out
|
|||
sub=bathy_sub.npy
|
||||
out=bathy.npy
|
||||
step=1
|
||||
left=0
|
||||
left=-300
|
||||
right=150
|
||||
|
||||
[artha]
|
||||
|
|
|
@ -91,13 +91,14 @@ x_min_hires = x[z_crossing] + (bathy_hires[:, 0].min() - bathy_hires[hires_cross
|
|||
x_max_hires = x[z_crossing] + (bathy_hires[:, 0].max() - bathy_hires[hires_crossing, 0])
|
||||
log.debug(f"Replacing range: [{x_min_hires},{x_max_hires}]")
|
||||
|
||||
flt_x = (x > x_min_hires) & (x < x_max_hires)
|
||||
hstru = np.zeros(z.shape)
|
||||
poro = np.zeros(z.shape)
|
||||
psize = np.zeros(z.shape)
|
||||
if config.getboolean("out", "no_breakwater", fallback=False):
|
||||
z[flt_x] = z[flt_x][-1]
|
||||
flt_x = np.abs(x) < 250
|
||||
z[flt_x] = np.linspace(z[flt_x][0], z[flt_x][-1], flt_x.sum())
|
||||
else:
|
||||
flt_x = (x > x_min_hires) & (x < x_max_hires)
|
||||
z[flt_x] = interpolate.griddata(
|
||||
(bathy_hires[:, 0],),
|
||||
bathy_hires[:, 1],
|
||||
|
@ -133,4 +134,5 @@ np.savetxt(out_root.joinpath("psize.dat"), psize[::-1], newline=" ")
|
|||
fig, ax = plt.subplots()
|
||||
ax.plot(-x, z, color="k")
|
||||
ax.fill_between(-x, z + hstru, z, color="k", alpha=0.2)
|
||||
ax.set_title(f"N={z.size-1}, x=[{-x.max()};{-x.min()}]")
|
||||
fig.savefig(out_root.joinpath("bathy.pdf"))
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Version: 9
|
||||
\\/ M anipulation |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
format ascii;
|
||||
class polyBoundaryMesh;
|
||||
location "constant/polyMesh";
|
||||
object boundary;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
5
|
||||
(
|
||||
inlet
|
||||
{
|
||||
type patch;
|
||||
nFaces 77;
|
||||
startFace 38318;
|
||||
}
|
||||
outlet
|
||||
{
|
||||
type patch;
|
||||
nFaces 34;
|
||||
startFace 38395;
|
||||
}
|
||||
atmosphere
|
||||
{
|
||||
type patch;
|
||||
nFaces 300;
|
||||
startFace 38429;
|
||||
}
|
||||
defaultFaces
|
||||
{
|
||||
type empty;
|
||||
inGroups List<word> 1(empty);
|
||||
nFaces 38698;
|
||||
startFace 38729;
|
||||
}
|
||||
bathy
|
||||
{
|
||||
type wall;
|
||||
inGroups List<word> 1(wall);
|
||||
nFaces 349;
|
||||
startFace 77427;
|
||||
}
|
||||
)
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,19 +0,0 @@
|
|||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Version: 9
|
||||
\\/ M anipulation |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
format ascii;
|
||||
class labelList;
|
||||
location "constant/polyMesh";
|
||||
object cellLevel;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
19349{0}
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,20 +0,0 @@
|
|||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Version: 9
|
||||
\\/ M anipulation |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
format ascii;
|
||||
class regIOobject;
|
||||
location "constant/polyMesh";
|
||||
object cellZones;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
0
|
||||
()
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,20 +0,0 @@
|
|||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Version: 9
|
||||
\\/ M anipulation |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
format ascii;
|
||||
class regIOobject;
|
||||
location "constant/polyMesh";
|
||||
object faceZones;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
0
|
||||
()
|
||||
|
||||
// ************************************************************************* //
|
File diff suppressed because it is too large
Load diff
|
@ -1,22 +0,0 @@
|
|||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Version: 9
|
||||
\\/ M anipulation |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
format ascii;
|
||||
class uniformDimensionedScalarField;
|
||||
location "constant/polyMesh";
|
||||
object level0Edge;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 0 0 0 0 0];
|
||||
value 0.5;
|
||||
|
||||
|
||||
|
||||
// ************************************************************************* //
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,19 +0,0 @@
|
|||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Version: 9
|
||||
\\/ M anipulation |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
format ascii;
|
||||
class labelList;
|
||||
location "constant/polyMesh";
|
||||
object pointLevel;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
39460{0}
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,20 +0,0 @@
|
|||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Version: 9
|
||||
\\/ M anipulation |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
format ascii;
|
||||
class regIOobject;
|
||||
location "constant/polyMesh";
|
||||
object pointZones;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
0
|
||||
()
|
||||
|
||||
// ************************************************************************* //
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -2,16 +2,14 @@
|
|||
out=../data/out_nb
|
||||
|
||||
[swash]
|
||||
input=sws/SPEC_buoy_nb.sws
|
||||
input=sws/SPEC_buoy.sws
|
||||
path=/data/code/swash
|
||||
out=out/spec_nb
|
||||
out=out/spec_nb_2lay
|
||||
mpi=8
|
||||
|
||||
[post]
|
||||
inp=inp_post/spec_nb
|
||||
compare=inp_post_nb
|
||||
out=out_post
|
||||
#nperseg=1024
|
||||
dt=0.25
|
||||
inp=inp_post/spec_nb_2lay
|
||||
#compare=
|
||||
out=out_post/spec_nb_2lay
|
||||
x0=-1250
|
||||
t0=180
|
||||
|
|
|
@ -4,14 +4,12 @@ out=../data/out
|
|||
[swash]
|
||||
input=sws/SPEC_buoy.sws
|
||||
path=/data/code/swash
|
||||
out=out/spec
|
||||
out=out/spec_2lay
|
||||
mpi=8
|
||||
|
||||
[post]
|
||||
inp=inp_post/spec
|
||||
compare=inp_post_nb
|
||||
out=out_post
|
||||
#nperseg=1024
|
||||
dt=0.25
|
||||
inp=inp_post/spec_2lay
|
||||
compare=inp_post/spec_nb_2lay
|
||||
out=out_post/spec_2lay_bvsnb
|
||||
x0=-1250
|
||||
t0=180
|
||||
|
|
|
@ -55,7 +55,7 @@ vk = np.sqrt((velk[n] ** 2).sum(axis=1))
|
|||
|
||||
lines = ax.plot(x, zk[n].T, c="#0066cc")
|
||||
quiv = []
|
||||
for i in range(10):
|
||||
for i in range(len(lines)-1):
|
||||
quiv.append(
|
||||
ax.quiver(
|
||||
x[::50],
|
||||
|
@ -87,4 +87,4 @@ ani = animation.FuncAnimation(
|
|||
fig, animate, frames=wl[:, 0].size, interval=20, blit=True
|
||||
)
|
||||
|
||||
ani.save(out.joinpath("layers.mp4", codec="h265"))
|
||||
ani.save(out.joinpath("layers.mp4"))
|
||||
|
|
|
@ -38,7 +38,7 @@ x0 = config.getint("post", "x0")
|
|||
arg_x0 = np.abs(x - x0).argmin()
|
||||
t0 = config.getfloat("post", "t0")
|
||||
arg_t0 = np.abs(t - t0).argmin()
|
||||
dt = config.getfloat("post", "dt")
|
||||
dt = np.diff(t).mean()
|
||||
f = 1 / dt
|
||||
nperseg = config.getint("post", "nperseg", fallback=None)
|
||||
log.info(f"Computing reflection coefficient at x={x0}")
|
||||
|
@ -59,10 +59,10 @@ R = np.sqrt(
|
|||
(np.abs(phi_eta[1]) + np.abs(phi_u[1]) - 2 * np.abs(phi_eta_u[1]))
|
||||
/ (np.abs(phi_eta[1]) + np.abs(phi_u[1]) + 2 * np.abs(phi_eta_u[1]))
|
||||
)
|
||||
# R = np.sqrt(
|
||||
# (1 + G**2 - 2 * G * np.cos(th_eta_u))
|
||||
# / (1 + G**2 + 2 * G * np.cos(th_eta_u))
|
||||
# )
|
||||
#R = np.sqrt(
|
||||
# (1 + G**2 - 2 * G * np.cos(th_eta_u))
|
||||
# / (1 + G**2 + 2 * G * np.cos(th_eta_u))
|
||||
#)
|
||||
|
||||
if config.has_option("post", "compare"):
|
||||
inp_comp = pathlib.Path(config.get("post", "compare"))
|
||||
|
@ -92,10 +92,10 @@ if config.has_option("post", "compare"):
|
|||
(np.abs(phi_eta_[1]) + np.abs(phi_u_[1]) - 2 * np.abs(phi_eta_u_[1]))
|
||||
/ (np.abs(phi_eta_[1]) + np.abs(phi_u_[1]) + 2 * np.abs(phi_eta_u_[1]))
|
||||
)
|
||||
# R_ = np.sqrt(
|
||||
# (1 + G_**2 - 2 * G_ * np.cos(th_eta_u_))
|
||||
# / (1 + G_**2 + 2 * G_ * np.cos(th_eta_u_))
|
||||
# )
|
||||
#R_ = np.sqrt(
|
||||
# (1 + G_**2 - 2 * G_ * np.cos(th_eta_u_))
|
||||
# / (1 + G_**2 + 2 * G_ * np.cos(th_eta_u_))
|
||||
#)
|
||||
|
||||
|
||||
# Plotting
|
||||
|
@ -166,8 +166,8 @@ out = pathlib.Path(config.get("post", "out")).joinpath(f"t{t0}x{x0}")
|
|||
log.info(f"Saving plots in '{out}'")
|
||||
out.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
fig.savefig(out.joinpath("t.png"))
|
||||
fig_r.savefig(out.joinpath("R.png"))
|
||||
fig_x.savefig(out.joinpath("x.png"))
|
||||
fig.savefig(out.joinpath("t.pdf"))
|
||||
fig_r.savefig(out.joinpath("R.pdf"))
|
||||
fig_x.savefig(out.joinpath("x.pdf"))
|
||||
|
||||
log.info("Finished post-processing")
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
import logging
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
log = logging.getLogger("read_swash")
|
||||
|
||||
class ReadSwash:
|
||||
def __init__(self):
|
||||
self._n_x = None
|
||||
|
@ -13,7 +16,9 @@ class ReadSwash:
|
|||
|
||||
@classmethod
|
||||
def read_nohead(cls, path):
|
||||
log.info(f"Replacing \\s with \\n in '{path}'")
|
||||
subprocess.run(("sed", "-i", r"s/\s\+/\n/g", path))
|
||||
log.info(f"Loading '{path}'")
|
||||
return np.loadtxt(path)
|
||||
|
||||
def read_time(self, path):
|
||||
|
|
|
@ -30,7 +30,7 @@ np.save(inp.joinpath("tsec"), rsws.read_time(sws_out.joinpath("tsec.dat")))
|
|||
np.save(inp.joinpath("xp"), rsws.read_x(sws_out.joinpath("xp.dat")))
|
||||
|
||||
var = {
|
||||
"dep": rsws.read_scalar,
|
||||
#"dep": rsws.read_scalar,
|
||||
"botl": rsws.read_const,
|
||||
"watl": rsws.read_scalar,
|
||||
"pressk": rsws.read_scalar_lay,
|
||||
|
@ -38,6 +38,7 @@ var = {
|
|||
"zk": rsws.read_scalar_lay,
|
||||
"velk": rsws.read_vector_lay,
|
||||
"vz": rsws.read_scalar_lay,
|
||||
"vel": rsws.read_vector,
|
||||
}
|
||||
|
||||
with ThreadPool(len(var)) as pool:
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
$************************* GENERAL ***************************************
|
||||
PROJ 'GW' 'T1'
|
||||
SET NAUT
|
||||
SET LEVEL 0.5
|
||||
SET LEVEL 4.5
|
||||
SET MAXERR 1
|
||||
SET DEPMIN 0.001
|
||||
MODE DYN ONED
|
||||
$SET DEPMIN 0.001
|
||||
MODE NONST ONED
|
||||
$************************ GRIDS ***************************************
|
||||
CGRID REG -1450 0 0 1450 0 1450 0
|
||||
INPGRID BOT REG -1450 0 0 1450 0 1 0 $x0 y0 theta nx-1 ny-1 dx dy
|
||||
VERT 10 $nb couches
|
||||
CGRID REG -1450 0 0 1750 0 1750 0
|
||||
INPGRID BOT REG -1450 0 0 1750 0 1 0 $x0 y0 theta nx-1 ny-1 dx dy
|
||||
VERT 2
|
||||
READ BOTTOM -1 'bathy.dat' 3 0 FREE
|
||||
|
||||
INPGRID PORO REG -1450 0 0 1450 0 1 0
|
||||
INPGRID PSIZ REG -1450 0 0 1450 0 1 0
|
||||
INPGRID HSTRUC REG -1450 0 0 1450 0 1 0
|
||||
INPGRID PORO REG -1450 0 0 1750 0 1 0
|
||||
INPGRID PSIZ REG -1450 0 0 1750 0 1 0
|
||||
INPGRID HSTRUC REG -1450 0 0 1750 0 1 0
|
||||
|
||||
READINP PORO 1 'poro.dat' 3 0 FREE
|
||||
READINP PSIZ 1 'psize.dat' 3 0 FREE
|
||||
|
@ -24,7 +24,7 @@ $*********************** BOUNDARIES ****************************************
|
|||
INIT ZERO
|
||||
BOUN SHAP JON SIG PEAK DSPR DEGR
|
||||
BOUN SIDE W BTYPE WEAK SMOOT 10 SEC ADDBOUNDWAVE CON SPECT 7.31 16.9 0 0 CYCLE 20 MIN
|
||||
BOUN SIDE E BTYPE SOMMERFELD
|
||||
SPON E 250
|
||||
|
||||
|
||||
$*********************** PHYSICS *******************************************
|
||||
|
|
Loading…
Reference in a new issue