Σπίτι Παραδείγματα Στιγμιότυπα οθόνης Εγχειρίδιο χρήστη Λογότυπο της Bluesky YouTube ☰
OghmaNano Πλατφόρμα προσομοίωσης πολλαπλών φυσικών πεδίων για οπτοηλεκτρονικές συσκευές και φωτονικά συστήματα. Λήψη Οδηγός γρήγορης εκκίνησης

Δημιουργία σεναρίων PowerShell

1. Εισαγωγή

Στο OghmaNano, η δημιουργία σεναρίων PowerShell λειτουργεί μέσω της άμεσης επεξεργασίας των αρχείων διαμόρφωσης της προσομοίωσης στον δίσκο και στη συνέχεια της ενεργοποίησης της μηχανής προσομοίωσης (oghma_core.exe) για την εκτέλεση του μοντέλου. Αυτή η ενότητα περιγράφει λεπτομερώς αυτή τη διαδικασία.

2. Εκτέλεση αρχείων προσομοίωσης με το PowerShell.

Μια προσομοίωση OghmaNano ορίζεται εξ ολοκλήρου από ένα μόνο αρχείο διαμόρφωσης JSON, sim.json. Αυτό το αρχείο περιέχει την πλήρη κατάσταση της προσομοίωσης, συμπεριλαμβανομένης της δομής της συσκευής, των παραμέτρων των υλικών, των αριθμητικών ρυθμίσεων και της διαμόρφωσης εξόδου. Σε πολλές περιπτώσεις, sim.json υπάρχει ήδη ως ένα κανονικό αρχείο μέσα στον κατάλογο της προσομοίωσης.

Όταν εκτελείτε το OghmaNano μέσω του PowerShell, το σενάριο διαβάζει το αρχείο sim.json στη μνήμη, τροποποιεί μία ή περισσότερες παραμέτρους και στη συνέχεια αποθηκεύει την ενημερωμένη μορφή JSON ξανά στον δίσκο.

Είναι ζωτικής σημασίας το PowerShell να εκτελείται oghma_core.exe με τον κατάλογο εργασίας ρυθμισμένο στον κατάλογο της προσομοίωσης – δηλαδή, στον κατάλογο που περιέχει το sim.json (και το sim.oghma). Η μηχανή προσομοίωσης διαβάζει πάντα τα αρχεία εισόδου από τον τρέχοντα κατάλογο εργασίας, επομένως, εάν ο κατάλογος εργασίας είναι λανθασμένος, η προσομοίωση θα αποτύχει ή θα εκτελέσει το λάθος μοντέλο.

Αυτός ο διαχωρισμός των αρμοδιοτήτων είναι σκόπιμος και σαφής: το PowerShell είναι υπεύθυνο για τον καθορισμό των αλλαγών που θα πραγματοποιηθούν στην προσομοίωση, ενώ το OghmaNano είναι υπεύθυνο για την εκτέλεση των φυσικών υπολογισμών χρησιμοποιώντας τα αρχεία που υπάρχουν στον τρέχοντα κατάλογο.

Το παρακάτω παράδειγμα απεικονίζει αυτή τη διαδικασία, φορτώνοντας το sim.json, τροποποιώντας την κινητικότητα των φορέων της πρώτης στρώσης της συσκευής, αποθηκεύοντας ξανά τη νέα διαμόρφωση στον δίσκο και, στη συνέχεια, εκτελώντας την προσομοίωση από τον κατάλογο προσομοίωσης.


# Set this to your simulation folder (must contain sim.json / sim.oghma)
$sim_dir = "C:\path\to\your\simulation"

# Read sim.json
$sim_path = Join-Path $sim_dir "sim.json"
$txt = Get-Content -Path $sim_path -Raw
$data = $txt | ConvertFrom-Json

# Edit a value: mobility of segment1 (same JSON path as the Python/MATLAB pages)
$data.epitaxy.segment1.shape_dos.mue_y = 1.0

# Write sim.json back to disk
$out = $data | ConvertTo-Json -Depth 200
Set-Content -Path $sim_path -Value $out -Encoding UTF8

# Run the simulation (working directory must be the simulation folder)
$orig_dir = Get-Location
Set-Location $sim_dir
& "oghma_core.exe"
Set-Location $orig_dir

Εάν η προσομοίωση στο sim.json έχει ρυθμιστεί ώστε να εκτελεί μια καμπύλη J–V, το OghmaNano θα δημιουργήσει αρχεία εξόδου στον φάκελο της προσομοίωσης, τα οποία θα περιέχουν ποσότητες όπως η PCE, ο συντελεστής πλήρωσης, το \(J_{sc}\) και το \(V_{oc}\).

3. Ανάκτηση αποτελεσμάτων

Πολλά από τα αρχεία εξόδου του OghmaNano είναι γραμμένα σε μορφή JSON. Μια συνηθισμένη διαδικασία είναι η ανάγνωση του sim_info.dat, η εξαγωγή μιας αριθμητικής τιμής που αποτελεί δείκτη απόδοσης (για παράδειγμα, Voc) και η προσθήκη της σε ένα αρχείο κειμένου για μελλοντική ανάλυση.

Το παρακάτω παράδειγμα διαβάζει το περιεχόμενο του αρχείου sim_info.dat και προσθέτει την τιμή του \(V_{oc}\) σε ένα ξεχωριστό αρχείο κειμένου.


# Must be run from (or pointed at) a completed simulation directory
$sim_dir = "C:\path\to\your\simulation"
$info_path = Join-Path $sim_dir "sim_info.dat"

$txt = Get-Content -Path $info_path -Raw
$info = $txt | ConvertFrom-Json
$voc = $info.Voc

# Append to a text file (one Voc per line)
$out_path = Join-Path $sim_dir "out.dat"
Add-Content -Path $out_path -Value ("{0}" -f $voc)

3. Πιο σύνθετες προσομοιώσεις.

Σε πολλές διαδικασίες δημιουργίας σεναρίων, θα θέλετε να εκτελέσετε την ίδια βασική προσομοίωση πολλές φορές, χρησιμοποιώντας διαφορετικές τιμές παραμέτρων και διατηρώντας κάθε εκτέλεση απομονωμένη σε έναν ξεχωριστό φάκελο. Αυτός είναι ο απλούστερος τρόπος για να διατηρήσετε τα αποτελέσματα οργανωμένα και να αποφύγετε την ακούσια αντικατάσταση των προηγούμενων αποτελεσμάτων.

Το παρακάτω παράδειγμα δημιουργεί ένα σύνολο καταλόγων που αντιστοιχούν σε τέσσερις κινητικότητες (1e-5, 1e-6, 1e-7, 1e-8). Για κάθε κατάλογο, εκτελεί τις ακόλουθες ενέργειες:

  1. Δημιουργεί τον φάκελο (εάν δεν υπάρχει ήδη).
  2. Αντιγράφει το τρέχον sim.json σε αυτόν τον κατάλογο.
  3. Επεξεργάζεται το αντίγραφο sim.json για να ορίσει την επιθυμητή κινητικότητα.
  4. Αλλάζει τον τρέχοντα κατάλογο εργασίας στον συγκεκριμένο κατάλογο.
  5. Εκτελεί τον επιλυτή στον συγκεκριμένο κατάλογο, παράγοντας αποτελέσματα που αποθηκεύονται τοπικά για αυτήν την εκτέλεση.

Αυτό το μοτίβο αποτελεί τη βάση της δημιουργίας σεναρίων παρτίδας στο OghmaNano: ένας φάκελος για κάθε εκτέλεση, ένα αρχείο διαμόρφωσης για κάθε εκτέλεση και ένας καθαρός φάκελος εξόδου για κάθε τιμή παραμέτρου.


# The script should be started in the base simulation directory
# (i.e. the directory containing the reference sim.json).
$base_dir = (Get-Location).Path

$mobilities = @(1e-5, 1e-6, 1e-7, 1e-8)
$src_sim = Join-Path $base_dir "sim.json"

foreach ($mu in $mobilities) {
    $run_name = ("mu_{0:0e}" -f $mu)
    $run_dir  = Join-Path $base_dir $run_name

    if (-not (Test-Path -Path $run_dir -PathType Container)) {
        New-Item -ItemType Directory -Path $run_dir | Out-Null
    }

    # Copy the base sim.json into the run directory
    $dst_sim = Join-Path $run_dir "sim.json"
    Copy-Item -Path $src_sim -Destination $dst_sim -Force

    # Load the copied sim.json and edit the mobility in THAT copy
    $txt  = Get-Content -Path $dst_sim -Raw
    $data = $txt | ConvertFrom-Json
    $data.epitaxy.segment1.shape_dos.mue_y = [double]$mu

    $out = $data | ConvertTo-Json -Depth 200
    Set-Content -Path $dst_sim -Value $out -Encoding UTF8

    # Change into the run directory and execute the solver there
    Push-Location $run_dir
    & "oghma_core.exe"
    Pop-Location
}

4. Ανάκτηση αποτελεσμάτων

Αφού εκτελεστεί μια σειρά προσομοιώσεων σε ξεχωριστούς καταλόγους (π.χ. mu_1e-05, mu_1e-06, ...), το επόμενο βήμα είναι να εξαχθεί μια βασική παράμετρος απόδοσης από κάθε εκτέλεση και να απεικονιστεί η τάση. Ένα κοινό παράδειγμα είναι η ανάγνωση της τάσης ανοιχτού κυκλώματος \(V_{oc}\) από το αρχείο sim_info.dat σε κάθε κατάλογο και η γραφική της παράσταση σε σχέση με την αντίστροφη κινητικότητα \(1/\mu\).

Το παρακάτω σενάριο σαρώνει ένα καθορισμένο σύνολο καταλόγων, τα οποία αντιστοιχούν στις κινητικότητες 1e-5, 1e-6, 1e-7, 1e-8, και για κάθε κατάλογο:

  1. Φορτώνει sim_info.dat ως JSON.
  2. Αποσπάσματα Voc.
  3. Υπολογίζει το \(1/\mu\) χρησιμοποιώντας την κινητικότητα που σχετίζεται με τον συγκεκριμένο κατάλογο.
  4. Δημιουργεί ένα μικρό αρχείο περίληψης (voc_vs_inv_mobility.dat).
  5. Γραφήματα \(V_{oc}\) έναντι \(1/\mu\).

# Run this from the BASE directory that contains the run folders
# (mu_1e-05, mu_1e-06, ...). If not, set base_dir explicitly.
$base_dir = (Get-Location).Path

$mobilities = @(1e-5, 1e-6, 1e-7, 1e-8)

$inv_mu = @()
$vocs   = @()

foreach ($mu in $mobilities) {
    $run_dir = Join-Path $base_dir ("mu_{0:0e}" -f $mu)
    $info_path = Join-Path $run_dir "sim_info.dat"

    if (-not (Test-Path -Path $info_path -PathType Leaf)) {
        throw ("Missing sim_info.dat in: {0}" -f $run_dir)
    }

    $txt  = Get-Content -Path $info_path -Raw
    $info = $txt | ConvertFrom-Json

    $vocs   += [double]$info.Voc
    $inv_mu += (1.0 / [double]$mu)
}

# Write a small summary table to disk
$out_path = Join-Path $base_dir "voc_vs_inv_mobility.dat"
"# inv_mobility(1/mu)    Voc(V)" | Set-Content -Path $out_path -Encoding UTF8
for ($i = 0; $i -lt $mobilities.Count; $i++) {
    ("{0:e6}    {1}" -f $inv_mu[$i], $vocs[$i]) | Add-Content -Path $out_path -Encoding UTF8
}

# Plot Voc vs inverse mobility
# PowerShell does not have a built-in plotting window. The simplest workflow is to
# load voc_vs_inv_mobility.dat into your plotting tool of choice (MATLAB, Python, Excel, etc.).