Visualisierung des Iterationsverlaufs

Der Iterationsverlauf hat keine physikalisch korrekte zeitliche Komponente. Dennoch kann die Visualisierung des Iterationsverlaufes vom Anfang bis zu einem annähernd stationären Zustand hilfreich für das Systemverständnis der Iteration sein. Hierzu gibt es die Option „create frequent output“. Warnung: Es werden sehr viele TIF-Dateien geschrieben und man benötigt sehr viel Speicherplatz! Mit häufig geschriebenen Ausgabedateien lässt sich mit etwas Python der Iterationsverlauf in QGIS automatisiert als Einzelbilder visualisieren und exportieren.

import os
 from qgis.PyQt import QgsLayoutExporter
 QgsApplication.setPrefixPath("/usr", True)
 inpath = '/home/tim/GIS/SplashOut_Mischgebiet'
 outpath = '/home/tim/GIS/SplashOut_QGIS'
 show_wd = True
 show_fa = True
 files = os.listdir(inpath)
 wd_list = []
 fa_list = []
 for item in files:
     if 'vwd' in item:
         wd_list.append(item)
     if 'vfa' in item:
         fa_list.append(item)
 wd_list.sort()
 fa_list.sort()
 wd_list = wd_list[40:43]
 fa_list = fa_list[40:43]
 if len(wd_list) != len(fa_list):
     raise ValueError('number of input files do not match!')
 for i, wd in enumerate(wd_list):
     fa = fa_list[i]
     if show_wd:
         layers = QgsProject.instance().mapLayersByName('wd')
         layer = layers[0]
         layer.setDataSource(os.path.join(inpath, wd),
                             'wd',
                             'gdal',
                             QgsDataProvider.ProviderOptions())
         layer.reload()
     if show_fa:
         layers = QgsProject.instance().mapLayersByName('flow')
         layer = layers[0]
         layer.setDataSource(os.path.join(inpath, fa),
                             'flow',
                             'gdal',
                             QgsDataProvider.ProviderOptions())
         layer.reload()
     project = QgsProject.instance()
     manager = project.layoutManager()
     layout = manager.layoutByName('4K')
     exporter = QgsLayoutExporter(layout)
     outfile = os.path.join(outpath, str(i).zfill(5) + '.jpg')
     result = exporter.exportToImage(outfile, QgsLayoutExporter.ImageExportSettings())

Die Einzelbilder können anschließend mit ffmpeg zu einem Video zusammengefügt werden:

ffmpeg -framerate 60 -f image2 -i %05d.jpg -c:v libx265 -preset slow -crf 29 -r 60 a.mp4
Visualisierung des Iterationsverlaufes