subroutine read_model (num, u, err_flag) use cesrv_struct use cesrv_interface implicit none type (universe_struct), target :: u integer i, ios, num, save_set character(140) file_name, line character(40) route_name character data_date*20, lattice*40, comment*80, file_type*16 logical err_flag, herr_flag namelist / data_parameters / data_date, lattice, comment, save_set, & file_type, route_name namelist / hsep / i namelist / vsep / i namelist / quad / i namelist / skew_quad / i namelist / scsol / i namelist / sex / i namelist / skew_sex / i namelist / hsteer / i namelist / vsteer / i !--------------------------------------------------------------------------- ! Read MODEL.nnnnn file call form_file_name_with_number ('MODEL', num, file_name, err_flag) if (err_flag) return open (1, file = file_name, status = 'old', action = 'read', iostat = ios) if (ios /= 0) then ! abort on open error print *, 'ERROR OPENING: ', trim(file_name) err_flag = .true. close (1) return endif read (1, nml = data_parameters, iostat = ios) if (ios /= 0) then print *, 'WARNING: UNABLE TO READ DATA_PARAMETERS NAMELIST' rewind (1) else print *, 'Comment: ', trim(comment) endif ! err_flag = .false. read (1, nml = hsep) call read_this_model (u%hsep_kick, 1000.0_rp) read (1, nml = quad) call read_this_model (u%quad_k1, 1.0_rp) read (1, nml = skew_quad) call read_this_model (u%skew_quad_k1, 1.0_rp) read (1, nml = sex) call read_this_model (u%sex_k2, 1.0_rp) read (1, nml = skew_sex) call read_this_model (u%skew_sex_k2, 1.0_rp) read (1, nml = hsteer) call read_this_model (u%hsteer_kick, 1000.0_rp) read (1, nml = vsteer) call read_this_model (u%vsteer_kick, 1000.0_rp) ! cleanup close (1) do i = lbound(u%var, 1), ubound(u%var, 1) call var_bookkeeper(u%var(i), u%ring, u%orb) enddo call ring_calc (u) print *, 'Model Values read in from: ', trim(file_name) return !--------------------------------------------------------------------------- contains subroutine read_this_model (avar, coef) type (v1_var_struct) avar real(rp) coef ! call skip_header(1, herr_flag) if (herr_flag) then print *, 'ERROR: END-OF-FILE ENCOUNTERED WHILE READING: ', avar%name return endif do read (1, '(a)', iostat= ios) line if (ios /= 0 .or. line == " ") return read (line, *, iostat = ios) i, avar%v(i)%model avar%v(i)%model = avar%v(i)%model / coef if (ios /= 0) then ! read error call type_bad_data_line (1, avar%name, file_name) err_flag = .true. return endif enddo end subroutine end subroutine