[Dart-dev] DART/branches Revision: 12535

dart at ucar.edu dart at ucar.edu
Wed Apr 18 15:27:49 MDT 2018


hendric at ucar.edu
2018-04-18 15:27:49 -0600 (Wed, 18 Apr 2018)
75

refactoring prior and posterior code to fit into a 
reusable subroutine.




Modified: DART/branches/rma_fill_inf/assimilation_code/programs/fill_inflation_restart/fill_inflation_restart.f90
===================================================================
--- DART/branches/rma_fill_inf/assimilation_code/programs/fill_inflation_restart/fill_inflation_restart.f90	2018-04-18 21:27:10 UTC (rev 12534)
+++ DART/branches/rma_fill_inf/assimilation_code/programs/fill_inflation_restart/fill_inflation_restart.f90	2018-04-18 21:27:49 UTC (rev 12535)
@@ -156,6 +156,10 @@
 file_array_input  = RESHAPE(input_state_files,  (/      1,  num_domains/))
 file_array_output = RESHAPE(output_state_files, (/num_ens,  num_domains/))
 
+if(single_file) then
+file_array_output = file_array_input
+endif
+
 ! Test the read portion.
 call io_filenames_init(file_info_input,             &
                        ncopies      = num_ens,      &
@@ -209,106 +213,73 @@
                        restart_files = file_array_output)
 
 if(write_prior_inf) then  
-   if (prior_inf_mean == MISSING_R8 .or. prior_inf_sd == MISSING_R8) then
-      write(*,*) 'you must specify both prior_inf_mean and prior_inf_sd values'
-      return
-   endif
-   ens_handle%copies(ss_inflate_index   , :) = prior_inf_mean
-   ens_handle%copies(ss_inflate_sd_index, :) = prior_inf_sd
+   call fill_inflation_files(prior_inf_mean, prior_inf_sd, 'prior')
+endif
 
-   write(my_stage,'(A)') 'prior_inflation'
-   write(my_base, '(A)') 'mean'
-   write(my_desc, '(A)') 'prior inflation mean'
-   call set_file_metadata(file_info_output,    &
-                          cnum     = 1,        &
-                          stage    = my_stage, &
-                          basename = my_base,  &
-                          desc     = my_desc)
+if(write_post_inf) then  
+   call fill_inflation_files(post_inf_mean, post_inf_sd, 'post')
+endif
 
-   call set_io_copy_flag(file_info_output,    &
-                         cnum    = 1,         &
-                         io_flag = WRITE_COPY)
+deallocate(file_array_input, file_array_output)
 
-   write(my_base, '(A)') 'sd'
-   write(my_desc, '(A)') 'prior inflation sd'
-   call set_file_metadata(file_info_output,    &
-                          cnum     = 2,        &
-                          stage    = my_stage, &
-                          basename = my_base,  &
-                          desc     = my_desc)
+call exit(0)
 
-   call set_io_copy_flag(file_info_output,    &
-                         cnum    = 2,         &
-                         io_flag = WRITE_COPY)
+!======================================================================
+contains
+!======================================================================
 
-   output_restart_files = get_stage_metadata(file_info_output)
-   
-   do idom = 1, num_domains
-      !#! do imem = 1, num_ens
-         do imem = 1,2 ! mean and sd
-         write(*, *) '- Writing Prior Inflation File : ', &
-                     trim(get_restart_filename(output_restart_files, imem, domain=idom))
-         enddo
-      !#! enddo
-   enddo
-   
-   call write_state(ens_handle, file_info_output)
+subroutine fill_inflation_files(inf_mean, inf_sd, stage)
+real(r8),         intent(in) :: inf_mean
+real(r8),         intent(in) :: inf_sd
+character(len=*), intent(in) :: stage
 
+if (inf_mean == MISSING_R8 .or. inf_sd == MISSING_R8) then
+   write(*,*) 'you must specify both inf_mean and inf_sd values'
+   write(*,*) 'you have "',trim(stage),'_inf_mean = ', inf_mean,'" and '
+   write(*,*) '         "',trim(stage),'_inf_sd   = ', inf_sd,  '"     '
+   return
 endif
+ens_handle%copies(ss_inflate_index   , :) = prior_inf_mean
+ens_handle%copies(ss_inflate_sd_index, :) = prior_inf_sd
 
+write(my_stage,'(2A)') stage, '_inflation'
+write(my_base, '(A)')  'mean'
+write(my_desc, '(2A)') stage, ' inflation mean'
+call set_file_metadata(file_info_output,    &
+                       cnum     = 1,        &
+                       stage    = my_stage, &
+                       basename = my_base,  &
+                       desc     = my_desc)
 
-! Write posterior inflation files
-if (write_post_inf) then 
-   if (post_inf_mean == MISSING_R8 .or. post_inf_sd == MISSING_R8) then
-      write(*,*) 'you must specify both post_inf_mean and post_inf_sd values'
-      return


More information about the Dart-dev mailing list