Class: CodeRunner::Ecom
- Inherits:
-
Run::FortranNamelist
- Object
- Run::FortranNamelist
- CodeRunner::Ecom
- Defined in:
- lib/ecomcrmod/ecom.rb
Overview
This is a customised subclass of the CodeRunner::Run class which allows CodeRunner to run and analyse the Grad Shafranov solver ECOM (see Lee & Cerfon, CPC, 2015)
Class Method Summary collapse
Instance Method Summary collapse
- #check_parameters ⇒ Object
- #generate_component_runs ⇒ Object
-
#generate_input_file ⇒ Object
This is a hook which gets called just before submitting a simulation.
- #get_status ⇒ Object
- #input_file_extension ⇒ Object
- #input_file_header ⇒ Object
-
#parameter_string ⇒ Object
Parameters which follow the Trinity executable, in this case just the input file.
- #parameter_transition ⇒ Object
-
#print_out_line ⇒ Object
A hook which gets called when printing the standard run information to the screen using the status command.
-
#process_directory_code_specific ⇒ Object
This method, as its name suggests, is called whenever CodeRunner is asked to analyse a run directory.
-
#restart(new_run) ⇒ Object
Modify new_run so that it becomes a restart of self.
- #vim_output ⇒ Object (also: #vo)
-
#write_input_file ⇒ Object
This command uses the infrastructure provided by Run::FortranNamelist, provided by CodeRunner itself.
Class Method Details
.defaults_file_header ⇒ Object
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/ecomcrmod/ecom.rb', line 192 def self.defaults_file_header "############################################################################\n# #\n# Automatically generated defaults file for the ECOM CodeRunner module #\n# #\n# This defaults file specifies a set of defaults for ECOM which are #\n# used by CodeRunner to set up and run ECOM simulations. #\n# #\n############################################################################\n\n# Created: \#{Time.now.to_s} \n\n@defaults_file_description = \"\"\n" end |
Instance Method Details
#check_parameters ⇒ Object
114 115 |
# File 'lib/ecomcrmod/ecom.rb', line 114 def check_parameters end |
#generate_component_runs ⇒ Object
137 138 139 |
# File 'lib/ecomcrmod/ecom.rb', line 137 def generate_component_runs #puts "HERE" end |
#generate_input_file ⇒ Object
This is a hook which gets called just before submitting a simulation. It sets up the folder and generates any necessary input files.
106 107 108 109 110 111 112 |
# File 'lib/ecomcrmod/ecom.rb', line 106 def generate_input_file check_parameters if @restart_id @runner.run_list[@restart_id].restart(self) end write_input_file end |
#get_status ⇒ Object
157 158 159 160 161 162 163 164 165 |
# File 'lib/ecomcrmod/ecom.rb', line 157 def get_status if not @running if FileTest.exist? 'trinity.out' @status = :Complete else @status = :Failed end end end |
#input_file_extension ⇒ Object
210 211 212 |
# File 'lib/ecomcrmod/ecom.rb', line 210 def input_file_extension '' end |
#input_file_header ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/ecomcrmod/ecom.rb', line 170 def input_file_header "!==============================================================================\n! ECOM INPUT FILE automatically generated by CodeRunner \n!==============================================================================\n!\n! ECOM is a code which solves the Grad Shafranov equation \n! \n! See Lee & Cerfon, Comp Phys Comm, 2015\n!\n! CodeRunner is a framework for the automated running and analysis \n! of large simulations. \n!\n! See http://coderunner.sourceforge.net\n! \n! Created \#{Time.now.to_s}\n! by CodeRunner version \#{CodeRunner::CODE_RUNNER_VERSION.to_s}\n!\n!==============================================================================\n\n" end |
#parameter_string ⇒ Object
Parameters which follow the Trinity executable, in this case just the input file.
130 131 132 |
# File 'lib/ecomcrmod/ecom.rb', line 130 def parameter_string " ecom.in" end |
#parameter_transition ⇒ Object
134 135 |
# File 'lib/ecomcrmod/ecom.rb', line 134 def parameter_transition end |
#print_out_line ⇒ Object
A hook which gets called when printing the standard run information to the screen using the status command.
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/ecomcrmod/ecom.rb', line 40 def print_out_line #p ['id', id, 'ctd', ctd] #p rcp.results.zip(rcp.results.map{|r| send(r)}) name = @run_name name += " (res: #@restart_id)" if @restart_id name += " real_id: #@real_id" if @real_id beginning = sprintf("%2d:%d %-60s %1s:%2.1f(%s) %3s%1s", @id, @job_no, name, @status.to_s[0,1], @run_time.to_f / 60.0, @nprocs.to_s, percent_complete, "%") if ctd #beginning += sprintf("Q:%f, Pfusion:%f MW, Ti0:%f keV, Te0:%f keV, n0:%f x10^20", fusionQ, pfus, ti0, te0, ne0) end beginning += " ---#{@comment}" if @comment beginning end |
#process_directory_code_specific ⇒ Object
This method, as its name suggests, is called whenever CodeRunner is asked to analyse a run directory. This happens if the run status is not :Complete, or if the user has specified recalc_all(-A on the command line) or reprocess_all (-a on the command line).
147 148 149 150 151 152 153 154 155 |
# File 'lib/ecomcrmod/ecom.rb', line 147 def process_directory_code_specific get_status #p ['id is', id, 'ctd is ', ctd] #if ctd #get_global_results #end #p ['fusionQ is ', fusionQ] #@percent_complete = completed_timesteps.to_f / ntstep.to_f * 100.0 end |
#restart(new_run) ⇒ Object
Modify new_run so that it becomes a restart of self. Adusts all the parameters of the new run to be equal to the parameters of the run that calls this function, and sets up its run name correctly
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/ecomcrmod/ecom.rb', line 60 def restart(new_run) #new_run = self.dup (rcp.variables).each{|v| new_run.set(v, send(v)) if send(v)} #if @flux_option == "gs2" #gs2_runs.each_with_index do |run, i| #CodeRunner::Gs2.rcp.variables.each{|v| new_run.gs2_runs[i].set(v, run.send(v)) if run.send(v)} #end #end #@naming_pars.delete(:preamble) #SUBMIT_OPTIONS.each{|v| new_run.set(v, self.send(v)) unless new_run.send(v)} ##(rcp.results + rcp.gs2_run_info).each{|result| new_run.set(result, nil)} new_run.is_a_restart = true new_run.restart_id = @id new_run.restart_run_name = @run_name new_run.nopt = -1 #new_run.init_option = "restart" #new_run.iternt_file = @run_name + ".iternt" #new_run.iterflx_file = @run_name + ".iterflx" #new_run.init_file = @run_name + ".tmp" #@runner.nprocs = @nprocs if @runner.nprocs == "1" # 1 is the default so this means the user probably didn't specify nprocs #raise "Restart must be on the same number of processors as the previous run: new is #{new_run.nprocs.inspect} and old is #{@nprocs.inspect}" if !new_run.nprocs or new_run.nprocs != @nprocs ### @runner.parameters.each{|var, value| new_run.set(var,value)} if @runner.parameters ### ep @runner.parameters new_run.run_name = nil new_run.naming_pars = @naming_pars new_run.update_submission_parameters(new_run.parameter_hash.inspect, false) if new_run.parameter_hash new_run.naming_pars.delete(:restart_id) new_run.generate_run_name #new_run.run_name += '_t' eputs 'Copying CHEASE Restart file' ##system "ls #@directory" FileUtils.cp("#@directory/NOUT", "#{new_run.directory}/NIN") ##########if new_run.flux_option == "gs2" and @flux_option == "gs2" ##########for i in 0...n_flux_tubes ##########new_run.gs2_runs[i].directory = new_run.directory + "/flux_tube_#{i+1}" ##########FileUtils.makedirs(new_run.gs2_runs[i].directory) ###########ep ['gs2_runs[i] before', gs2_runs[i].nwrite, new_run.gs2_runs[i].nwrite, new_run.gs2_runs[i].parameter_hash] ##########gs2_runs[i].restart(new_run.gs2_runs[i]) ###########ep ['gs2_runs[i] after', gs2_runs[i].nwrite, new_run.gs2_runs[i].nwrite, new_run.gs2_runs[i].parameter_hash] ###########new_run.gs2_runs[i].run_name = new_run.run_name + (i+1).to_s ##########end ##########end ##@runner.submit(new_run) #new_run end |
#vim_output ⇒ Object Also known as: vo
119 120 121 |
# File 'lib/ecomcrmod/ecom.rb', line 119 def vim_output system "vim -Ro #{output_file} #{error_file}" end |
#write_input_file ⇒ Object
This command uses the infrastructure provided by Run::FortranNamelist, provided by CodeRunner itself.
125 126 127 |
# File 'lib/ecomcrmod/ecom.rb', line 125 def write_input_file File.open("ecom.in", 'w'){|file| file.puts input_file_text} end |