Hallo allerseits, ich bin hier neu im Forum und hoffe auf weitere Hilfe. Ziel ist die automatisierte Simulation von zwei Vergleichseinstellungen von zwei verschiedenen Materialien. Dazu sind die Dateien "Hub_00a_Kupfer-000000.sim" und "Hub_00a_Stahl-000000.sim" als Startdateien vorhanden.
Angelegt habe ich die Arrays:
#Hubanzahl: 20 [0 1 ... 19] Hubanzahlarray=(00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19) #Hubarten: 2 [0 1] Hubartarray=(a b) #Materialien: 2 [0 1] #Materialarray=(Kupfer Stahl) #Zeitschritte: 41 [0 1 2 ... 40] Zeitschrittarray=(000000 005000 015000 020000 030000 035000 045000 050000 060000 065000 075000 080000 090000 095000 105000 110000 120000 125000 135000 140000 150000 155000 165000 170000 180000 185000 195000 200000 210000 215000 225000 230000 240000 245000 255000 260000 270000 275000 285000 290000 300000)
Aufbauend auf den Startdateien wird eine Simulation gestartet:
/appl/jgen/bin/jgen -s -a Starccm -b prod -v 11.06.010 -j "Hub_${Hubanzahlarray[0]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[0]}" -m "cpus=128,proj=5ZA1389-00000,time=1000d,mem=9000,buser=vwmrxy0,delfiles=" -o "macgrp=own,macro=,mode=run,userinc="
Die Ausgabe erfolgt als
Hub_${Hubanzahlarray[0]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[1]
6-stellig mit vorangehenden Nullen.
Anschließend soll geprüft werden, ob die Simulation durchgelaufen ist und ob die Datei
Hub_${Hubanzahlarray[0]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[1]
vorhanden ist. Was ich bisher gefunden habe ist folgendes:
if [ -s ./Hub_${Hubanzahlarray[0]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[1]}.sim ] then sleep 100s #vollständiges Herunterladen der Datei führe weitere Befehle mit der neuen Datei aus else warte ein paar Minuten und prüfe erneut auf Vorhandensein der Datei fi
Problem ist hier das warten, falls Datei noch nicht vorhanden ist innerhalb der Schleife sowie der Fehler für die vorangestellten Nullen bei Hubanzahl und Zeitschritt. Der Ausgabedateiname soll dabei immer gleich lang sein, sodass 10#08 mir nicht weitergeholfen hat.
Nach der Prüfung auf Vorhandensein der Datei, folgen der erste auszuführenden Befehle mit
cp -rp "Hub_${Hubanzahlarray[0]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[1]}.sim" "Hub_${Hubanzahlarray[0]}${Hubartarray[1]}_Kupfer}.sim" #kopieren der neu erstellten Datei in neuen Namen /appl/star-cd/admin/ccmver 1106010 starccm+ -powerpre -batch Hub_${Hubanzahlarray[0]}${Hubartarray[1]}_Kupfer.java Hub_${Hubanzahlarray[0]}${Hubartarray[1]}_Kupfer.sim #Makro auf neuen Namen ausführen /appl/jgen/bin/jgen -s -a Starccm -b prod -v 11.06.010 -j "Hub_${Hubanzahlarray[0]}${Hubartarray[1]}_Kupfer" -m "cpus=128,proj=5ZA1389-00000,time=1000d,mem=9000,buser=vwmrxy0,delfiles=" -o "macgrp=own,macro=,mode=run,userinc=" #Simulation mit neuen Namen starten
Folgendes Schema soll das voranschreiten der Parameter der Arrays visualisieren. Jeder Hub besteht aus der Hubart a und danach der Hubart b. Der Zeitschritt erhöht sich mit jedem Mal.
Hub_${Hubanzahlarray[00]}${Hubartarray[1]}_Kupfer-${Zeitschrittarray[1]}.sim Hub_${Hubanzahlarray[01]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[2]}.sim Hub_${Hubanzahlarray[01]}${Hubartarray[1]}_Kupfer-${Zeitschrittarray[3]}.sim Hub_${Hubanzahlarray[02]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[4]}.sim Hub_${Hubanzahlarray[02]}${Hubartarray[1]}_Kupfer-${Zeitschrittarray[5]}.sim Hub_${Hubanzahlarray[03]}${Hubartarray[0]}_Kupfer-${Zeitschrittarray[6]}.sim Hub_${Hubanzahlarray[03]}${Hubartarray[1]}_Kupfer-${Zeitschrittarray[7]}.sim ...
Ein weiteres Problem der Schleifen ist der Zugriff auf die Arrays. In den Schleifen will ich die Arraykastenzahl hochzählen, greife damit aber automatisch auf die Inhalte der Arrays zu, was ein rechnen mit Buchstaben verhindert. Meine Idee für eine Beispielhafte Schleife ist folgende:
for Anzahl in ${Hubanzahlarray[@]}; do Anzahl=$(echo "${Hubanzahlarray[$Anzahl]} + 1"|bc) echo "$Anzahl" done
Leider habe ich keine Idee wie die verschiedenen Schleifen mit verschiedenen Zählungen zu verbinden sind. Bei den Hubarten ist auch nur ein wechseln, kein Zählen nötig, was vermutlich mit einer if-Bedingung gelöst werden kann. Derzeit "löse" ich das Problem indem ich 80 Aufrufe mit den Befehlen und per Hand geänderten Dateinamen aufrufe. Da noch weitere Simulationen folgen sollen, würde ich das aber lieber verbessern wollen und lernen wie man es richtig machen kann. (Die Simulationsbefehle können durch jeden x-beliebigen Befehl ersetzt werden, die Schleifen sind das interessante.)
Vielen Dank für Eure Mühe schon bis hier her gelesen zu haben. Falls Ihr Vorschläge habt immer her damit! Danke schon mal im Vorfeld. Beste Grüße Freddy