!+ ! Subroutine compensation_indep_var (sol_com,lat,in_vari out_vari, comp_vec) ! ! Subroutine to set up variable structure for skew quads compensating solenoid ! ! Input: ! sol_com -- integer: 0 or 10 -> 2 pair, 1 or 11 -> 3 pair, 2 or 12 -> 4 pair ! lat -- record/lat_struct/: lookup list for variable names ! type_list -- Logical: If .true. then the list of variables will ! typed on the TTY. ! ! Output: ! vari -- record/indep_var/: array of variables to use !- subroutine compensation_indep_var(sol_com,skew_quad_name, lat,in_vari, out_vari, comp_vec) use bmad use sim_utils use constraints_mod implicit none type (indep_var_struct) in_vari, out_vari type (lat_struct) lat real*8 comp_vec(*) character*40 ele_name, lat_name, skew_quad_name(4) ! /'SC_SK_Q02','SK_Q02','SC_SK_Q01,SK_Q04'/ integer i, rindex integer sol_com, j logical matched, match if(sol_com < 0 .or. sol_com >2)then print *,' COMPENSATION_INDEP_VAR: sol_com /= 0, 1, or 2' stop endif if(out_vari%n_var /= in_vari%n_var + 2 + sol_com)then out_vari = in_vari out_vari%n_var = in_vari%n_var + 2+sol_com do i = 1, 2+sol_com j = i+in_vari%n_var out_vari%v(j)%ele_name = skew_quad_name(i) call str_upcase(ele_name,out_vari%v(j)%ele_name) matched = .false. do rindex = 1, lat%n_ele_max call str_upcase(lat_name, lat%ele(rindex)%name) match = str_match_wild(lat_name, ele_name) if (match) then out_vari%v(j)%rindex = rindex out_vari%v(j)%ele_name = lat_name matched = .true. exit endif enddo if (.not. matched) then print *, 'ERROR IN COMPENSATION_INDEP_VAR: ELEMENT NOT FOUND IN LAT: ', ele_name call err_exit endif if (lat%ele( out_vari%v(j)%rindex )%key == overlay$) then out_vari%v(j)%val_id = var_offset$ + 1 out_vari%v(j)%val_name = lat%ele(out_vari%v(j)%rindex)%control%var(1)%name elseif(out_vari%v(j)%ele_name(1:3) == 'Q00')then out_vari%v(j)%val_name = 'TIlT' out_vari%v(j)%val_id = tilt$ else ! Shouldn't get here since everything given should be an overlay out_vari%v(j)%val_name = 'K1' out_vari%v(j)%val_id = k1$ endif out_vari%v(j)%min_val = -1. out_vari%v(j)%max_val = 1. out_vari%v(j)%delta = 0.001 print *, j, ' ', out_vari%v(j)%ele_name, out_vari%v(j)%val_name, ' ', out_vari%v(j)%delta end do endif do i = 1, 2+sol_com j = i+in_vari%n_var comp_vec(j) = var_attribute(lat, out_vari%v(j)) print *, j, ' ', out_vari%v(j)%ele_name, comp_vec(j) end do end subroutine compensation_indep_var