Source code for ogs5py.fileclasses.ddc.core

# -*- coding: utf-8 -*-
"""Class for the ogs DOMAIN DECOMPOSITION file."""
from ogs5py.fileclasses.base import BlockFile


[docs]class DDC(BlockFile): """ Class for the ogs MPI DOMAIN DECOMPOSITION file. Parameters ---------- task_root : str, optional Path to the destiny model folder. Default: cwd+"ogs5model" task_id : str, optional Name for the ogs task. Default: "model" Notes ----- Main-Keywords (#): - DOMAIN Sub-Keywords ($) per Main-Keyword: - DOMAIN - ELEMENTS - NODES_INNER - NODES_BORDER Standard block: None Keyword documentation: None Reading routines: https://github.com/ufz/ogs5/blob/master/FEM/par_ddc.cpp See Also -------- add_block """ MKEYS = ["DOMAIN"] # sorted SKEYS = [["ELEMENTS", "NODES_INNER", "NODES_BORDER"]] STD = {} def __init__(self, **OGS_Config): super().__init__(**OGS_Config) self.file_ext = ".ddc"
[docs] def save(self, path, **kwargs): """ Save the actual DDC input file in the given path. Parameters ---------- path : str path to where to file should be saved update : bool, optional state if the content should be updated before saving. Default: True """ from ogs5py import CON_IND, SUB_IND if "update" in kwargs: update = bool(kwargs["update"]) else: update = True # update the content if update: self._update_out() # open the file with open(path, "w") as fout: # iterate over the main keywords for i, mkw in enumerate(self.mainkw): # the number of the actual DOMAIN is behind the main key print("#" + mkw, i, sep=" ", file=fout) # iterate over the subkeywords for j, skw in enumerate(self.subkw[i]): # the number of related content is behind the sub key print( SUB_IND + "$" + skw, len(self.cont[i][j]), sep=" ", file=fout, ) # iterate over the content for con in self.cont[i][j]: if CON_IND: print( CON_IND[:-1], # hack to fit with sep=" " *con, sep=" ", file=fout, ) else: print(*con, sep=" ", file=fout) # write the final STOP keyword if self.bot_com: print("#STOP", file=fout) print(self.bot_com, end="", file=fout) else: print("#STOP", end="", file=fout)