Add settings for parameters in terrain_rivers.py

This commit is contained in:
Gael-de-Sailly 2020-05-30 12:03:34 +02:00 committed by Gaël de Sailly
parent 103cd49d78
commit 36b49a7fe2
3 changed files with 71 additions and 30 deletions

11
settings.py Normal file
View File

@ -0,0 +1,11 @@
def read_config_file(fname):
settings = {}
with open(fname, 'r') as f:
for line in f:
slist = line.split('=', 1)
if len(slist) >= 2:
prefix, suffix = slist
settings[prefix.strip()] = suffix.strip()
return settings

14
terrain_default.conf Normal file
View File

@ -0,0 +1,14 @@
mapsize = 1000
scale = 400
vscale = 300
offset = 0
persistence = 0.6
lacunarity = 2.0
K = 1
m = 0.35
d = 0.8
sea_level = 0
time = 10
niter = 10

View File

@ -7,24 +7,48 @@ from erosion import EvolutionModel
import bounds import bounds
import os import os
import sys import sys
import settings
# Always place in this script's parent directory # Always place in this script's parent directory
os.chdir(os.path.dirname(sys.argv[0])) os.chdir(os.path.dirname(sys.argv[0]))
argc = len(sys.argv) argc = len(sys.argv)
if argc > 1: params = {}
mapsize = int(sys.argv[1])
else: if argc > 1:
mapsize = 400 if os.path.isfile(sys.argv[1]):
params = settings.read_config_file(sys.argv[1])
else:
mapsize = int(sys.argv[1])
def get_setting(name, default):
if name in params:
return params[name]
return default
mapsize = int(get_setting('mapsize', 400))
scale = float(get_setting('scale', 200.0))
vscale = float(get_setting('vscale', 200.0))
offset = float(get_setting('offset', 0.0))
persistence = float(get_setting('persistence', 0.5))
lacunarity = float(get_setting('lacunarity', 2.0))
K = float(get_setting('K', 1.0))
m = float(get_setting('m', 0.35))
d = float(get_setting('d', 1.0))
sea_level = float(get_setting('sea_level', 0.0))
flex_radius = float(get_setting('flex_radius', 20.0))
time = float(get_setting('time', 10.0))
niter = int(get_setting('niter', 10))
scale = mapsize / 2
n = np.zeros((mapsize+1, mapsize+1)) n = np.zeros((mapsize+1, mapsize+1))
# Set noise parameters # Set noise parameters
params = { params = {
"octaves" : int(np.ceil(np.log2(mapsize)))+1, "octaves" : int(np.ceil(np.log2(mapsize)))+1,
"persistence" : 0.5, "persistence" : persistence,
"lacunarity" : 2., "lacunarity" : lacunarity,
} }
# Determine noise offset randomly # Determine noise offset randomly
@ -36,36 +60,28 @@ for x in range(mapsize+1):
for y in range(mapsize+1): for y in range(mapsize+1):
n[x,y] = noise.snoise2(x/scale + xbase, y/scale + ybase, **params) n[x,y] = noise.snoise2(x/scale + xbase, y/scale + ybase, **params)
nn = n*mapsize/5 + mapsize/20 nn = n*vscale + offset
# Initialize landscape evolution model # Initialize landscape evolution model
print('Initializing model') print('Initializing model')
model = EvolutionModel(nn, K=1, m=0.35, d=1, sea_level=0) model = EvolutionModel(nn, K=1, m=0.35, d=1, sea_level=0, flex_radius=flex_radius)
dt = time/niter
# Run the model's processes: the order in which the processes are run is arbitrary and could be changed. # Run the model's processes: the order in which the processes are run is arbitrary and could be changed.
print('Flow calculation 1') print('Initial flow calculation')
model.calculate_flow() model.calculate_flow()
print('Advection 1') for i in range(niter):
model.advection(2) print('Iteration {:d} of {:d}'.format(i+1, niter))
print('Diffusion')
print('Isostatic equilibration 1') model.diffusion(dt)
model.adjust_isostasy() print('Advection')
model.advection(dt)
print('Flow calculation 2') print('Isostatic equilibration')
model.calculate_flow() model.adjust_isostasy()
print('Flow calculation')
print('Diffusion') model.calculate_flow()
model.diffusion(4)
print('Advection 2')
model.advection(2)
print('Isostatic equilibration 2')
model.adjust_isostasy()
print('Flow calculation 3')
model.calculate_flow()
print('Done') print('Done')