diff --git a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py
new file mode 100644
index 00000000..1a8d59c6
--- /dev/null
+++ b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py
@@ -0,0 +1,29 @@
+# InitialConditionsAdisTS.py -- Pamhyr
+# Copyright (C) 2023-2024 INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# -*- coding: utf-8 -*-
+
+import logging
+from functools import reduce
+
+from tools import trace, timer, old_pamhyr_date_to_timestamp
+
+from Model.Tools.PamhyrDB import SQLSubModel
+from Model.Except import NotImplementedMethodeError
+
+from Model.InitialConditionsAdisTS.InitialConditionsAdisTSSpec import ICAdisTSSpec
+
+logger = logging.getLogger()
diff --git a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSSpec.py b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSSpec.py
new file mode 100644
index 00000000..ab26bd8c
--- /dev/null
+++ b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSSpec.py
@@ -0,0 +1,237 @@
+# InitialConditionsAdisTSSpec.py -- Pamhyr
+# Copyright (C) 2023-2024 INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# -*- coding: utf-8 -*-
+
+import logging
+
+from tools import trace, timer
+
+from Model.Tools.PamhyrDB import SQLSubModel
+from Model.Except import NotImplementedMethodeError
+
+logger = logging.getLogger()
+
+class ICAdisTSSpec(SQLSubModel):
+ _sub_classes = [
+ ]
+ _id_cnt = 0
+
+ def __init__(self, id: int = -1, name: str = "",
+ status=None):
+ super(ICAdisTSSpec, self).__init__()
+
+ self._status = status
+
+ if id == -1:
+ self.id = ICAdisTSSpec._id_cnt
+ else:
+ self.id = id
+
+ self._name_section = name
+ self._reach = None
+ self._start_kp = None
+ self._end_kp = None
+ self._concentration = None
+ self._eg = None
+ self._em = None
+ self._ed = None
+ self._rate = None
+ self._enabled = True
+
+ ICAdisTSSpec._id_cnt = max(ICAdisTSSpec._id_cnt + 1, self.id)
+
+ @classmethod
+ def _db_create(cls, execute):
+ execute("""
+ CREATE TABLE initial_conditions_spec(
+ id INTEGER NOT NULL PRIMARY KEY,
+ ic_default INTEGER NOT NULL,
+ name TEXT NOT NULL,
+ reach INTEGER NOT NULL,
+ start_kp REAL NOT NULL,
+ end_kp REAL NOT NULL,
+ eg REAL NOT NULL,
+ em REAL NOT NULL,
+ ed REAL NOT NULL,
+ rate REAL NOT NULL,
+ enabled BOOLEAN NOT NULL,
+ FOREIGN KEY(ic_default) REFERENCES initial_conditions(id),
+ FOREIGN KEY(reach) REFERENCES river_reach(id)
+ )
+ """)
+
+ return cls._create_submodel(execute)
+
+ @classmethod
+ def _db_update(cls, execute, version):
+ major, minor, release = version.strip().split(".")
+ if major == minor == "0":
+ if int(release) < 6:
+ cls._db_create(execute)
+
+ return True
+
+ @classmethod
+ def _db_load(cls, execute, data=None):
+ new = []
+
+ table = execute(
+ "SELECT id, ic_default, name, reach, start_kp, end_kp, " +
+ "eg, em, ed, rate, enabled " +
+ "FROM initial_conditions_spec " +
+ f"WHERE ic_default = {data['ic_default_id']} "
+ )
+
+ for row in table:
+ name = row[2]
+ reach = row[3]
+ start_kp = row[4]
+ end_kp = row[5]
+ eg = row[6]
+ em = row[7]
+ ed = row[8]
+ rate = row[9]
+ enabled = (row[10] == 1)
+
+ new_spec = [name, reach, start_kp, end_kp, eg, em, ed, rate, enabled]
+ new.append(new_spec)
+
+ return new
+
+ def _db_save(self, execute, data=None):
+ ic_default = data['ic_default_id']
+
+ sql = (
+ "INSERT INTO " +
+ "initial_conditions_spec(id, ic_default, name, reach, " +
+ "start_kp, end_kp, eg, em, ed, rate, enabled) " +
+ "VALUES (" +
+ f"{self.id}, " +
+ f"{ic_default}, " +
+ f"'{self._db_format(self._name_section)}', " +
+ f"{self._reach}, " +
+ f"{self._start_kp}, " +
+ f"{self._end_kp}, " +
+ f"{self._eg}, " +
+ f"{self._em}, " +
+ f"{self._ed}, " +
+ f"{self._rate}, " +
+ f"{self._enabled}" +
+ ")"
+ )
+ execute(sql)
+
+ return True
+
+ @property
+ def name(self):
+ return self._name_section
+
+ @name.setter
+ def name(self, name):
+ self._name_section = name
+ self._status.modified()
+
+ @property
+ def reach(self):
+ return self._reach
+
+ @reach.setter
+ def reach(self, reach):
+ self._reach = reach
+ self._status.modified()
+
+ @property
+ def start_kp(self):
+ return self._start_kp
+
+ @start_kp.setter
+ def start_kp(self, start_kp):
+ self._start_kp = start_kp
+ self._status.modified()
+
+ @property
+ def end_kp(self):
+ return self._end_kp
+
+ @end_kp.setter
+ def end_kp(self, end_kp):
+ self._end_kp = end_kp
+ self._status.modified()
+
+ @property
+ def concentration(self):
+ return self._concentration
+
+ @concentration.setter
+ def concentration(self, concentration):
+ self._concentration = concentration
+ self._status.modified()
+
+ @property
+ def eg(self):
+ return self._eg
+
+ @eg.setter
+ def eg(self, eg):
+ self._eg = eg
+ self._status.modified()
+
+ @property
+ def em(self):
+ return self._em
+
+ @em.setter
+ def em(self, em):
+ self._em = em
+ self._status.modified()
+
+ @property
+ def ed(self):
+ return self._ed
+
+ @ed.setter
+ def ed(self, ed):
+ self._ed = ed
+ self._status.modified()
+
+ @property
+ def rate(self):
+ return self._rate
+
+ @rate.setter
+ def rate(self, rate):
+ self._rate = rate
+ self._status.modified()
+
+ @property
+ def enabled(self):
+ return self._enabled
+
+ @enabled.setter
+ def enabled(self, enabled):
+ self._enabled = enabled
+ self._status.modified()
+
+
+
+
+
+
+
+
+