[Errno 2} No such file or directory

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Johannes_1991
User
Beiträge: 2
Registriert: Donnerstag 11. Oktober 2018, 10:54

Hallo alle,
ich bin neu hier im Forum.
Ich wollte mit Python ein Grundwasssermodell mit dem package flopy erstellen.
Als Benutzeroberfläche verwende ich Pycharm.
Mein Ziel ist es, dass Python nach der Berechnung mir die Ergebnisse als eine Grafik ausgibt.

Mein Code sieht wie folgt aus:

import flopy
import numpy as np

# Assign name and create modflow model obj

filename = 'tutorial1'
mf = flopy.modflow.Modflow(filename, exe_name='mf2005')

# Model domain and grid definition
Lx = 1000
Ly = 1000
ztop = 0
zbot = -50
nlay = 1
nrow = 10
ncol = 10
delr = Lx/ncol
delc = Ly/nrow
delv = (ztop-zbot)/nlay
botm = np.linspace(ztop, zbot, nlay+1)

# create the discretization object
dis = flopy.modflow.ModflowDis(mf, nlay, nrow, ncol, delr=delr, delc=delc, top=ztop, botm=botm[1:])

# Variables fpr BAS Package
ibound = np.ones((nlay, nrow, ncol), dtype=np.int32)
ibound[:, :, :0] = -1
ibound[:, :, :-1] = -1
strt = np.ones((nlay, nrow, ncol), dtype=np.float32)
strt[:, :, 0] = 10
strt[:, :, -1] = 0
bas = flopy.modflow.ModflowBas(mf, ibound=ibound, strt=strt)

# Layer-Property
lpf = flopy.modflow.ModflowLpf(mf, hk=10., vka=10., ipakcb=53)

# output
spd = {(0, 0): ['print head', 'print budget', 'save head', 'save budget']}
oc = flopy.modflow.ModflowOc(mf, stress_period_data=spd, compact=True)

# Gradient
pcg = flopy.modflow.ModflowPcg(mf)

mf.write_input()

import matplotlib.pyplot as plt
import flopy.utils.binaryfile as bf

from tutorial1 import filename

plt.subplot(1,1,1,aspect='equal')
hds = bf.HeadFile(filename+'.hds')
head = hds.get_data(totim=1.0)
levels = np.arange(1,10,1)
extent = (delr/2., Lx - delr/2., Ly - delc/2., delc/2.)
plt.contour(head[0, :, :], levels=levels, extent=extent)
plt.savefig('tutorial1a.png')

Leider erhalte ich immer die Fehlernachricht:

Traceback (most recent call last):
File "C:/Users/Johannes/PycharmProjects/getting_started/heads.py", line 7, in <module>
hds = bf.HeadFile(filename+'.hds')
File "C:\Users\Johannes\PycharmProjects\getting_started\venv\lib\site-packages\flopy\utils\binaryfile.py", line 436, in __init__
precision = get_headfile_precision(filename)
File "C:\Users\Johannes\PycharmProjects\getting_started\venv\lib\site-packages\flopy\utils\binaryfile.py", line 202, in get_headfile_precision
f = open(filename, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: 'tutorial1.hds'

Der Code stammt aus einem Beispiel und wurde als einfaches Einstiegstutorial beschrieben.

Ich bin für jeden Ratschlag offen.
Danke für eure Hilfe.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo liegt die Datei `tutorial1.hds`? Wird die erst mit `write_input` erzeugt? Und wird da die Endung automatisch angehängt?

Ein Modul (hier tutorial1) sollte eigentlich nichts machen außer Konstanten und Funktionen zu definieren. Es sollte also alles in einer Funktion stehen, die dann vom Hauptskript aus aufgerufen wird. Etwa so:

Code: Alles auswählen

import flopy
import numpy as np

def generate_modflow(filename):
    """ Assign name and create modflow model obj """
    mf = flopy.modflow.Modflow(filename, exe_name='mf2005')

    # Model domain and grid definition
    Lx = 1000
    Ly = 1000
    ztop = 0
    zbot = -50
    nlay = 1
    nrow = 10
    ncol = 10
    delr = Lx/ncol
    delc = Ly/nrow
    delv = (ztop-zbot)/nlay
    botm = np.linspace(ztop, zbot, nlay+1)

    # create the discretization object
    dis = flopy.modflow.ModflowDis(mf, nlay, nrow, ncol, delr=delr, delc=delc, top=ztop, botm=botm[1:])

    # Variables für BAS Package
    ibound = np.ones((nlay, nrow, ncol), dtype=np.int32)
    ibound[:, :, :0] = -1
    ibound[:, :, :-1] = -1
    strt = np.ones((nlay, nrow, ncol), dtype=np.float32)
    strt[:, :, 0] = 10
    strt[:, :, -1] = 0
    bas = flopy.modflow.ModflowBas(mf, ibound=ibound, strt=strt)

    # Layer-Property
    lpf = flopy.modflow.ModflowLpf(mf, hk=10., vka=10., ipakcb=53)

    # output
    spd = {(0, 0): ['print head', 'print budget', 'save head', 'save budget']}
    oc = flopy.modflow.ModflowOc(mf, stress_period_data=spd, compact=True)

    # Gradient
    pcg = flopy.modflow.ModflowPcg(mf)

    mf.write_input()
Und das Hauptprogramm:

Code: Alles auswählen

import matplotlib.pyplot as plt
import flopy.utils.binaryfile as bf

from tutorial1 import generate_modflow

filename = 'tutorial1'

generate_modflow(filename)
plt.subplot(1,1,1,aspect='equal')
hds = bf.HeadFile(filename+'.hds')
head = hds.get_data(totim=1.0)
levels = np.arange(1,10,1)
extent = (delr/2., Lx - delr/2., Ly - delc/2., delc/2.)
plt.contour(head[0, :, :], levels=levels, extent=extent)
plt.savefig('tutorial1a.png')
Bei `ibound[:, :, :0] = -1` ist wahrscheinlich der : vor der 0 zu viel, weil sonst versucht man eine leere Matrix mit -1 zu füllen. Die Zeile danach sieht genauso falsch aus.
Antworten