Lammps: „displace_box xy“ auf „change_box“ migrieren

Wenn man LAMMPS-Skripte von vorhergehenden Projekten auf die aktuelle Version portiert, stolpert man ab und zu über geänderte Funktionen. Eine von diesen ist displace_box, welche durch die mächtigere change_box ersetzt wurde.

Für einen Scherversuch verwendete das ursprüngliche Skript

displace_box    all yz delta ${lambda}

Die moderne Formulierung ist recht einfach, lediglich remap muss hinzugefügt werden, was damals noch das Standardverhalten war.

change_box    all yz delta ${lambda} remap

Nun wird das aber so nicht funktionieren: yz ist eine Manipulation, die nur auf triklinen Kristallen funktioniert – auf orthogonalen logischerweise nicht, da der Winkel ja grade geändert werden soll.

Also sollte man nach dem Erstellen/Laden der Atome das System auf triclinic umstellen:

read_data     data.${latname}.eam
change_box    all triclinic remap

— und dann beim nächsten run feststellen, dass der Simulation angeblich Atome abhanden gekommen sind, obwohl sich an den Dimensionen nichts geändert hat. Die Lösung ist relativ einfach: man sage Lammps, dass es die Simulationsgrenzen mitführen soll, indem man sie erst shrinkwrappt und hinterher wieder auf den alten Wert (hier periodisch in allen Raumrichtungen) zurückstellt:

read_data     data.${latname}.eam
change_box    all boundary s s s triclinic remap boundary p p p

Das ganze sollte man vor der Relaxation machen, damit im Zweifelsfall die Randbedingungen wieder passen.

Das Problem ist übrigens auch im mitgelieferten Beispiel examples\ELASTIC drin. Dort am Besten in der init.mod anpassen.

Immerhin bestanden

Wenn auch nicht sonderlich gut.

Aber wenn man sich anguckt, wofür Punkte abgezogen wurden:
6 Stück für fehlende Koordinatensystem in Skizzen
4 Stück für Übernehmen der Gleichung aus Formelsammlung ohne Herleitung
2 Stück für Dämlichkeiten meinerseits (3*1=9…)
(okay und der Rest war auch gerechtfertigt)

Ob es neben dem „woher?“-Kommentar Punktabzug gab, als ich ohne Gleichgewicht für FL die einzige Längskraft direkt eingesetzt hab, war nicht so wirklich klar. Da ich das bei trivial ersichtlichen Sachen nie gemacht hab, hätte sich das bestimmt auch nochmal gelohnt.

Ergo hab ich „moralisch“ ja quasi 10 Punkte mehr, 57 statt 47. Und ich bin mit Martin Sonneborn bzw. der PARTEI gleichgezogen: so gut, dass nur noch Formfehler helfen uns loszuwerden 🙂

Thank you for your cooperation…

Ich drücke mich ja gerne vor vielem. Unter anderem Bloggen… 😉

Bei einem aber geht das ganz schlecht: Zensus. Und da die bei uns fast alles was in einem Wohnheim lebt mit genau gezielten Clusterbombs „zufällig ausgewählt“ wurde, kann man ja gleich mal was bloggenswertes draus machen und den schönen tollen Online-Prozess testen. Kurz vorneweg: das hab ich nur deswegen gemacht, weil ich nur den einfachen Bogen bekommen hab, der keine Daten enthält die nicht auch bei der DENIC und in der EntwicklerEcke abfragbar und aggregierbar wären. Sicher ist sicher.

Zunächst einmal begrüßt mich ein neuer privater Tab von Opera – you never know what’s coming next. Von dort aus also wie auf dem Formblatt aufgedruckt die Seite „zensus2011.de“ aufgerufen. Sauber strukturiert kann ich hier auswählen was ich tun will – Ergebnisse einreichen wird sehr prominent genau in der Mitte präsentiert. Hier entscheide ich mich für den violetten Bogen, denn obwohl die Farben auf dem Bildschirm doch sehr anders aussehen als das leichte Fliederlila des Papiers, ist das doch immer noch am passendsten.

Daraufhin wird mir nochmal erklärt, woran ich in meinem Browser sehe, dass ich SSL benutze. Lobenswert, aber mein Browser ist nicht dabei (ich erwähnte schon: dafür ist Opera dran). Whatever, ich weiß es ja.
Auf einer externen Domain (www.zensus2011-befragungen.de) werde ich dann von einem schmucklosen Loginfenster begrüßt, das mir die langen alphanumerischen Codes zur Authentifizierung abnimmt. Auf Anhieb ohne Vertipper, ich bin stolz auf mich.

Das folgende Formular ist exakt so aufgebaut wie das Papier, ist aber an die Verwendung von Informationstechnik angepasst: Auswahlfelder für die Nationalität sind ComboBoxen statt 3-Letter-Feldern in die man dann die ISO-CCs selber eintragen darf, wie es auf dem Papier gelöst ist; Multiple-Choice-Fragen sind ordentlich als RadioGroup gelöst und Freitextfelder gibts eh nur für den Namen. Oh, und Datumsangaben.

Jedenfalls, kann man schnell durchklicken, wenn man Fragen überspringen darf wird das direkt kenntlich gemacht.

11 Fragen später habe ich zwar keine Million gewonnen, aber das Ding fertig und bin bereit, Prüfen und Absenden zu drücken. Nochmal bekomme ich eine Zusammenfassung dessen was ich angeklickert habe und kann dieses dann bestätigen.

zensus
Und fertig.

Ich muss ja sagen: das geht ja glatt mal. Zumal ich auch nur die Fragen bekommen hab, die man durchaus ohne Datenschutzprobleme beantworten kann: nämlich nur die Stammdaten, die zwar gerne zur Identitätsprüfung genommen werden die aber sowieso jeder weiß. Da bin ich aber auch relativ gut weggekommen, das ist hier nicht der Regelfall. Eher die Ausnahme, zwei Interviews heute im Bekanntenkreis waren umfangreicher.

Und nun zur Technik… viel gibt es da nicht. Das System basiert auf IDEV, wurde aber offenbar verändert/aktualisiert, denn das „normale“ IDEV läuft mit Opera gar nicht und erwartet stattdessen einen IE 5.5.
Das JavaScript, welches die Plausibilitätsprüfung und die Fragen-Ausblendung macht ist vermutlich auch aus dieser Zeit: völlig konfus, sieht aber nicht nach einem Scrambler aus. Das hat jemand wirklich so programmiert. Es ist sehr erstaunlich, dass das Ganze funktioniert… und das tut es wie gesagt wirklich.

Immerhin: jetzt wissen SIE, dass ich damals auf’m Bürgeramt auch schon nicht gelogen hab. Toll.

Kleine Hacks erhalten die Freundschaft

Heute mal wieder was aus der Bastelkiste:

Unser Institut für Mechanik hat für Belege und Praktika ein schickes kleines Delphi-Programm, welches die Aufgabenblätter generieren kann. Das ganze hat den Zweck, dass die Aufgaben sich mit der Matrikelnummer personalisieren lassen (RandSeed) und man seine berechneten Werte mittels dieses Programms direkt auf Korrektheit prüfen lassen kann.

Nun sind die Aufgaben nicht immer so ganz ohne, und manchmal hilft es ungemein, nicht nur Eingabefelder zu haben, die einem sagen ob man richtig oder falsch lag, sondern auch mal spicken zu können, wo denn der Fehler liegt.

Aber erstmal eine kleine Anekdote.
Man sitzt also in einer Vorlesung, und macht nebenbei mit einem Kommilitonen ein solches Übungsbelegblatt. Die Gleichungen sehen auch erstmal alle ganz schön aus. Nun hat man ja einen Laptop dabei, kann also die Ergebnisse kontrollieren. Und siehe da: nix passt.
Was tut man also? Man versucht herauszubekommen, was das Programm denn als Zahlenwert erwartet. Irgendwie dachte ich mir (warum, weiß ich auch nicht; vielleicht wars ja Schicksal 😛 ) dass mir ein Hex-Editor weiterhelfen könnte. Konnte er natürlich nicht, hat aber soweit geholfen, als dass ich festgestllt habe, dass es zu jedem Aufgabenblatt 2 Definitionen gibt. Eine generiert die Aufgabenstellung, und eine generiert… Moment. Was ist das? Ein Lösungsweg!
Es gibt also nicht nur 2 Programmversionen (wie schon das _student im Dateinamen vermuten lässt), sondern zu allem Überfluss enthält die selbe Echse offenbar beide Teile. Irgendwo muss also umgeschaltet werden, was gemacht werden soll.

Nachdem man seinen IDA Pro wiedergefunden und gestartet hat, wird also mal das Programm hineingeworfen. Etwas warten, und die Programmstelle wieder finden. Das macht sich recht einfach, immerhin ist der Titel des Belegs ein sehr eindeutiges Merkmal (im Code-Segment jedenfalls). Nun muss man nur noch die XRefs zurückverfolgen, um rauszubekommen wo der wichtige Aufruf erfolgt. Der ist nämlich da, wo basierend auf einem Vergleich der eine oder andere Zweig (=Ausgabeanweisungen) aufgerufen wird. It always boils down to a simple comparision.
Der letzte Schritt (wo allerdings leider die Vorlesung zuende war; der Teil mit dem „IDA wiederfinden“ hatte etwas lange gedauert) ist es nun nur noch, die Zuweisung an die überprüfte Variable zu finden. Auch hier hilft wieder die XRefs-Funktion. Es gibt nämlich nur eine, und die schreibt eine $00, also den Ordinalwert für false. Man könnte also sagen, die betreffende Variable ist sowas wie IsTutorenVersion.
Kurzer Patch in der Exe der (wir wissen ja: es ist Delphi) eine $01 (für true) stattdessen schreibt, und fertig.

Wer das liest und ein berechtigtes Interesse hat, der hat auch Wege mich nach dem Teil zu fragen. Das ist nun grade ein Hack, bei dem ich garantiert kein Responsible Disclosure machen werde. Das wäre nämlich sehr verantwortungslos. Mir selbst gegenüber 😀

Das wars erstmal von meiner Seite,
Martok