From 92e42c992f9f42279df829be5c8d0948b2ad4fa0 Mon Sep 17 00:00:00 2001 From: Joost VandeVondele Date: Fri, 2 Apr 2010 11:50:26 +0000 Subject: [PATCH] all for using an OUTPUT_FILE_NAME when farming svn-origin-rev: 9726 --- src/cp2k_runs.F | 51 +++++++++++++++------------ src/farming_methods.F | 2 ++ src/farming_types.F | 2 ++ src/input_cp2k.F | 9 ++++- tests/FARMING/regtest-1/TEST_FILES | 1 + tests/FARMING/regtest-1/farming-9.inp | 19 ++++++++++ 6 files changed, 60 insertions(+), 24 deletions(-) create mode 100644 tests/FARMING/regtest-1/farming-9.inp diff --git a/src/cp2k_runs.F b/src/cp2k_runs.F index 6547478fd7..312a9518e9 100644 --- a/src/cp2k_runs.F +++ b/src/cp2k_runs.F @@ -790,29 +790,34 @@ CONTAINS ! generate a fresh call to cp2k_run IF (new_rank == 0) THEN - ! generate the output file - WRITE(output_file,'(A12,I5.5)') "FARMING_OUT_",i - CALL parser_create(my_parser,file_name=TRIM(farming_env%Job(i)%input),error=error) - label="&GLOBAL" - CALL parser_search_string(my_parser,label,ignore_case=.TRUE.,found=found,error=error) - IF (found) THEN - CALL create_global_section(g_section,error=error) - CALL section_vals_create(g_data,g_section,error=error) - CALL cp_unit_set_create(default_units, "OUTPUT",error=error) - CALL section_vals_parse(g_data,my_parser,default_units,& - error=error) - CALL cp_unit_set_release(default_units,error=error) - CALL section_vals_val_get(g_data,"PROJECT",& - c_val=str, error=error) - IF (str.NE."") output_file=TRIM(str)//".out" - CALL section_vals_val_get(g_data,"OUTPUT_FILE_NAME",& - c_val=str,error=error) - IF (str.NE."") output_file=str - CALL section_vals_release(g_data,error=error) - CALL section_release(g_section,error=error) - END IF - CALL parser_release(my_parser,error=error) - CALL open_file(file_name=TRIM(output_file),& + IF (farming_env%Job(i)%output=="") THEN + ! generate the output file + WRITE(output_file,'(A12,I5.5)') "FARMING_OUT_",i + CALL parser_create(my_parser,file_name=TRIM(farming_env%Job(i)%input),error=error) + label="&GLOBAL" + CALL parser_search_string(my_parser,label,ignore_case=.TRUE.,found=found,error=error) + IF (found) THEN + CALL create_global_section(g_section,error=error) + CALL section_vals_create(g_data,g_section,error=error) + CALL cp_unit_set_create(default_units, "OUTPUT",error=error) + CALL section_vals_parse(g_data,my_parser,default_units,& + error=error) + CALL cp_unit_set_release(default_units,error=error) + CALL section_vals_val_get(g_data,"PROJECT",& + c_val=str, error=error) + IF (str.NE."") output_file=TRIM(str)//".out" + CALL section_vals_val_get(g_data,"OUTPUT_FILE_NAME",& + c_val=str,error=error) + IF (str.NE."") output_file=str + CALL section_vals_release(g_data,error=error) + CALL section_release(g_section,error=error) + END IF + CALL parser_release(my_parser,error=error) + ELSE + output_file=farming_env%Job(i)%output + ENDIF + + CALL open_file(file_name=TRIM(output_file),& file_action="WRITE",& file_status="UNKNOWN",& file_position="APPEND",& diff --git a/src/farming_methods.F b/src/farming_methods.F index 01bb592464..d8805defba 100644 --- a/src/farming_methods.F +++ b/src/farming_methods.F @@ -182,6 +182,8 @@ CONTAINS keyword_name="DIRECTORY",c_val=farming_env%Job(i)%cwd,error=error) CALL section_vals_val_get(jobs_section,i_rep_section=i,& keyword_name="INPUT_FILE_NAME",c_val=farming_env%Job(i)%input,error=error) + CALL section_vals_val_get(jobs_section,i_rep_section=i,& + keyword_name="OUTPUT_FILE_NAME",c_val=farming_env%Job(i)%output,error=error) ! if job id is not specified the job id is the index CALL section_vals_val_get(jobs_section,i_rep_section=i,& diff --git a/src/farming_types.F b/src/farming_types.F index 5345a76ec4..181d4712cc 100644 --- a/src/farming_types.F +++ b/src/farming_types.F @@ -21,6 +21,7 @@ MODULE farming_types TYPE job_type CHARACTER(LEN=default_path_length) :: cwd ! the directory to go to CHARACTER(LEN=default_path_length) :: input ! the input file to use + CHARACTER(LEN=default_path_length) :: output ! the output file to use INTEGER :: ID ! the ID of this job INTEGER, POINTER, DIMENSION(:) :: dependencies ! the dependencies of this job INTEGER :: status ! pending,running,finished @@ -85,6 +86,7 @@ ELEMENTAL SUBROUTINE init_job_type(job) job%cwd="" job%input="" + job%output="" job%ID=-1 job%status=job_pending NULLIFY(job%dependencies) diff --git a/src/input_cp2k.F b/src/input_cp2k.F index 9b5af784a5..8eb45c72b6 100644 --- a/src/input_cp2k.F +++ b/src/input_cp2k.F @@ -1547,11 +1547,18 @@ CONTAINS CALL keyword_create(keyword,name="INPUT_FILE_NAME",& description="the filename of the input file",& - usage="input_file my_input.inp",& + usage="INPUT_FILE_NAME my_input.inp",& required=.TRUE.,default_lc_val="input.inp",supported_feature=.TRUE.,error=error) CALL section_add_keyword(sub_section,keyword,error=error) CALL keyword_release(keyword,error=error) + CALL keyword_create(keyword,name="OUTPUT_FILE_NAME",& + description="the filename of the output file, if not specified will use the project name in the &GLOBAL section.",& + usage="OUTPUT_FILE_NAME my_input.inp",& + required=.FALSE.,default_lc_val="",supported_feature=.TRUE.,error=error) + CALL section_add_keyword(sub_section,keyword,error=error) + CALL keyword_release(keyword,error=error) + CALL keyword_create(keyword,name="JOB_ID",& description="An ID used to indentify a job in DEPENDENCIES. "//& "JOB_IDs do not need to be unique, dependencies will be on all jobs with a given ID. "//& diff --git a/tests/FARMING/regtest-1/TEST_FILES b/tests/FARMING/regtest-1/TEST_FILES index 30efce77ec..042223666d 100644 --- a/tests/FARMING/regtest-1/TEST_FILES +++ b/tests/FARMING/regtest-1/TEST_FILES @@ -11,3 +11,4 @@ farming-5.inp 0 farming-6.inp 0 farming-7.inp 0 farming-8.inp 0 +farming-9.inp 0 diff --git a/tests/FARMING/regtest-1/farming-9.inp b/tests/FARMING/regtest-1/farming-9.inp new file mode 100644 index 0000000000..03490f4b3d --- /dev/null +++ b/tests/FARMING/regtest-1/farming-9.inp @@ -0,0 +1,19 @@ +&GLOBAL + PROGRAM FARMING + RUN_TYPE NONE +&END GLOBAL + +&FARMING + NGROUPS 2 + &JOB + DIRECTORY dir-1 + INPUT_FILE_NAME water.inp + OUTPUT_FILE_NAME foo.out + &END JOB + &JOB + DIRECTORY dir-2 + INPUT_FILE_NAME water.inp + OUTPUT_FILE_NAME bar.out + &END JOB +&END FARMING +