!+ ! Module tao_equality_mod ! ! This module defines a set of functions which overload the equality operator ("=="). ! These functions test for equality between instances of a given structure. ! ! This file is generated as a by product of the Tao/C++ interface code generation ! The code generation files can be found in cpp_tao_interface. ! ! DO NOT EDIT THIS FILE DIRECTLY! !- module tao_equality_mod use tao_struct use equality_mod interface operator (==) module procedure eq_qp_rect, eq_qp_line, eq_qp_symbol, eq_qp_point, eq_qp_axis module procedure eq_tao_cmd_history, eq_tao_real_pointer, eq_tao_logical_array, eq_tao_integer_array, eq_tao_expression_info module procedure eq_tao_eval_stack1, eq_tao_ele_shape, eq_tao_pattern_point, eq_tao_pattern_curve, eq_tao_shape_pattern module procedure eq_tao_drawing, eq_tao_wave_kick_pt, eq_tao_wave, eq_tao_title, eq_tao_data_var_component module procedure eq_tao_histogram, eq_tao_curve, eq_tao_graph, eq_tao_plot, eq_tao_plot_region module procedure eq_tao_plot_page, eq_tao_plot_array, eq_tao_graph_array, eq_tao_curve_array, eq_tao_data module procedure eq_tao_d1_data, eq_tao_d2_data, eq_tao_data_array, eq_tao_d1_data_array, eq_tao_d2_data_array module procedure eq_tao_var_slave, eq_tao_var, eq_tao_v1_var, eq_tao_var_array, eq_tao_v1_var_array module procedure eq_tao_building_wall_point, eq_tao_building_wall_section, eq_tao_building_wall, eq_tao_global, eq_tao_alias module procedure eq_tao_command_file, eq_tao_common, eq_tao_lat_mode, eq_tao_sigma_mat, eq_tao_lattice_branch module procedure eq_tao_lattice, eq_tao_element, eq_tao_ping_scale, eq_tao_universe_branch, eq_tao_beam module procedure eq_tao_universe_calc, eq_tao_mpi, eq_tao_dynamic_aperture, eq_tao_universe, eq_tao_super_universe end interface contains !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_qp_rect (f1, f2) result (is_eq) implicit none type(qp_rect_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x1 == f2%x1) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x2 == f2%x2) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%y1 == f2%y1) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%y2 == f2%y2) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%units == f2%units) end function eq_qp_rect !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_qp_line (f1, f2) result (is_eq) implicit none type(qp_line_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%width == f2%width) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%color == f2%color) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%pattern == f2%pattern) end function eq_qp_line !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_qp_symbol (f1, f2) result (is_eq) implicit none type(qp_symbol_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%type == f2%type) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%height == f2%height) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%color == f2%color) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%fill_pattern == f2%fill_pattern) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%line_width == f2%line_width) end function eq_qp_symbol !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_qp_point (f1, f2) result (is_eq) implicit none type(qp_point_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x == f2%x) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%y == f2%y) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%units == f2%units) end function eq_qp_point !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_qp_axis (f1, f2) result (is_eq) implicit none type(qp_axis_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%label == f2%label) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%min == f2%min) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%max == f2%max) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%number_offset == f2%number_offset) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%label_offset == f2%label_offset) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%major_tick_len == f2%major_tick_len) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%minor_tick_len == f2%minor_tick_len) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%label_color == f2%label_color) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%major_div == f2%major_div) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%major_div_nominal == f2%major_div_nominal) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%minor_div == f2%minor_div) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%minor_div_max == f2%minor_div_max) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%places == f2%places) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%type == f2%type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%bounds == f2%bounds) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%tick_side == f2%tick_side) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%number_side == f2%number_side) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_label .eqv. f2%draw_label) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_numbers .eqv. f2%draw_numbers) end function eq_qp_axis !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_cmd_history (f1, f2) result (is_eq) implicit none type(tao_cmd_history_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, ALLOC] is_eq = is_eq .and. (allocated(f1%cmd) .eqv. allocated(f2%cmd)) if (.not. is_eq) return if (allocated(f1%cmd)) is_eq = (f1%cmd == f2%cmd) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix == f2%ix) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%cmd_file .eqv. f2%cmd_file) end function eq_tao_cmd_history !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_real_pointer (f1, f2) result (is_eq) implicit none type(tao_real_pointer_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[logical, 0, PTR] is_eq = is_eq .and. (associated(f1%good_value) .eqv. associated(f2%good_value)) if (.not. is_eq) return if (associated(f1%good_value)) is_eq = (f1%good_value .eqv. f2%good_value) !! f_side.equality_test[logical, 0, PTR] is_eq = is_eq .and. (associated(f1%good_user) .eqv. associated(f2%good_user)) if (.not. is_eq) return if (associated(f1%good_user)) is_eq = (f1%good_user .eqv. f2%good_user) end function eq_tao_real_pointer !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_logical_array (f1, f2) result (is_eq) implicit none type(tao_logical_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_logical_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_integer_array (f1, f2) result (is_eq) implicit none type(tao_integer_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_integer_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_expression_info (f1, f2) result (is_eq) implicit none type(tao_expression_info_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good .eqv. f2%good) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele == f2%ix_ele) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%s == f2%s) end function eq_tao_expression_info !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_eval_stack1 (f1, f2) result (is_eq) implicit none type(tao_eval_stack1_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%type == f2%type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%scale == f2%scale) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%value) .eqv. allocated(f2%value)) if (.not. is_eq) return if (allocated(f1%value)) is_eq = all(shape(f1%value) == shape(f2%value)) if (.not. is_eq) return if (allocated(f1%value)) is_eq = all(f1%value == f2%value) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%info) .eqv. allocated(f2%info)) if (.not. is_eq) return if (allocated(f1%info)) is_eq = all(shape(f1%info) == shape(f2%info)) if (.not. is_eq) return if (allocated(f1%info)) is_eq = all(f1%info == f2%info) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%value_ptr) .eqv. allocated(f2%value_ptr)) if (.not. is_eq) return if (allocated(f1%value_ptr)) is_eq = all(shape(f1%value_ptr) == shape(f2%value_ptr)) if (.not. is_eq) return if (allocated(f1%value_ptr)) is_eq = all(f1%value_ptr == f2%value_ptr) end function eq_tao_eval_stack1 !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_ele_shape (f1, f2) result (is_eq) implicit none type(tao_ele_shape_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ele_id == f2%ele_id) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%shape == f2%shape) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%color == f2%color) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%size == f2%size) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%label == f2%label) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw .eqv. f2%draw) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%multi .eqv. f2%multi) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele_key == f2%ix_ele_key) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name_ele == f2%name_ele) end function eq_tao_ele_shape !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_pattern_point (f1, f2) result (is_eq) implicit none type(tao_pattern_point_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%s == f2%s) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x == f2%x) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%radius == f2%radius) end function eq_tao_pattern_point !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_pattern_curve (f1, f2) result (is_eq) implicit none type(tao_pattern_curve_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%line == f2%line) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%pt) .eqv. allocated(f2%pt)) if (.not. is_eq) return if (allocated(f1%pt)) is_eq = all(shape(f1%pt) == shape(f2%pt)) if (.not. is_eq) return if (allocated(f1%pt)) is_eq = all(f1%pt == f2%pt) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%scale == f2%scale) end function eq_tao_pattern_curve !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_shape_pattern (f1, f2) result (is_eq) implicit none type(tao_shape_pattern_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%curve) .eqv. allocated(f2%curve)) if (.not. is_eq) return if (allocated(f1%curve)) is_eq = all(shape(f1%curve) == shape(f2%curve)) if (.not. is_eq) return if (allocated(f1%curve)) is_eq = all(f1%curve == f2%curve) end function eq_tao_shape_pattern !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_drawing (f1, f2) result (is_eq) implicit none type(tao_drawing_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%ele_shape) .eqv. allocated(f2%ele_shape)) if (.not. is_eq) return if (allocated(f1%ele_shape)) is_eq = all(shape(f1%ele_shape) == shape(f2%ele_shape)) if (.not. is_eq) return if (allocated(f1%ele_shape)) is_eq = all(f1%ele_shape == f2%ele_shape) end function eq_tao_drawing !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_wave_kick_pt (f1, f2) result (is_eq) implicit none type(tao_wave_kick_pt_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%phi_s == f2%phi_s) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%phi_r == f2%phi_r) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%phi == f2%phi) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%amp == f2%amp) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_dat == f2%ix_dat) end function eq_tao_wave_kick_pt !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_wave (f1, f2) result (is_eq) implicit none type(tao_wave_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_type == f2%data_type) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_a == f2%rms_rel_a) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_b == f2%rms_rel_b) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_as == f2%rms_rel_as) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_bs == f2%rms_rel_bs) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_ar == f2%rms_rel_ar) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_br == f2%rms_rel_br) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_k == f2%rms_rel_k) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_ks == f2%rms_rel_ks) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_rel_kr == f2%rms_rel_kr) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_phi == f2%rms_phi) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_phi_s == f2%rms_phi_s) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%rms_phi_r == f2%rms_phi_r) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%amp_ba_s == f2%amp_ba_s) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%amp_ba_r == f2%amp_ba_r) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%chi_a == f2%chi_a) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%chi_c == f2%chi_c) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%chi_ba == f2%chi_ba) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%amp_a == f2%amp_a) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%amp_b == f2%amp_b) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%amp_ba == f2%amp_ba) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%coef_a == f2%coef_a) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%coef_b == f2%coef_b) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%coef_ba == f2%coef_ba) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_func == f2%n_func) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_a1 == f2%ix_a1) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_a2 == f2%ix_a2) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_b1 == f2%ix_b1) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_b2 == f2%ix_b2) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%i_a1 == f2%i_a1) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%i_a2 == f2%i_a2) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%i_b1 == f2%i_b1) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%i_b2 == f2%i_b2) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_a == f2%n_a) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_b == f2%n_b) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%i_wrap_pt == f2%i_wrap_pt) !! f_side.equality_test[integer, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%ix_data) .eqv. allocated(f2%ix_data)) if (.not. is_eq) return if (allocated(f1%ix_data)) is_eq = all(shape(f1%ix_data) == shape(f2%ix_data)) if (.not. is_eq) return if (allocated(f1%ix_data)) is_eq = all(f1%ix_data == f2%ix_data) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_kick == f2%n_kick) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%kick) .eqv. allocated(f2%kick)) if (.not. is_eq) return if (allocated(f1%kick)) is_eq = all(shape(f1%kick) == shape(f2%kick)) if (.not. is_eq) return if (allocated(f1%kick)) is_eq = all(f1%kick == f2%kick) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%graph == f2%graph) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%ele == f2%ele) end function eq_tao_wave !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_title (f1, f2) result (is_eq) implicit none type(tao_title_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%string == f2%string) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x == f2%x) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%y == f2%y) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%units == f2%units) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%justify == f2%justify) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_it .eqv. f2%draw_it) end function eq_tao_title !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_data_var_component (f1, f2) result (is_eq) implicit none type(tao_data_var_component_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%sign == f2%sign) end function eq_tao_data_var_component !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_histogram (f1, f2) result (is_eq) implicit none type(tao_histogram_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%density_normalized .eqv. f2%density_normalized) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%weight_by_charge .eqv. f2%weight_by_charge) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%minimum == f2%minimum) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%maximum == f2%maximum) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%width == f2%width) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%center == f2%center) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%number == f2%number) end function eq_tao_histogram !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_curve (f1, f2) result (is_eq) implicit none type(tao_curve_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_source == f2%data_source) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_index == f2%data_index) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_type_x == f2%data_type_x) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_type_z == f2%data_type_z) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_type == f2%data_type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ele_ref_name == f2%ele_ref_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%legend_text == f2%legend_text) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%message_text == f2%message_text) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%units == f2%units) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%component == f2%component) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%hist == f2%hist) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%x_line) .eqv. allocated(f2%x_line)) if (.not. is_eq) return if (allocated(f1%x_line)) is_eq = all(shape(f1%x_line) == shape(f2%x_line)) if (.not. is_eq) return if (allocated(f1%x_line)) is_eq = all(f1%x_line == f2%x_line) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%y_line) .eqv. allocated(f2%y_line)) if (.not. is_eq) return if (allocated(f1%y_line)) is_eq = all(shape(f1%y_line) == shape(f2%y_line)) if (.not. is_eq) return if (allocated(f1%y_line)) is_eq = all(f1%y_line == f2%y_line) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%y2_line) .eqv. allocated(f2%y2_line)) if (.not. is_eq) return if (allocated(f1%y2_line)) is_eq = all(shape(f1%y2_line) == shape(f2%y2_line)) if (.not. is_eq) return if (allocated(f1%y2_line)) is_eq = all(f1%y2_line == f2%y2_line) !! f_side.equality_test[integer, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%ix_line) .eqv. allocated(f2%ix_line)) if (.not. is_eq) return if (allocated(f1%ix_line)) is_eq = all(shape(f1%ix_line) == shape(f2%ix_line)) if (.not. is_eq) return if (allocated(f1%ix_line)) is_eq = all(f1%ix_line == f2%ix_line) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%x_symb) .eqv. allocated(f2%x_symb)) if (.not. is_eq) return if (allocated(f1%x_symb)) is_eq = all(shape(f1%x_symb) == shape(f2%x_symb)) if (.not. is_eq) return if (allocated(f1%x_symb)) is_eq = all(f1%x_symb == f2%x_symb) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%y_symb) .eqv. allocated(f2%y_symb)) if (.not. is_eq) return if (allocated(f1%y_symb)) is_eq = all(shape(f1%y_symb) == shape(f2%y_symb)) if (.not. is_eq) return if (allocated(f1%y_symb)) is_eq = all(f1%y_symb == f2%y_symb) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%z_symb) .eqv. allocated(f2%z_symb)) if (.not. is_eq) return if (allocated(f1%z_symb)) is_eq = all(shape(f1%z_symb) == shape(f2%z_symb)) if (.not. is_eq) return if (allocated(f1%z_symb)) is_eq = all(f1%z_symb == f2%z_symb) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%symb_size) .eqv. allocated(f2%symb_size)) if (.not. is_eq) return if (allocated(f1%symb_size)) is_eq = all(shape(f1%symb_size) == shape(f2%symb_size)) if (.not. is_eq) return if (allocated(f1%symb_size)) is_eq = all(f1%symb_size == f2%symb_size) !! f_side.equality_test[integer, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%ix_symb) .eqv. allocated(f2%ix_symb)) if (.not. is_eq) return if (allocated(f1%ix_symb)) is_eq = all(shape(f1%ix_symb) == shape(f2%ix_symb)) if (.not. is_eq) return if (allocated(f1%ix_symb)) is_eq = all(f1%ix_symb == f2%ix_symb) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%y_axis_scale_factor == f2%y_axis_scale_factor) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%s == f2%s) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%z_color0 == f2%z_color0) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%z_color1 == f2%z_color1) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%line == f2%line) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%symbol == f2%symbol) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_universe == f2%ix_universe) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%symbol_every == f2%symbol_every) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_branch == f2%ix_branch) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele_ref == f2%ix_ele_ref) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele_ref_track == f2%ix_ele_ref_track) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_bunch == f2%ix_bunch) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%use_y2 .eqv. f2%use_y2) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_line .eqv. f2%draw_line) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_symbols .eqv. f2%draw_symbols) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_symbol_index .eqv. f2%draw_symbol_index) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%smooth_line_calc .eqv. f2%smooth_line_calc) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%use_z_color .eqv. f2%use_z_color) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%autoscale_z_color .eqv. f2%autoscale_z_color) end function eq_tao_curve !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_graph (f1, f2) result (is_eq) implicit none type(tao_graph_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%type == f2%type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%title == f2%title) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%title_suffix == f2%title_suffix) !! f_side.equality_test[character, 1, NOT] is_eq = is_eq .and. all(f1%text_legend == f2%text_legend) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%component == f2%component) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%why_invalid == f2%why_invalid) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%floor_plan_view == f2%floor_plan_view) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%floor_plan_orbit_color == f2%floor_plan_orbit_color) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%curve) .eqv. allocated(f2%curve)) if (.not. is_eq) return if (allocated(f1%curve)) is_eq = all(shape(f1%curve) == shape(f2%curve)) if (.not. is_eq) return if (allocated(f1%curve)) is_eq = all(f1%curve == f2%curve) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%text_legend_origin == f2%text_legend_origin) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%curve_legend_origin == f2%curve_legend_origin) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%x == f2%x) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%y == f2%y) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%y2 == f2%y2) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%margin == f2%margin) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%scale_margin == f2%scale_margin) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x_axis_scale_factor == f2%x_axis_scale_factor) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%symbol_size_scale == f2%symbol_size_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%floor_plan_rotation == f2%floor_plan_rotation) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%floor_plan_orbit_scale == f2%floor_plan_orbit_scale) !! f_side.equality_test[integer, 1, NOT] is_eq = is_eq .and. all(f1%box == f2%box) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_branch == f2%ix_branch) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_universe == f2%ix_universe) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%clip .eqv. f2%clip) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%valid .eqv. f2%valid) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%y2_mirrors_y .eqv. f2%y2_mirrors_y) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%limited .eqv. f2%limited) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_axes .eqv. f2%draw_axes) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%correct_xy_distortion .eqv. f2%correct_xy_distortion) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%floor_plan_size_is_absolute .eqv. f2%floor_plan_size_is_absolute) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%floor_plan_draw_only_first_pass .eqv. f2%floor_plan_draw_only_first_pass) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_curve_legend .eqv. f2%draw_curve_legend) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_grid .eqv. f2%draw_grid) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%allow_wrap_around .eqv. f2%allow_wrap_around) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_only_good_user_data_or_vars .eqv. f2%draw_only_good_user_data_or_vars) end function eq_tao_graph !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_plot (f1, f2) result (is_eq) implicit none type(tao_plot_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%description == f2%description) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%graph) .eqv. allocated(f2%graph)) if (.not. is_eq) return if (allocated(f1%graph)) is_eq = all(shape(f1%graph) == shape(f2%graph)) if (.not. is_eq) return if (allocated(f1%graph)) is_eq = all(f1%graph == f2%graph) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%x == f2%x) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_curve_pts == f2%n_curve_pts) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%type == f2%type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%x_axis_type == f2%x_axis_type) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%autoscale_x .eqv. f2%autoscale_x) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%autoscale_y .eqv. f2%autoscale_y) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%autoscale_gang_x .eqv. f2%autoscale_gang_x) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%autoscale_gang_y .eqv. f2%autoscale_gang_y) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%list_with_show_plot_command .eqv. f2%list_with_show_plot_command) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%phantom .eqv. f2%phantom) end function eq_tao_plot !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_plot_region (f1, f2) result (is_eq) implicit none type(tao_plot_region_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%plot == f2%plot) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%location == f2%location) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%visible .eqv. f2%visible) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%list_with_show_plot_command .eqv. f2%list_with_show_plot_command) end function eq_tao_plot_region !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_plot_page (f1, f2) result (is_eq) implicit none type(tao_plot_page_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 1, NOT] is_eq = is_eq .and. all(f1%title == f2%title) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%border == f2%border) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%floor_plan == f2%floor_plan) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%lat_layout == f2%lat_layout) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%pattern) .eqv. allocated(f2%pattern)) if (.not. is_eq) return if (allocated(f1%pattern)) is_eq = all(shape(f1%pattern) == shape(f2%pattern)) if (.not. is_eq) return if (allocated(f1%pattern)) is_eq = all(f1%pattern == f2%pattern) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%template) .eqv. allocated(f2%template)) if (.not. is_eq) return if (allocated(f1%template)) is_eq = all(shape(f1%template) == shape(f2%template)) if (.not. is_eq) return if (allocated(f1%template)) is_eq = all(f1%template == f2%template) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%region) .eqv. allocated(f2%region)) if (.not. is_eq) return if (allocated(f1%region)) is_eq = all(shape(f1%region) == shape(f2%region)) if (.not. is_eq) return if (allocated(f1%region)) is_eq = all(f1%region == f2%region) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%plot_display_type == f2%plot_display_type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ps_scale == f2%ps_scale) !! f_side.equality_test[real, 1, NOT] is_eq = is_eq .and. all(f1%size == f2%size) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%text_height == f2%text_height) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%main_title_text_scale == f2%main_title_text_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%graph_title_text_scale == f2%graph_title_text_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%axis_number_text_scale == f2%axis_number_text_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%axis_label_text_scale == f2%axis_label_text_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%legend_text_scale == f2%legend_text_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%key_table_text_scale == f2%key_table_text_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%curve_legend_line_len == f2%curve_legend_line_len) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%curve_legend_text_offset == f2%curve_legend_text_offset) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%floor_plan_shape_scale == f2%floor_plan_shape_scale) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%lat_layout_shape_scale == f2%lat_layout_shape_scale) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_curve_pts == f2%n_curve_pts) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%id_window == f2%id_window) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%delete_overlapping_plots .eqv. f2%delete_overlapping_plots) end function eq_tao_plot_page !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_plot_array (f1, f2) result (is_eq) implicit none type(tao_plot_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_plot_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_graph_array (f1, f2) result (is_eq) implicit none type(tao_graph_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_graph_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_curve_array (f1, f2) result (is_eq) implicit none type(tao_curve_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_curve_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_data (f1, f2) result (is_eq) implicit none type(tao_data_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ele_name == f2%ele_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ele_start_name == f2%ele_start_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ele_ref_name == f2%ele_ref_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_type == f2%data_type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%merit_type == f2%merit_type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_source == f2%data_source) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_bunch == f2%ix_bunch) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_branch == f2%ix_branch) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele == f2%ix_ele) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele_start == f2%ix_ele_start) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele_ref == f2%ix_ele_ref) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele_merit == f2%ix_ele_merit) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_d1 == f2%ix_d1) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_data == f2%ix_data) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_dmodel == f2%ix_dmodel) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%eval_point == f2%eval_point) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%meas_value == f2%meas_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%ref_value == f2%ref_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%model_value == f2%model_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%design_value == f2%design_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%old_value == f2%old_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%base_value == f2%base_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%delta_merit == f2%delta_merit) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%weight == f2%weight) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%invalid_value == f2%invalid_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%merit == f2%merit) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%s == f2%s) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%s_offset == f2%s_offset) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%exists .eqv. f2%exists) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_model .eqv. f2%good_model) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_base .eqv. f2%good_base) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_design .eqv. f2%good_design) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_meas .eqv. f2%good_meas) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_ref .eqv. f2%good_ref) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_user .eqv. f2%good_user) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_opt .eqv. f2%good_opt) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_plot .eqv. f2%good_plot) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%useit_plot .eqv. f2%useit_plot) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%useit_opt .eqv. f2%useit_opt) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%stack) .eqv. allocated(f2%stack)) if (.not. is_eq) return if (allocated(f1%stack)) is_eq = all(shape(f1%stack) == shape(f2%stack)) if (.not. is_eq) return if (allocated(f1%stack)) is_eq = all(f1%stack == f2%stack) end function eq_tao_data !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_d1_data (f1, f2) result (is_eq) implicit none type(tao_d1_data_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) end function eq_tao_d1_data !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_d2_data (f1, f2) result (is_eq) implicit none type(tao_d2_data_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_file_name == f2%data_file_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ref_file_name == f2%ref_file_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_date == f2%data_date) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ref_date == f2%ref_date) !! f_side.equality_test[character, 1, NOT] is_eq = is_eq .and. all(f1%descrip == f2%descrip) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%d1) .eqv. allocated(f2%d1)) if (.not. is_eq) return if (allocated(f1%d1)) is_eq = all(shape(f1%d1) == shape(f2%d1)) if (.not. is_eq) return if (allocated(f1%d1)) is_eq = all(f1%d1 == f2%d1) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_uni == f2%ix_uni) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_d2_data == f2%ix_d2_data) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_data == f2%ix_data) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ref == f2%ix_ref) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%data_read_in .eqv. f2%data_read_in) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%ref_read_in .eqv. f2%ref_read_in) end function eq_tao_d2_data !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_data_array (f1, f2) result (is_eq) implicit none type(tao_data_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_data_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_d1_data_array (f1, f2) result (is_eq) implicit none type(tao_d1_data_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_d1_data_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_d2_data_array (f1, f2) result (is_eq) implicit none type(tao_d2_data_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_d2_data_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_var_slave (f1, f2) result (is_eq) implicit none type(tao_var_slave_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_uni == f2%ix_uni) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_branch == f2%ix_branch) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele == f2%ix_ele) !! f_side.equality_test[real, 0, PTR] is_eq = is_eq .and. (associated(f1%model_value) .eqv. associated(f2%model_value)) if (.not. is_eq) return if (associated(f1%model_value)) is_eq = (f1%model_value == f2%model_value) !! f_side.equality_test[real, 0, PTR] is_eq = is_eq .and. (associated(f1%base_value) .eqv. associated(f2%base_value)) if (.not. is_eq) return if (associated(f1%base_value)) is_eq = (f1%base_value == f2%base_value) end function eq_tao_var_slave !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_var (f1, f2) result (is_eq) implicit none type(tao_var_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%ele_name == f2%ele_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%attrib_name == f2%attrib_name) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%slave) .eqv. allocated(f2%slave)) if (.not. is_eq) return if (allocated(f1%slave)) is_eq = all(shape(f1%slave) == shape(f2%slave)) if (.not. is_eq) return if (allocated(f1%slave)) is_eq = all(f1%slave == f2%slave) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%common_slave == f2%common_slave) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_v1 == f2%ix_v1) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_var == f2%ix_var) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_dvar == f2%ix_dvar) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_attrib == f2%ix_attrib) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_key_table == f2%ix_key_table) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%design_value == f2%design_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%scratch_value == f2%scratch_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%old_value == f2%old_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%meas_value == f2%meas_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%ref_value == f2%ref_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%correction_value == f2%correction_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%high_lim == f2%high_lim) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%low_lim == f2%low_lim) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%step == f2%step) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%weight == f2%weight) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%delta_merit == f2%delta_merit) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%merit == f2%merit) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%dmerit_dvar == f2%dmerit_dvar) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%key_val0 == f2%key_val0) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%key_delta == f2%key_delta) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%s == f2%s) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%merit_type == f2%merit_type) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%exists .eqv. f2%exists) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_var .eqv. f2%good_var) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_user .eqv. f2%good_user) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_opt .eqv. f2%good_opt) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%good_plot .eqv. f2%good_plot) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%useit_opt .eqv. f2%useit_opt) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%useit_plot .eqv. f2%useit_plot) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%key_bound .eqv. f2%key_bound) end function eq_tao_var !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_v1_var (f1, f2) result (is_eq) implicit none type(tao_v1_var_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_v1_var == f2%ix_v1_var) end function eq_tao_v1_var !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_var_array (f1, f2) result (is_eq) implicit none type(tao_var_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_var_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_v1_var_array (f1, f2) result (is_eq) implicit none type(tao_v1_var_array_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. end function eq_tao_v1_var_array !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_building_wall_point (f1, f2) result (is_eq) implicit none type(tao_building_wall_point_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%z == f2%z) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x == f2%x) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%radius == f2%radius) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%z_center == f2%z_center) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%x_center == f2%x_center) end function eq_tao_building_wall_point !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_building_wall_section (f1, f2) result (is_eq) implicit none type(tao_building_wall_section_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%constraint == f2%constraint) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%point) .eqv. allocated(f2%point)) if (.not. is_eq) return if (allocated(f1%point)) is_eq = all(shape(f1%point) == shape(f2%point)) if (.not. is_eq) return if (allocated(f1%point)) is_eq = all(f1%point == f2%point) end function eq_tao_building_wall_section !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_building_wall (f1, f2) result (is_eq) implicit none type(tao_building_wall_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%section) .eqv. allocated(f2%section)) if (.not. is_eq) return if (allocated(f1%section)) is_eq = all(shape(f1%section) == shape(f2%section)) if (.not. is_eq) return if (allocated(f1%section)) is_eq = all(f1%section == f2%section) end function eq_tao_building_wall !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_global (f1, f2) result (is_eq) implicit none type(tao_global_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%y_axis_plot_dmin == f2%y_axis_plot_dmin) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%lm_opt_deriv_reinit == f2%lm_opt_deriv_reinit) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%de_lm_step_ratio == f2%de_lm_step_ratio) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%de_var_to_population_factor == f2%de_var_to_population_factor) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%lmdif_eps == f2%lmdif_eps) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%svd_cutoff == f2%svd_cutoff) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%unstable_penalty == f2%unstable_penalty) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%merit_stop_value == f2%merit_stop_value) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%random_sigma_cutoff == f2%random_sigma_cutoff) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%delta_e_chrom == f2%delta_e_chrom) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_opti_cycles == f2%n_opti_cycles) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_opti_loops == f2%n_opti_loops) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%phase_units == f2%phase_units) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%bunch_to_plot == f2%bunch_to_plot) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%random_seed == f2%random_seed) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_top10 == f2%n_top10) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%random_engine == f2%random_engine) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%random_gauss_converter == f2%random_gauss_converter) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%track_type == f2%track_type) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%prompt_string == f2%prompt_string) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%prompt_color == f2%prompt_color) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%optimizer == f2%optimizer) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%print_command == f2%print_command) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%var_out_file == f2%var_out_file) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%initialized .eqv. f2%initialized) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%opt_with_ref .eqv. f2%opt_with_ref) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%opt_with_base .eqv. f2%opt_with_base) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%label_lattice_elements .eqv. f2%label_lattice_elements) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%label_keys .eqv. f2%label_keys) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%derivative_recalc .eqv. f2%derivative_recalc) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%derivative_uses_design .eqv. f2%derivative_uses_design) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%init_plot_needed .eqv. f2%init_plot_needed) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%orm_analysis .eqv. f2%orm_analysis) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%plot_on .eqv. f2%plot_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%lattice_calc_on .eqv. f2%lattice_calc_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%svd_retreat_on_merit_increase .eqv. f2%svd_retreat_on_merit_increase) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%stop_on_error .eqv. f2%stop_on_error) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%command_file_print_on .eqv. f2%command_file_print_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%box_plots .eqv. f2%box_plots) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%beam_timer_on .eqv. f2%beam_timer_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%var_limits_on .eqv. f2%var_limits_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%only_limit_opt_vars .eqv. f2%only_limit_opt_vars) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%optimizer_var_limit_warn .eqv. f2%optimizer_var_limit_warn) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%rf_on .eqv. f2%rf_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%draw_curve_off_scale_warn .eqv. f2%draw_curve_off_scale_warn) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%wait_for_cr_in_single_mode .eqv. f2%wait_for_cr_in_single_mode) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%disable_smooth_line_calc .eqv. f2%disable_smooth_line_calc) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%debug_on .eqv. f2%debug_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%single_step .eqv. f2%single_step) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%optimizer_allow_user_abort .eqv. f2%optimizer_allow_user_abort) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%quiet .eqv. f2%quiet) end function eq_tao_global !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_alias (f1, f2) result (is_eq) implicit none type(tao_alias_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%expanded_str == f2%expanded_str) end function eq_tao_alias !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_command_file (f1, f2) result (is_eq) implicit none type(tao_command_file_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%name == f2%name) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_unit == f2%ix_unit) !! f_side.equality_test[character, 1, NOT] is_eq = is_eq .and. all(f1%cmd_arg == f2%cmd_arg) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%paused .eqv. f2%paused) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_line == f2%n_line) end function eq_tao_command_file !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_common (f1, f2) result (is_eq) implicit none type(tao_common_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 1, NOT] is_eq = is_eq .and. all(f1%alias == f2%alias) !! f_side.equality_test[type, 1, NOT] is_eq = is_eq .and. all(f1%key == f2%key) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%cmd_file) .eqv. allocated(f2%cmd_file)) if (.not. is_eq) return if (allocated(f1%cmd_file)) is_eq = all(shape(f1%cmd_file) == shape(f2%cmd_file)) if (.not. is_eq) return if (allocated(f1%cmd_file)) is_eq = all(f1%cmd_file == f2%cmd_file) !! f_side.equality_test[real, 2, ALLOC] is_eq = is_eq .and. (allocated(f1%covar) .eqv. allocated(f2%covar)) if (.not. is_eq) return if (allocated(f1%covar)) is_eq = all(shape(f1%covar) == shape(f2%covar)) if (.not. is_eq) return if (allocated(f1%covar)) is_eq = all(f1%covar == f2%covar) !! f_side.equality_test[real, 2, ALLOC] is_eq = is_eq .and. (allocated(f1%alpha) .eqv. allocated(f2%alpha)) if (.not. is_eq) return if (allocated(f1%alpha)) is_eq = all(shape(f1%alpha) == shape(f2%alpha)) if (.not. is_eq) return if (allocated(f1%alpha)) is_eq = all(f1%alpha == f2%alpha) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%dummy_target == f2%dummy_target) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ref_taylor == f2%ix_ref_taylor) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_ele_taylor == f2%ix_ele_taylor) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_alias == f2%n_alias) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%cmd_file_level == f2%cmd_file_level) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_key_bank == f2%ix_key_bank) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_universes == f2%n_universes) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%default_universe == f2%default_universe) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%default_branch == f2%default_branch) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_history == f2%ix_history) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_history == f2%n_history) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%cmd_file_paused .eqv. f2%cmd_file_paused) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%use_cmd_here .eqv. f2%use_cmd_here) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%multi_commands_here .eqv. f2%multi_commands_here) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%cmd_from_cmd_file .eqv. f2%cmd_from_cmd_file) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%use_saved_beam_in_tracking .eqv. f2%use_saved_beam_in_tracking) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%single_mode .eqv. f2%single_mode) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%combine_consecutive_elements_of_like_name .eqv. f2%combine_consecutive_elements_of_like_name) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%common_lattice .eqv. f2%common_lattice) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%init_beam .eqv. f2%init_beam) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%init_var .eqv. f2%init_var) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%init_read_lat_info .eqv. f2%init_read_lat_info) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%init_data .eqv. f2%init_data) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%parse_cmd_args .eqv. f2%parse_cmd_args) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%optimizer_running .eqv. f2%optimizer_running) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%have_datums_using_expressions .eqv. f2%have_datums_using_expressions) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%noplot_arg_set .eqv. f2%noplot_arg_set) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%init_tao_file_arg_set .eqv. f2%init_tao_file_arg_set) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%log_startup .eqv. f2%log_startup) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%print_to_terminal .eqv. f2%print_to_terminal) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%cmd == f2%cmd) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%init_name == f2%init_name) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%lat_file == f2%lat_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%init_tao_file == f2%init_tao_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%init_tao_file_path == f2%init_tao_file_path) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%beam_file == f2%beam_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%beam_all_file == f2%beam_all_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%beam0_file == f2%beam0_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%data_file == f2%data_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%plot_file == f2%plot_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%startup_file == f2%startup_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%var_file == f2%var_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%building_wall_file == f2%building_wall_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%hook_init_file == f2%hook_init_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%plot_geometry == f2%plot_geometry) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%single_mode_buffer == f2%single_mode_buffer) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%unique_name_suffix == f2%unique_name_suffix) !! f_side.equality_test[character, 1, NOT] is_eq = is_eq .and. all(f1%valid_plot_who == f2%valid_plot_who) end function eq_tao_common !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_lat_mode (f1, f2) result (is_eq) implicit none type(tao_lat_mode_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%chrom == f2%chrom) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%growth_rate == f2%growth_rate) end function eq_tao_lat_mode !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_sigma_mat (f1, f2) result (is_eq) implicit none type(tao_sigma_mat_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 2, NOT] is_eq = is_eq .and. all(f1%sigma == f2%sigma) end function eq_tao_sigma_mat !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_lattice_branch (f1, f2) result (is_eq) implicit none type(tao_lattice_branch_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%bunch_params) .eqv. allocated(f2%bunch_params)) if (.not. is_eq) return if (allocated(f1%bunch_params)) is_eq = all(shape(f1%bunch_params) == shape(f2%bunch_params)) if (.not. is_eq) return if (allocated(f1%bunch_params)) is_eq = all(f1%bunch_params == f2%bunch_params) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%linear) .eqv. allocated(f2%linear)) if (.not. is_eq) return if (allocated(f1%linear)) is_eq = all(shape(f1%linear) == shape(f2%linear)) if (.not. is_eq) return if (allocated(f1%linear)) is_eq = all(f1%linear == f2%linear) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%orbit) .eqv. allocated(f2%orbit)) if (.not. is_eq) return if (allocated(f1%orbit)) is_eq = all(shape(f1%orbit) == shape(f2%orbit)) if (.not. is_eq) return if (allocated(f1%orbit)) is_eq = all(f1%orbit == f2%orbit) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%orb0 == f2%orb0) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%high_e_lat == f2%high_e_lat) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%low_e_lat == f2%low_e_lat) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%track_state == f2%track_state) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%has_open_match_element .eqv. f2%has_open_match_element) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%modes == f2%modes) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%rad_int == f2%rad_int) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%a == f2%a) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%b == f2%b) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_rad_int_cache == f2%ix_rad_int_cache) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%modes_rf_on == f2%modes_rf_on) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%rad_int_rf_on == f2%rad_int_rf_on) end function eq_tao_lattice_branch !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_lattice (f1, f2) result (is_eq) implicit none type(tao_lattice_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%lat == f2%lat) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%tao_branch) .eqv. allocated(f2%tao_branch)) if (.not. is_eq) return if (allocated(f1%tao_branch)) is_eq = all(shape(f1%tao_branch) == shape(f2%tao_branch)) if (.not. is_eq) return if (allocated(f1%tao_branch)) is_eq = all(f1%tao_branch == f2%tao_branch) end function eq_tao_lattice !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_element (f1, f2) result (is_eq) implicit none type(tao_element_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%beam == f2%beam) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%save_beam .eqv. f2%save_beam) end function eq_tao_element !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_ping_scale (f1, f2) result (is_eq) implicit none type(tao_ping_scale_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%a_mode_meas == f2%a_mode_meas) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%a_mode_ref == f2%a_mode_ref) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%b_mode_meas == f2%b_mode_meas) !! f_side.equality_test[real, 0, NOT] is_eq = is_eq .and. (f1%b_mode_ref == f2%b_mode_ref) end function eq_tao_ping_scale !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_universe_branch (f1, f2) result (is_eq) implicit none type(tao_universe_branch_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%ele) .eqv. allocated(f2%ele)) if (.not. is_eq) return if (allocated(f1%ele)) is_eq = all(shape(f1%ele) == shape(f2%ele)) if (.not. is_eq) return if (allocated(f1%ele)) is_eq = all(f1%ele == f2%ele) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%track_start == f2%track_start) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%track_end == f2%track_end) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_track_start == f2%ix_track_start) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_track_end == f2%ix_track_end) end function eq_tao_universe_branch !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_beam (f1, f2) result (is_eq) implicit none type(tao_beam_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%beam_init == f2%beam_init) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%start == f2%start) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%init_beam0 .eqv. f2%init_beam0) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%beam_all_file == f2%beam_all_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%beam0_file == f2%beam0_file) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%saved_at == f2%saved_at) end function eq_tao_beam !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_universe_calc (f1, f2) result (is_eq) implicit none type(tao_universe_calc_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%rad_int_for_data .eqv. f2%rad_int_for_data) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%rad_int_for_plotting .eqv. f2%rad_int_for_plotting) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%chrom_for_data .eqv. f2%chrom_for_data) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%chrom_for_plotting .eqv. f2%chrom_for_plotting) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%beam_sigma_for_data .eqv. f2%beam_sigma_for_data) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%beam_sigma_for_plotting .eqv. f2%beam_sigma_for_plotting) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%dynamic_aperture .eqv. f2%dynamic_aperture) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%one_turn_map .eqv. f2%one_turn_map) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%lattice .eqv. f2%lattice) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%mat6 .eqv. f2%mat6) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%track .eqv. f2%track) end function eq_tao_universe_calc !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_mpi (f1, f2) result (is_eq) implicit none type(tao_mpi_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%on .eqv. f2%on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%master .eqv. f2%master) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%rank == f2%rank) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%max_rank == f2%max_rank) !! f_side.equality_test[character, 0, NOT] is_eq = is_eq .and. (f1%host_name == f2%host_name) end function eq_tao_mpi !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_dynamic_aperture (f1, f2) result (is_eq) implicit none type(tao_dynamic_aperture_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%scan) .eqv. allocated(f2%scan)) if (.not. is_eq) return if (allocated(f1%scan)) is_eq = all(shape(f1%scan) == shape(f2%scan)) if (.not. is_eq) return if (allocated(f1%scan)) is_eq = all(f1%scan == f2%scan) !! f_side.equality_test[real, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%pz) .eqv. allocated(f2%pz)) if (.not. is_eq) return if (allocated(f1%pz)) is_eq = all(shape(f1%pz) == shape(f2%pz)) if (.not. is_eq) return if (allocated(f1%pz)) is_eq = all(f1%pz == f2%pz) end function eq_tao_dynamic_aperture !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_universe (f1, f2) result (is_eq) implicit none type(tao_universe_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%beam == f2%beam) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%dynamic_aperture == f2%dynamic_aperture) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%d2_data) .eqv. allocated(f2%d2_data)) if (.not. is_eq) return if (allocated(f1%d2_data)) is_eq = all(shape(f1%d2_data) == shape(f2%d2_data)) if (.not. is_eq) return if (allocated(f1%d2_data)) is_eq = all(f1%d2_data == f2%d2_data) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%data) .eqv. allocated(f2%data)) if (.not. is_eq) return if (allocated(f1%data)) is_eq = all(shape(f1%data) == shape(f2%data)) if (.not. is_eq) return if (allocated(f1%data)) is_eq = all(f1%data == f2%data) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%ping_scale == f2%ping_scale) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%scratch_lat == f2%scratch_lat) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%calc == f2%calc) !! f_side.equality_test[real, 2, ALLOC] is_eq = is_eq .and. (allocated(f1%dmodel_dvar) .eqv. allocated(f2%dmodel_dvar)) if (.not. is_eq) return if (allocated(f1%dmodel_dvar)) is_eq = all(shape(f1%dmodel_dvar) == shape(f2%dmodel_dvar)) if (.not. is_eq) return if (allocated(f1%dmodel_dvar)) is_eq = all(f1%dmodel_dvar == f2%dmodel_dvar) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%ix_uni == f2%ix_uni) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_d2_data_used == f2%n_d2_data_used) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_data_used == f2%n_data_used) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%reverse_tracking .eqv. f2%reverse_tracking) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%is_on .eqv. f2%is_on) !! f_side.equality_test[logical, 0, NOT] is_eq = is_eq .and. (f1%picked_uni .eqv. f2%picked_uni) end function eq_tao_universe !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- elemental function eq_tao_super_universe (f1, f2) result (is_eq) implicit none type(tao_super_universe_struct), intent(in) :: f1, f2 logical is_eq ! is_eq = .true. !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%global == f2%global) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%com == f2%com) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%plot_page == f2%plot_page) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%v1_var) .eqv. allocated(f2%v1_var)) if (.not. is_eq) return if (allocated(f1%v1_var)) is_eq = all(shape(f1%v1_var) == shape(f2%v1_var)) if (.not. is_eq) return if (allocated(f1%v1_var)) is_eq = all(f1%v1_var == f2%v1_var) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%var) .eqv. allocated(f2%var)) if (.not. is_eq) return if (allocated(f1%var)) is_eq = all(shape(f1%var) == shape(f2%var)) if (.not. is_eq) return if (allocated(f1%var)) is_eq = all(f1%var == f2%var) !! f_side.equality_test[type, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%u) .eqv. allocated(f2%u)) if (.not. is_eq) return if (allocated(f1%u)) is_eq = all(shape(f1%u) == shape(f2%u)) if (.not. is_eq) return if (allocated(f1%u)) is_eq = all(f1%u == f2%u) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%mpi == f2%mpi) !! f_side.equality_test[integer, 1, ALLOC] is_eq = is_eq .and. (allocated(f1%key) .eqv. allocated(f2%key)) if (.not. is_eq) return if (allocated(f1%key)) is_eq = all(shape(f1%key) == shape(f2%key)) if (.not. is_eq) return if (allocated(f1%key)) is_eq = all(f1%key == f2%key) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%building_wall == f2%building_wall) !! f_side.equality_test[type, 0, NOT] is_eq = is_eq .and. (f1%wave == f2%wave) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_var_used == f2%n_var_used) !! f_side.equality_test[integer, 0, NOT] is_eq = is_eq .and. (f1%n_v1_var_used == f2%n_v1_var_used) !! f_side.equality_test[type, 1, NOT] is_eq = is_eq .and. all(f1%history == f2%history) end function eq_tao_super_universe end module