package require Rappture set installdir [file dirname [info script]] if {$installdir == "."} { set installdir [pwd] } #lib = rpLibrary(argv[1]); set driver [Rappture::library [lindex $argv 0]] # rpGetString( lib,"input.string(script).current",&script ); set script1 [$driver get input.(script).current] #err = rpGetString(lib,"input.string(datafilename).current",&filename); set datafilename [$driver get input.(datafilename).current] # err = rpGetString(lib,"input.string(datafile).current",&data); set datafile [$driver get input.(datafile).current] #-------- write the script file locally so lammps can read it -- set filehandle [open "script" w] puts $filehandle $script1 close $filehandle #------- write the data file locally so lammps can read it --- #bool writeDataFile(RpLibrary* lib, const char * Xfilename) #1 means strings are equal set writeDataFile [string equal $datafilename "None"] if { $writeDataFile != 1 } { set filehandle [open $datafilename w] puts $filehandle $datafile close $filehandle } #----------- exec lammps ------------------------------------- # fpout = popen("./lmp_linux -log logfile", "w"); #set lammpsExec [file join $installdir .. bin lmp_linux] set lammpsExec lammps #set status [catch {eval Rappture::exec $lammpsExec -in script -screen logfile} out] source [file join $installdir submit.tcl] # returnStatus = fwrite( script, strlen(script),1,fpout) #------- get output -------------------------------- set logfile "log.lammps" if { [ file exists $logfile ] == 1 } { set fsize [file size $logfile] set filehandle [open $logfile r] set log [read $filehandle $fsize] close $filehandle $driver put -append yes -type string output.(dump).current $log } else { $driver put -append yes -type string output.(dump).current "Sorry, no log.lammps file created" } #--------- clean up ---------- if { $writeDataFile != 1 } { file delete $datafilename } file delete "script" Rappture::result $driver exit 0