Commit 89c6497c authored by Michael Blazej's avatar Michael Blazej
Browse files

Complex water definitions are now supported

parent d428ea72
......@@ -604,9 +604,23 @@ def create_platform_motion():
def create_atmosphere():
at = (
atmos.BasicAtmosphere()
.set_radiative_transfer(atmos.UniformRadiativeTransfer(1, 1))
.set_weather(Path("$DIRSIG_HOME/lib/data/weather/mls.wth"))
atmos.NewAtmosphere(
Path.cwd() / "demos"/"atmosphere"/"mls_urban_38km.adb.hdf"
)
.set_info(
"A great atmosphere",
"Joe User",
"Aweseom, Corp",
"This is a great atmosphere setup.",
)
.set_backend(
atmos.ModtranTapeBackend()
.set_profile("MODTRAN 5.2")
.set_atmospheric_model("MidLatitudeSummer")
.set_boundary_aerosol_model("RuralVis23Km", visibility_km=38.0)
.set_multiple_scattering("Isacc")
.set_co2_mixing_ratio(395)
)
)
return at
......
......@@ -287,8 +287,8 @@ def create_scene():
def create_tasks():
t = TASKS(
datetime(2012, 7, 20, 14, 0, 0, 0, timezone(-timedelta(hours=5)))
).add_start_stop(0, 0)
datetime(2012, 7, 20, 19, 0, 0, 0, timezone(-timedelta(hours=5)))
).add_start_stop(0, 5)
return t
......@@ -302,7 +302,33 @@ def create_water():
.set_wind_options(1, 0)
.set_ocean_resolution(6, 0.25)
)
.add_plugin(water.ClearWaterIOPmodel())
.add_plugin(
water.IOPmodel("purewater").add_concentration_model(
{
"TYPE": "gauss",
"ID": "chlConc",
"BG": 0.2,
"S": 9,
"H": 144,
"DMAX": 17,
"ZLEVEL": 0,
}
).add_scattering_model(
{
"TYPE": "gordonmorel",
"ID": "chlScat",
"K": 0.33,
"Q": 0.62,
"CONCID": "chlConc",
"EXCUSIVE": 0
}
).add_phase_function_model(
{
"TYPE": "petzold",
"SCATID": "chlScat"
}
)
)
)
return pool_water
......
......@@ -141,20 +141,75 @@ class ThermalWater(OceanPlugin):
return {"name": "ThermalWater", "inputs": {"tempk": self._ocean_temp}}
def __writer__(fid, level, data):
#assert isinstance(root, fid)
assert isinstance(level,int)
assert isinstance(data,dict)
tab = " "
for key in data.keys():
fid.write(tab*level)
fid.write(key)
if isinstance(data[key],dict):
fid.write(" {\n")
__writer__(fid,level+1,data[key])
fid.write(tab*level)
fid.write("}\n")
else:
fid.write(" = {}\n".format(data[key]))
class IOPmodel(OceanPlugin):
pass
__MEDIUM__=["null","air","purewater","sbpurewater","pspurewater"]
def __init__(self, medium):
assert isinstance(medium,str)
assert medium in self.__MEDIUM__
self._data = {"IOP_MODEL":{"BASE_MEDIUM":medium}}
def add_scattering_model(self,model):
assert isinstance(model, dict)
self._data['IOP_MODEL']["ADD_SCATTERING_MODEL"] = model
return self
def add_absorption_model(self,model):
assert isinstance(model, dict)
self._data['IOP_MODEL']["ADD_ABSORPTION_MODEL"] = model
return self
def add_phase_function_model(self,model):
assert isinstance(model, dict)
self._data['IOP_MODEL']["ADD_PHASE_FUNCTION_MODEL"] = model
return self
def add_concentration_model(self,model):
assert isinstance(model, dict)
self._data['IOP_MODEL']["ADD_CONCENTRATION_MODEL"] = model
return self
def write(self, dirs, key="root", name="custom_water.iop"):
fname = dirs[key] / name
with open(fname, "w") as fid:
__writer__(fid,0,self._data)
return {
"name": "IOPModel",
"inputs": {"iop_filename": fname.as_posix()},
}
class ClearWaterIOPmodel(IOPmodel):
def __init__(self):
pass
self._data = {"IOP_MODEL":{"BASE_MEDIUM":"purewater"}}
def write(self, dirs, key="root", name="clear_water.iop"):
fname = dirs[key] / name
with open(fname, "w") as fid:
fid.write("IOP_MODEL {\n")
fid.write(" BASE_MEDIUM = purewater\n")
fid.write("}\n")
__writer__(fid,0,self._data)
return {
"name": "IOPModel",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment