From 4838f5c6c14d8aff8dee75124566ead3365605f0 Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Wed, 22 Jul 2026 09:20:40 +0000 Subject: [PATCH 01/38] FDTD | Feature | Add XDMF movie and frequency outputs --- src_output/frequencySliceProbeOutput.F90 | 340 ++++++++++++++ src_output/movieProbeOutput.F90 | 478 +++++++++++++++++++ src_output/xdmfAPI.F90 | 561 +++++++++++++++++++++++ 3 files changed, 1379 insertions(+) create mode 100644 src_output/frequencySliceProbeOutput.F90 create mode 100644 src_output/movieProbeOutput.F90 create mode 100644 src_output/xdmfAPI.F90 diff --git a/src_output/frequencySliceProbeOutput.F90 b/src_output/frequencySliceProbeOutput.F90 new file mode 100644 index 00000000..128c7598 --- /dev/null +++ b/src_output/frequencySliceProbeOutput.F90 @@ -0,0 +1,340 @@ +module frequencySliceProbeOutput_m + use FDETYPES_m + use utils_m + use report_m + use outputTypes_m + use outputUtils_m + use volumicProbeUtils_m + use directoryUtils_m + use xdmfAPI_m + implicit none + private + + !=========================== + ! Public interface summary + !=========================== + public :: init_frequency_slice_probe_output + public :: update_frequency_slice_probe_output + public :: flush_frequency_slice_probe_output + public :: close_frequency_slice_probe_output + !=========================== + + !=========================== + ! Private interface summary + !=========================== + private :: save_field + private :: save_field_module + private :: save_field_component + private :: save_current + private :: save_current_module + private :: save_current_component + !=========================== + + !=========================== + +contains + + subroutine init_frequency_slice_probe_output(this, lowerBound, upperBound, timeInterval, field, domain, outputTypeExtension, control, problemInfo) + type(frequency_slice_probe_output_t), intent(out) :: this + type(cell_coordinate_t), intent(in) :: lowerBound, upperBound + real(kind=RKIND_tiempo), intent(in) :: timeInterval + integer(kind=SINGLE), intent(in) :: field + type(domain_t), intent(in) :: domain + character(len=BUFSIZE), intent(in) :: outputTypeExtension + type(sim_control_t), intent(in) :: control + type(problem_info_t), intent(in) :: problemInfo + + integer :: i + integer :: error + character(len=BUFSIZE) :: filename + + this%mainCoords = lowerBound + this%auxCoords = upperBound + this%component = field !This can refer to electric, magnetic or currentDensity + this%domain = domain + this%nFreq = domain%fnum + + call alloc_and_init(this%frequencySlice, this%nFreq, 0.0_RKIND) + do i = 1, this%nFreq + call init_frequency_slice(this%frequencySlice, this%domain) + end do + + call find_and_store_important_coords(this%mainCoords, this%auxCoords, this%component, problemInfo, this%nPoints, this%coords) + + call alloc_and_init(this%xValueForFreq, this%nFreq, this%nPoints, (0.0_CKIND, 0.0_CKIND)) + call alloc_and_init(this%yValueForFreq, this%nFreq, this%nPoints, (0.0_CKIND, 0.0_CKIND)) + call alloc_and_init(this%zValueForFreq, this%nFreq, this%nPoints, (0.0_CKIND, 0.0_CKIND)) + + call alloc_and_init(this%auxExp_E, this%nFreq, (0.0_CKIND, 0.0_CKIND)) + call alloc_and_init(this%auxExp_H, this%nFreq, (0.0_CKIND, 0.0_CKIND)) + + do i = 1, this%nFreq + this%auxExp_E(i) = timeInterval*(1.0E0_RKIND, 0.0E0_RKIND)*Exp(mcpi2*this%frequencySlice(i)) ! the dt should be some kind of average + this%auxExp_H(i) = this%auxExp_E(i)*Exp(mcpi2*this%frequencySlice(i)*timeInterval*0.5_RKIND) + end do + + this%path = get_output_path_freq(this, outputTypeExtension, field, control) + + filename = get_last_component(this%path) + this%filesPath = join_path(this%path, filename) + + call create_folder(this%path, error) + call create_bin_file(this%filesPath, error) + end subroutine init_frequency_slice_probe_output + + subroutine create_bin_file(filePath, error) + character(len=*), intent(in) :: filePath + integer, intent(out) :: error + call create_file_with_path(add_extension(filePath, binaryExtension), error) + end subroutine + + subroutine write_bin_file(this) + ! Check type definition for binary format + type(frequency_slice_probe_output_t), intent(inout) :: this + integer :: i, f, unit + !We rewrite the binary as simulation continues + open (unit=unit, file=add_extension(this%filesPath, binaryExtension), & + status='old', form='unformatted', action='write', access='stream') + do f = 1, this%nFreq + do i = 1, this%nPoints + write(unit) this%frequencySlice(f), this%coords(1,i), this%coords(2,i), this%coords(3,i), this%xValueForFreq(f,i), this%yValueForFreq(f,i), this%xValueForFreq(f,i) + end do + end do + flush (unit) + close (unit) + end subroutine + + subroutine write_to_xdmf_h5(this) + !If we call to this subrutine it will always replace old values + type(frequency_slice_probe_output_t), intent(inout) :: this + + integer(HID_T) :: file_id + integer :: f, error, xdmfunit + real(dp), allocatable, dimension(:, :) :: coordsReal + character(len=256) :: h5_filename, h5_filepath + character(len=256) :: xdmf_filename + character(len=10) :: dimension_string + character(len=10) :: nCoordsString + character(len=14) :: stepName + h5_filepath = add_extension(this%filesPath, ".h5") + h5_filename = get_last_component(h5_filepath) + + call H5open_f(error) + call H5Fopen_f(trim(h5_filepath), H5F_ACC_RDWR_F, file_id, error) + write(dimension_string, '(I0,1X,I0)') this%nPoints, this%nFreq + write(nCoordsString, '(I0, I0)') this%nPoints, 1 + do f = 1, this%nFreq + write(stepName, '((I5.5))') f + call h5_append_rows_to_dataset(file_id, "xVal", reshape(real(abs(this%xValueForFreq(f, :)), dp), [1, this%nPoints])) + call h5_append_rows_to_dataset(file_id, "yVal", reshape(real(abs(this%yValueForFreq(f, :)), dp), [1, this%nPoints])) + call h5_append_rows_to_dataset(file_id, "zVal", reshape(real(abs(this%zValueForFreq(f, :)), dp), [1, this%nPoints])) + end do + call H5Fclose_f(file_id, error) + call H5close_f(error) + end subroutine + + function get_output_path_freq(this, outputTypeExtension, field, control) result(outputPath) + type(frequency_slice_probe_output_t), intent(in) :: this + character(len=*), intent(in) :: outputTypeExtension + integer(kind=SINGLE), intent(in) :: field + type(sim_control_t), intent(in) :: control + character(len=BUFSIZE) :: probeBoundsExtension, prefixFieldExtension + character(len=BUFSIZE) :: outputPath + probeBoundsExtension = get_coordinates_extension(this%mainCoords, this%auxCoords, control%mpidir) + prefixFieldExtension = get_prefix_extension(field, control%mpidir) + outputPath = & + trim(adjustl(outputTypeExtension))//'_'//trim(adjustl(prefixFieldExtension))//'_'//trim(adjustl(probeBoundsExtension)) + end function get_output_path_freq + + subroutine update_frequency_slice_probe_output(this, step, fieldsReference, control, problemInfo) + type(frequency_slice_probe_output_t), intent(inout) :: this + real(kind=RKIND_tiempo), intent(in) :: step + type(sim_control_t), intent(in) :: control + type(problem_info_t), intent(in) :: problemInfo + type(fields_reference_t), intent(in) :: fieldsReference + + integer(kind=4) :: request + request = this%component + + if (any(VOLUMIC_M_MEASURE == request)) then + select case (request) + case (iCur); call save_current_module(this, fieldsReference, step, problemInfo) + case (iMEC); call save_field_module(this, fieldsReference%E, step, request, problemInfo) + case (iMHC); call save_field_module(this, fieldsReference%H, step, request, problemInfo) + case default; call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + + else if (any(VOLUMIC_X_MEASURE == request)) then + select case (request) + case (iCurX); call save_current_component(this, this%xValueForFreq, fieldsReference, problemInfo, iEx, this%auxExp_E, this%nFreq, step) + case (iExC); call save_field_component(this, this%xValueForFreq, fieldsReference%E%x, step, problemInfo, iEx) + case (iHxC); call save_field_component(this, this%xValueForFreq, fieldsReference%H%x, step, problemInfo, iHx) + case default; call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + + else if (any(VOLUMIC_Y_MEASURE == request)) then + select case (request) + case (iCurY); call save_current_component(this, this%yValueForFreq, fieldsReference, problemInfo, iEy, this%auxExp_E, this%nFreq, step) + case (iEyC); call save_field_component(this, this%yValueForFreq, fieldsReference%E%y, step, problemInfo, iEy) + case (iHyC); call save_field_component(this, this%yValueForFreq, fieldsReference%H%y, step, problemInfo, iHy) + case default; call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + + else if (any(VOLUMIC_Z_MEASURE == request)) then + select case (request) + case (iCurZ); call save_current_component(this, this%zValueForFreq, fieldsReference, problemInfo, iEz, this%auxExp_E, this%nFreq, step) + case (iEzC); call save_field_component(this, this%zValueForFreq, fieldsReference%E%z, step, problemInfo, iEz) + case (iHzC); call save_field_component(this, this%zValueForFreq, fieldsReference%H%z, step, problemInfo, iHz) + case default; call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + end if + end subroutine update_frequency_slice_probe_output + + subroutine save_current_module(this, fieldsReference, step, problemInfo) + type(frequency_slice_probe_output_t), intent(inout) :: this + type(fields_reference_t), intent(in) :: fieldsReference + type(problem_info_t), intent(in) :: problemInfo + real(kind=RKIND_tiempo), intent(in) :: step + + integer :: i, j, k, coordIdx + + coordIdx = 0 + do i = this%mainCoords%x, this%auxCoords%x + do j = this%mainCoords%y, this%auxCoords%y + do k = this%mainCoords%z, this%auxCoords%z + if (isValidPointForCurrent(iCur, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_current(this%xValueForFreq, iEx, coordIdx, i, j, k, fieldsReference, this%auxExp_E, this%nFreq, step) + call save_current(this%yValueForFreq, iEy, coordIdx, i, j, k, fieldsReference, this%auxExp_E, this%nFreq, step) + call save_current(this%zValueForFreq, iEz, coordIdx, i, j, k, fieldsReference, this%auxExp_E, this%nFreq, step) + end if + end do + end do + end do + end subroutine + + subroutine save_current_component(this, currentData, fieldsReference, problemInfo, fieldDir, auxExp, nFreq, step) + type(frequency_slice_probe_output_t), intent(inout) :: this + complex(kind=CKIND), intent(inout) :: currentData(:, :) + type(fields_reference_t), intent(in) :: fieldsReference + type(problem_info_t), intent(in) :: problemInfo + integer, intent(in) :: fieldDir, nFreq + complex(kind=ckind), intent(in), dimension(:) :: auxExp + real(kind=RKIND_tiempo), intent(in) :: step + + integer :: i, j, k, coordIdx + + coordIdx = 0 + do i = this%mainCoords%x, this%auxCoords%x + do j = this%mainCoords%y, this%auxCoords%y + do k = this%mainCoords%z, this%auxCoords%z + if (isValidPointForCurrent(fieldDir, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_current(currentData, fieldDir, coordIdx, i, j, k, fieldsReference, auxExp, nFreq, step) + end if + end do + end do + end do + end subroutine + + subroutine save_current(valorComplex, direction, coordIdx, i, j, k, fieldsReference, auxExponential, nFreq, step) + integer, intent(in) :: direction + complex(kind=CKIND), intent(inout) :: valorComplex(:, :) + complex(kind=CKIND), intent(in) :: auxExponential(:) + integer, intent(in) :: i, j, k, coordIdx, nFreq + type(fields_reference_t), intent(in) :: fieldsReference + real(kind=RKIND_tiempo), intent(in) :: step + + integer :: iter + complex(kind=CKIND) :: z_cplx = (0.0_RKIND, 0.0_RKIND) + real(kind=rkind) :: jdir + + jdir = computej(direction, i, j, k, fieldsReference) + + do iter = 1, nFreq + valorComplex(iter, coordIdx) = valorComplex(iter, coordIdx) + (auxExponential(iter)**step)*jdir + end do + end subroutine + + subroutine save_field_module(this, fieldInfo, simTime, request, problemInfo) + type(frequency_slice_probe_output_t), intent(inout) :: this + type(field_data_t), intent(in) :: fieldInfo + real(kind=RKIND_tiempo), intent(in) :: simTime + type(problem_info_t), intent(in) :: problemInfo + integer, intent(in) :: request + + complex(kind=CKIND), dimension(this%nFreq) :: auxExponential + integer :: i, j, k, coordIdx + + if (iMHC == request) auxExponential = this%auxExp_H**simTime + if (iMEC == request) auxExponential = this%auxExp_E**simTime + + coordIdx = 0 + do i = this%mainCoords%x, this%auxCoords%x + do j = this%mainCoords%y, this%auxCoords%y + do k = this%mainCoords%z, this%auxCoords%z + if (isValidPointForField(request, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_field(this%xValueForFreq, auxExponential, fieldInfo%x(i, j, k), this%nFreq, coordIdx) + call save_field(this%yValueForFreq, auxExponential, fieldInfo%y(i, j, k), this%nFreq, coordIdx) + call save_field(this%zValueForFreq, auxExponential, fieldInfo%z(i, j, k), this%nFreq, coordIdx) + end if + end do + end do + end do + + end subroutine + + subroutine save_field_component(this, fieldData, fieldComponent, simTime, problemInfo, fieldDir) + type(frequency_slice_probe_output_t), intent(inout) :: this + complex(kind=CKIND), intent(inout) :: fieldData(:, :) + real(kind=RKIND), intent(in) :: fieldComponent(:, :, :) + real(kind=RKIND_tiempo), intent(in) :: simTime + type(problem_info_t), intent(in) :: problemInfo + integer, intent(in) :: fieldDir + + complex(kind=CKIND), dimension(this%nFreq) :: auxExponential + integer :: i, j, k, coordIdx + + if (any(MAGNETIC_FIELD_DIRECTION == fieldDir)) auxExponential = this%auxExp_H**simTime + if (any(ELECTRIC_FIELD_DIRECTION == fieldDir)) auxExponential = this%auxExp_E**simTime + + coordIdx = 0 + do i = this%mainCoords%x, this%auxCoords%x + do j = this%mainCoords%y, this%auxCoords%y + do k = this%mainCoords%z, this%auxCoords%z + if (isValidPointForField(fieldDir, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_field(fieldData, auxExponential, fieldComponent(i, j, k), this%nFreq, coordIdx) + end if + end do + end do + end do + end subroutine + + subroutine save_field(valorComplex, auxExp, fieldValue, nFreq, coordIdx) + complex(kind=CKIND), intent(inout) :: valorComplex(:, :) + complex(kind=CKIND), intent(in) :: auxExp(:) + real(KIND=RKIND), intent(in) :: fieldValue + integer(KIND=SINGLE), intent(in) :: nFreq, coordIdx + + integer :: freq + + do freq = 1, nFreq + valorComplex = valorComplex(freq, coordIdx) + auxExp(freq)*fieldValue + end do + end subroutine + + subroutine flush_frequency_slice_probe_output(this) + type(frequency_slice_probe_output_t), intent(inout) :: this + call write_bin_file(this) + end subroutine flush_frequency_slice_probe_output + + subroutine close_frequency_slice_probe_output(this) + type(frequency_slice_probe_output_t), intent(inout) :: this + call write_to_xdmf_h5(this) + end subroutine + + + +end module frequencySliceProbeOutput_m diff --git a/src_output/movieProbeOutput.F90 b/src_output/movieProbeOutput.F90 new file mode 100644 index 00000000..b937eac2 --- /dev/null +++ b/src_output/movieProbeOutput.F90 @@ -0,0 +1,478 @@ +module movieProbeOutput_m + use FDETYPES_m + use utils_m + use report_m + use outputTypes_m + use outputUtils_m + use volumicProbeUtils_m + use xdmfAPI_m + implicit none + private + + !=========================== + ! Public interface + !=========================== + public :: init_movie_probe_output + public :: update_movie_probe_output + public :: flush_movie_probe_output + !=========================== + + !=========================== + ! Private helpers + !=========================== + ! Output & File Management + private :: clear_memory_data + +contains + + !=========================== + ! Public routines + !=========================== + + subroutine init_movie_probe_output(this, lowerBound, upperBound, field, domain, control, problemInfo, outputTypeExtension) + type(movie_probe_output_t), intent(out) :: this + type(cell_coordinate_t), intent(in) :: lowerBound, upperBound + integer(kind=SINGLE), intent(in) :: field + type(domain_t), intent(in) :: domain + type(sim_control_t), intent(in) :: control + type(problem_info_t), intent(in) :: problemInfo + character(len=BUFSIZE), intent(in) :: outputTypeExtension + + integer :: error + character(len=BUFSIZE) :: filename + real(RKIND), pointer :: xsteps(:), ysteps(:), zsteps(:) + + this%mainCoords = lowerBound + this%auxCoords = upperBound + this%component = field + this%domain = domain + + xsteps => problemInfo%xSteps(lowerBound%x:upperBound%x) + ysteps => problemInfo%ySteps(lowerBound%y:upperBound%y) + zsteps => problemInfo%zSteps(lowerBound%z:upperBound%z) + + call find_and_store_important_coords(this%mainCoords, this%auxCoords, this%component, problemInfo, this%nPoints, this%coords) + call alloc_and_init(this%timeStep, BUFSIZE, 0.0_RKIND_tiempo) + + ! Allocate value arrays based on component type + call alloc_and_init(this%xValueForTime, BUFSIZE, this%nPoints, 0.0_RKIND) + call alloc_and_init(this%yValueForTime, BUFSIZE, this%nPoints, 0.0_RKIND) + call alloc_and_init(this%zValueForTime, BUFSIZE, this%nPoints, 0.0_RKIND) + + this%path = get_output_path(this, outputTypeExtension, field, control%mpidir) + filename = get_last_component(this%path) + this%filesPath = join_path(this%path, filename) + + call create_folder(this%path, error) + call create_bin_file(this%filesPath, error) + call create_movie_files(this, error, xsteps, ysteps, zsteps) + if (error/=0) print *, 'error en creacion' + end subroutine init_movie_probe_output + + subroutine create_bin_file(filePath, error) + character(len=*), intent(in) :: filePath + integer, intent(out) :: error + call create_file_with_path(add_extension(filePath, binaryExtension), error) + end subroutine + + subroutine create_movie_files(this, error, xsteps, ysteps, zsteps) + type(movie_probe_output_t), intent(in) :: this + real(RKIND), pointer, intent(in) :: xsteps(:), ysteps(:), zsteps(:) + integer, intent(out) :: error + + real(dp), allocatable, dimension(:, :) :: coordsReal + integer(HID_T) :: file_id + character(len=BUFSIZE) :: h5_filename + character(len=BUFSIZE) :: attributeBaseName + integer(SINGLE), dimension(3) :: topology_size + + h5_filename = add_extension(this%filesPath, ".h5") + topology_size(1) = this%auxCoords%x - this%mainCoords%x + 1 + topology_size(2) = this%auxCoords%y - this%mainCoords%y + 1 + topology_size(3) = this%auxCoords%z - this%mainCoords%z + 1 + + call H5open_f(error) + call create_h5_file(trim(h5_filename), file_id) + + call h5_create_rectilinear_coords_dataset(file_id, real(xsteps,dp), real(ysteps,dp), real(zsteps,dp)) + call h5_create_times_dataset(file_id, BUFSIZE) + call create_h5_data_dataset(file_id, this%component, topology_size) + + call H5Fclose_f(file_id, error) + call H5close_f(error) + end subroutine + + subroutine create_h5_data_dataset(file_id, requestedComponent, topology_size) + integer(HID_T), intent(in) :: file_id + integer(SINGLE), intent(in) :: requestedComponent + integer(SINGLE), dimension(3), intent(in) :: topology_size + + character(len=BUFSIZE) :: attributeBaseName + + select case(requestedComponent) + case(iCur, iCurX, iCurY, iCurZ); attributeBaseName = 'CurrenDensity' + case(iMEC, iExC, iEyC, iEzC); attributeBaseName = 'ElectricField' + case(iMHC, iHxC, iHyC, iHzC); attributeBaseName = 'MagneticField' + end select + + select case(requestedComponent) + case(iCur, iMEC, iMHC) + call h5_init_extendable_dataset(file_id, trim(attributeBaseName)//'X', topology_size, BUFSIZE) + call h5_init_extendable_dataset(file_id, trim(attributeBaseName)//'Y', topology_size, BUFSIZE) + call h5_init_extendable_dataset(file_id, trim(attributeBaseName)//'Z', topology_size, BUFSIZE) + case(iCurX, iEXC, iHXC) + call h5_init_extendable_dataset(file_id, trim(attributeBaseName)//'X', topology_size, BUFSIZE) + case(iCurY, iEyC, iHyC) + call h5_init_extendable_dataset(file_id, trim(attributeBaseName)//'Y', topology_size, BUFSIZE) + case(iCurZ, iEZC, iHzC) + call h5_init_extendable_dataset(file_id, trim(attributeBaseName)//'Z', topology_size, BUFSIZE) + end select + end subroutine + + subroutine update_movie_probe_output(this, step, fieldsReference, control, problemInfo) + type(movie_probe_output_t), intent(inout) :: this + real(kind=RKIND_tiempo), intent(in) :: step + type(fields_reference_t), intent(in) :: fieldsReference + type(sim_control_t), intent(in) :: control + type(problem_info_t), intent(in) :: problemInfo + + integer(kind=4) :: request + request = this%component + this%nTime = this%nTime + 1 + + ! Determine which save routine to call + if (any(VOLUMIC_M_MEASURE == request)) then + select case (request) + case (iCur) + call save_current_module(this, fieldsReference, step, problemInfo) + case (iMEC) + call save_field_module(this, fieldsReference%E, request, step, problemInfo) + case (iMHC) + call save_field_module(this, fieldsReference%H, request, step, problemInfo) + case default + call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + else if (any(VOLUMIC_X_MEASURE == request)) then + select case (request) + case (iCurX) + call save_current_component(this, this%xValueForTime, fieldsReference, step, problemInfo, iEx) + case (iExC) + call save_field_component(this, this%xValueForTime, fieldsReference%E%x, step, problemInfo, iEx) + case (iHxC) + call save_field_component(this, this%xValueForTime, fieldsReference%H%x, step, problemInfo, iHx) + case default + call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + else if (any(VOLUMIC_Y_MEASURE == request)) then + select case (request) + case (iCurY) + call save_current_component(this, this%yValueForTime, fieldsReference, step, problemInfo, iEy) + case (iEyC) + call save_field_component(this, this%yValueForTime, fieldsReference%E%y, step, problemInfo, iEy) + case (iHyC) + call save_field_component(this, this%yValueForTime, fieldsReference%H%y, step, problemInfo, iHy) + case default + call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + else if (any(VOLUMIC_Z_MEASURE == request)) then + select case (request) + case (iCurZ) + call save_current_component(this, this%zValueForTime, fieldsReference, step, problemInfo, iEz) + case (iEzC) + call save_field_component(this, this%zValueForTime, fieldsReference%E%z, step, problemInfo, iEz) + case (iHzC) + call save_field_component(this, this%zValueForTime, fieldsReference%H%z, step, problemInfo, iHz) + case default + call StopOnError(control%layoutnumber, control%num_procs, "Volumic measure not supported") + end select + end if + end subroutine update_movie_probe_output + + subroutine flush_movie_probe_output(this) + type(movie_probe_output_t), intent(inout) :: this + integer :: i + if (this%nTime /= 0) then + call write_bin_file(this) + call write_to_h5_file(this) + call write_to_xdmf_file(this) + end if + call clear_memory_data(this) + end subroutine flush_movie_probe_output + + !=========================== + ! Private routines + !=========================== + + subroutine write_bin_file(this) + ! Check type definition for binary format + type(movie_probe_output_t), intent(inout) :: this + integer :: i, t, unit + + open (unit=unit, file=add_extension(this%filesPath, binaryExtension), & + status='old', form='unformatted', position='append', access='stream') + do t = 1, this%nTime + do i = 1, this%nPoints + write(unit) this%timeStep(t), this%coords(1,i), this%coords(2,i), this%coords(3,i), this%xValueForTime(t,i), this%yValueForTime(t,i), this%zValueForTime(t,i) + end do + end do + flush (unit) + close (unit) + end subroutine + + subroutine write_to_xdmf_file(this) + type(movie_probe_output_t), intent(inout) :: this + + character(len=256) :: xdmf_filename + character(len=256) :: h5_filename + character(len=256) :: attributeBaseName + integer :: xdmfunit, error + integer, dimension(3) :: topologyDimensions + integer, dimension(4) :: h5_dimensions + xdmf_filename = add_extension(this%filesPath, ".xdmf") + h5_filename = add_extension(get_last_component(this%filesPath), ".h5") + + topologyDimensions(1) = this%auxCoords%x - this%mainCoords%x + 1 + topologyDimensions(2) = this%auxCoords%y - this%mainCoords%y + 1 + topologyDimensions(3) = this%auxCoords%z - this%mainCoords%z + 1 + + h5_dimensions(1) = this%nTime + this%nTimesFlushed + h5_dimensions(2) = topologyDimensions(3) + h5_dimensions(3) = topologyDimensions(2) + h5_dimensions(4) = topologyDimensions(1) + + select case(this%component) + case(iCur, iCurX, iCurY, iCurZ); attributeBaseName = 'CurrenDensity' + case(iMEC, iExC, iEyC, iEzC); attributeBaseName = 'ElectricField' + case(iMHC, iHxC, iHyC, iHzC); attributeBaseName = 'MagneticField' + end select + + open(newunit=xdmfunit, file=trim(xdmf_filename), status='replace', position='append', iostat=error) + call xdmf_write_header_file(xdmfunit, 'movieProbe') + + call xdmf_write_topology(xdmfunit, topologyDimensions) + call xdmf_write_geometry(xdmfunit, topologyDimensions, h5_filename) + call xdmf_write_time_array(xdmfunit, this%nTime + this%nTimesFlushed, h5_filename) + + select case(this%component) + case(iCur, iMEC, iMHC) + call xdmf_write_scalar_attribute(xdmfunit, h5_dimensions, h5_filename, trim(attributeBaseName)//'X') + call xdmf_write_scalar_attribute(xdmfunit, h5_dimensions, h5_filename, trim(attributeBaseName)//'Y') + call xdmf_write_scalar_attribute(xdmfunit, h5_dimensions, h5_filename, trim(attributeBaseName)//'Z') + case(iCurX, iEXC, iHXC) + call xdmf_write_scalar_attribute(xdmfunit, h5_dimensions, h5_filename, trim(attributeBaseName)//'X') + case(iCurY, iEyC, iHyC) + call xdmf_write_scalar_attribute(xdmfunit, h5_dimensions, h5_filename, trim(attributeBaseName)//'Y') + case(iCurZ, iEZC, iHzC) + call xdmf_write_scalar_attribute(xdmfunit, h5_dimensions, h5_filename, trim(attributeBaseName)//'Z') + end select + + call xdmf_write_footer_file(xdmfunit) + + close(xdmfunit) + end subroutine + + subroutine write_to_h5_file(this) + type(movie_probe_output_t), intent(inout) :: this + + integer(HID_T) :: file_id + integer :: i, error, probeDimensions(3) + real(dp), allocatable, dimension(:,:,:,:) :: h5Table + character(len=256) :: h5_filename, h5_filepath + character(len=256) :: attributeBaseName + h5_filepath = add_extension(this%filesPath, ".h5") + h5_filename = get_last_component(h5_filepath) + + !Only stores the volume associated to that probe + + probeDimensions(1) = this%auxCoords%x - this%mainCoords%x + 1 + probeDimensions(2) = this%auxCoords%y - this%mainCoords%y + 1 + probeDimensions(3) = this%auxCoords%z - this%mainCoords%z + 1 + + select case(this%component) + case(iCur, iCurX, iCurY, iCurZ); attributeBaseName = 'CurrenDensity' + case(iMEC, iExC, iEyC, iEzC); attributeBaseName = 'ElectricField' + case(iMHC, iHxC, iHyC, iHzC); attributeBaseName = 'MagneticField' + end select + + call H5open_f(error) + call H5Fopen_f(trim(h5_filepath), H5F_ACC_RDWR_F, file_id, error) + + call h5_append_rows_to_dataset(file_id, 'times', this%timeStep(:this%nTime)) + + allocate(h5Table(probeDimensions(1), probeDimensions(2), probeDimensions(3), this%nTime)) !(x,y,z,t) + if (any([iCur, iMEC, iMHC, iCurX, iExC, iHxC]==this%component)) then + h5Table = 0_dp + do i=1, this%nPoints !Readjust idx into hyperslab (x,y,z,t) + h5Table(this%coords(1,i) - this%mainCoords%x + 1, & + this%coords(2,i) - this%mainCoords%y + 1, & + this%coords(3,i) - this%mainCoords%z + 1, & + : ) = this%xValueForTime(:this%nTime, i) + end do + call h5_append_rows_to_dataset(file_id, trim(attributeBaseName)//'X', h5Table) + end if + if (any([iCur, iMEC, iMHC, iCurY, iEyC, iHyC]==this%component)) then + h5Table = 0_dp + do i=1, this%nPoints !Readjust idx into hyperslab (x,y,z,t) + h5Table(this%coords(1,i) - this%mainCoords%x + 1, & + this%coords(2,i) - this%mainCoords%y + 1, & + this%coords(3,i) - this%mainCoords%z + 1, & + : ) = this%yValueForTime(:this%nTime, i) + end do + call h5_append_rows_to_dataset(file_id, trim(attributeBaseName)//'Y', h5Table) + end if + if (any([iCur, iMEC, iMHC, iCurZ, iEzC, iHzC]==this%component)) then + h5Table = 0_dp + do i=1, this%nPoints !Readjust idx into hyperslab (x,y,z,t) + h5Table(this%coords(1,i) - this%mainCoords%x + 1, & + this%coords(2,i) - this%mainCoords%y + 1, & + this%coords(3,i) - this%mainCoords%z + 1, & + : ) = this%zValueForTime(:this%nTime, i) + end do + call h5_append_rows_to_dataset(file_id, trim(attributeBaseName)//'Z', h5Table) + end if + deallocate(h5Table) + + call H5Fclose_f(file_id, error) + call H5close_f(error) + if (error/=0) stop + end subroutine write_to_h5_file + + function get_output_path(this, outputTypeExtension, field, mpidir) result(path) + type(movie_probe_output_t), intent(in) :: this + character(len=*), intent(in) :: outputTypeExtension + integer(kind=SINGLE), intent(in) :: field, mpidir + character(len=BUFSIZE) :: path, probeBoundsExtension, prefixFieldExtension + + probeBoundsExtension = get_coordinates_extension(this%mainCoords, this%auxCoords, mpidir) + prefixFieldExtension = get_prefix_extension(field, mpidir) + path = trim(adjustl(outputTypeExtension))//'_'//trim(adjustl(prefixFieldExtension))//'_'//trim(adjustl(probeBoundsExtension)) + end function get_output_path + + subroutine save_current_module(this, fieldsReference, simTime, problemInfo) + type(movie_probe_output_t), intent(inout) :: this + type(fields_reference_t), intent(in) :: fieldsReference + real(kind=RKIND_tiempo), intent(in) :: simTime + type(problem_info_t), intent(in) :: problemInfo + + integer :: i, j, k, coordIdx + this%timeStep(this%nTime) = simTime + coordIdx = 0 + do k = this%mainCoords%z, this%auxCoords%z + do j = this%mainCoords%y, this%auxCoords%y + do i = this%mainCoords%x, this%auxCoords%x + if (isValidPointForCurrent(iCur, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_current(this%xValueForTime, this%nTime, coordIdx, iEx, i, j, k, fieldsReference) + call save_current(this%yValueForTime, this%nTime, coordIdx, iEy, i, j, k, fieldsReference) + call save_current(this%zValueForTime, this%nTime, coordIdx, iEz, i, j, k, fieldsReference) + end if + end do + end do + end do + end subroutine save_current_module + + subroutine save_current_component(this, currentData, fieldsReference, simTime, problemInfo, fieldDir) + type(movie_probe_output_t), intent(inout) :: this + real(kind=RKIND), intent(inout) :: currentData(:, :) + type(fields_reference_t), intent(in) :: fieldsReference + real(kind=RKIND_tiempo), intent(in) :: simTime + type(problem_info_t), intent(in) :: problemInfo + integer, intent(in) :: fieldDir + + integer :: i, j, k, coordIdx + this%timeStep(this%nTime) = simTime + coordIdx = 0 + do k = this%mainCoords%z, this%auxCoords%z + do j = this%mainCoords%y, this%auxCoords%y + do i = this%mainCoords%x, this%auxCoords%x + if (isValidPointForCurrent(fieldDir, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_current(currentData, this%nTime, coordIdx, fieldDir, i, j, k, fieldsReference) + end if + end do + end do + end do + end subroutine save_current_component + + subroutine save_current(currentData, timeIdx, coordIdx, field, i, j, k, fieldsReference) + real(kind=RKIND), intent(inout) :: currentData(:, :) + integer(kind=SINGLE), intent(in) :: timeIdx, coordIdx, field, i, j, k + type(fields_reference_t), intent(in) :: fieldsReference + + currentData(timeIdx, coordIdx) = computeJ(field, i, j, k, fieldsReference) + end subroutine save_current + + subroutine save_field_module(this, field, request, simTime, problemInfo) + type(movie_probe_output_t), intent(inout) :: this + type(field_data_t), intent(in) :: field + real(kind=RKIND_tiempo), intent(in) :: simTime + type(problem_info_t), intent(in) :: problemInfo + integer, intent(in) :: request + + integer :: i, j, k, coordIdx + this%timeStep(this%nTime) = simTime + coordIdx = 0 + do k = this%mainCoords%z, this%auxCoords%z + do j = this%mainCoords%y, this%auxCoords%y + do i = this%mainCoords%x, this%auxCoords%x + if (isValidPointForField(request, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_field(this%xValueForTime, this%nTime, coordIdx, field%x(i, j, k)) + call save_field(this%yValueForTime, this%nTime, coordIdx, field%y(i, j, k)) + call save_field(this%zValueForTime, this%nTime, coordIdx, field%z(i, j, k)) + end if + end do + end do + end do + end subroutine save_field_module + + subroutine save_field_component(this, fieldData, fieldComponent, simTime, problemInfo, fieldDir) + type(movie_probe_output_t), intent(inout) :: this + real(kind=RKIND), intent(inout) :: fieldData(:, :) + real(kind=RKIND), intent(in) :: fieldComponent(:, :, :) + real(kind=RKIND_tiempo), intent(in) :: simTime + type(problem_info_t), intent(in) :: problemInfo + integer, intent(in) :: fieldDir + + integer :: i, j, k, coordIdx + this%timeStep(this%nTime) = simTime + coordIdx = 0 + do k = this%mainCoords%z, this%auxCoords%z + do j = this%mainCoords%y, this%auxCoords%y + do i = this%mainCoords%x, this%auxCoords%x + if (isValidPointForField(fieldDir, i, j, k, problemInfo)) then + coordIdx = coordIdx + 1 + call save_field(fieldData, this%nTime, coordIdx, fieldComponent(i, j, k)) + end if + end do + end do + end do + end subroutine save_field_component + + subroutine save_field(fieldData, timeIdx, coordIdx, fieldValue) + real(kind=RKIND), intent(inout) :: fieldData(:, :) + integer(kind=SINGLE), intent(in) :: timeIdx, coordIdx + real(kind=RKIND), intent(in) :: fieldValue + + fieldData(timeIdx, coordIdx) = fieldValue + end subroutine save_field + + subroutine clear_memory_data(this) + type(movie_probe_output_t), intent(inout) :: this + this%nTimesFlushed = this%nTimesFlushed + this%nTime + this%nTime = 0 + this%timeStep = 0.0_RKIND + if (any(VOLUMIC_M_MEASURE == this%component)) then + this%xValueForTime = 0.0_RKIND + this%yValueForTime = 0.0_RKIND + this%zValueForTime = 0.0_RKIND + else if (any(VOLUMIC_X_MEASURE == this%component)) then + this%xValueForTime = 0.0_RKIND + else if (any(VOLUMIC_Y_MEASURE == this%component)) then + this%yValueForTime = 0.0_RKIND + else if (any(VOLUMIC_Z_MEASURE == this%component)) then + this%zValueForTime = 0.0_RKIND + end if + end subroutine clear_memory_data + +end module movieProbeOutput_m diff --git a/src_output/xdmfAPI.F90 b/src_output/xdmfAPI.F90 new file mode 100644 index 00000000..17bfb875 --- /dev/null +++ b/src_output/xdmfAPI.F90 @@ -0,0 +1,561 @@ +module xdmfAPI_m + use HDF5 + implicit none + + ! HDF5 constants + + integer, parameter :: dp = kind(1.0d0) + + + interface h5_write_dataset + module procedure write_1d_dataset + module procedure write_2d_dataset + module procedure write_3d_dataset + end interface + + interface h5_init_extendable_dataset + module procedure init_extendable_1D_dataset + module procedure init_extendable_2D_dataset + module procedure init_extendable_4D_dataset + end interface + + interface h5_append_rows_to_dataset + module procedure append_rows_to_1d_dataset + module procedure append_rows_to_2d_dataset + module procedure append_rows_to_4d_dataset + end interface + +contains + subroutine xdmf_write_header_file(unit, gridName) + integer, intent(in) :: unit + character (len=*), intent(in) :: gridName + write (unit, '(A)' ) '' + write (unit, '(A)' ) '' + write (unit, '(A)' ) '' + write (unit, '(A,A,A)') '' + end subroutine + + subroutine xdmf_write_footer_file(unit) + integer :: unit + write (unit, '(A)') '' + write (unit, '(A)') '' + write (unit, '(A)') '' + end subroutine + + subroutine xdmf_write_topology(unit, dimensions) + integer, intent(in) :: unit + integer, intent(in), dimension(3) :: dimensions + write (unit, '(A,I0,1X,I0,1X,I0,A)') '' !(z,y,x) + end subroutine + + subroutine xdmf_write_geometry(unit, dimensions, h5_filename) + integer, intent(in) :: unit + integer, intent(in), dimension(3) :: dimensions + character (len=*), intent(in) :: h5_filename + + write(unit, '(A)') '' + ! X coordinates + write(unit, '(A,I0,A)') '' + write(unit, '(A,A)' ) trim(h5_filename),':/coordsX' + write(unit, '(A)' ) '' + ! Y coordinates + write(unit, '(A,I0,A)') '' + write(unit, '(A,A)' ) trim(h5_filename),':/coordsY' + write(unit, '(A)' ) '' + ! Z coordinates + write(unit, '(A,I0,A)') '' + write(unit, '(A,A)' ) trim(h5_filename),':/coordsZ' + write(unit, '(A)' ) '' + ! Close JOIN and Geometry + write(unit, '(A)' ) '' + end subroutine + + subroutine xdmf_write_time_array(unit, nTime, h5_filename) + integer, intent(in) :: unit + integer, intent(in) :: nTime + character (len=*), intent(in) :: h5_filename + write(unit, '(A)' ) '' + end subroutine + + subroutine xdmf_write_scalar_attribute(unit, dimensions, h5_filename, attributeName) + integer, intent(in) :: unit + integer, intent(in), dimension(4) :: dimensions + character (len=*), intent(in) :: h5_filename + character (len=*), intent(in) :: attributeName + + write(unit, '(A,A,A)' ) '' + write(unit, '(A,I0,1X,I0,1X,I0,1X,I0,A)') '' + write(unit, '(A,A,A)' ) trim(h5_filename), ':/' ,trim(attributeName) + write(unit, '(A)' ) '' + write(unit, '(A)' ) '' + end subroutine + + subroutine xdmf_create_grid_step_info(unit, stepName, stepValue, h5_filename, ncoords) + !Requires file already open + !h5_file must contain a coords field + integer, intent(in) :: unit + character(len=*), intent(in) :: stepName + real, intent(in) :: stepValue + character(len=*), intent(in) :: h5_filename + integer, intent(in) :: ncoords + + write (unit, '(A,A,A)' ) '' + write (unit, '(A,G0,A)' ) '' + end subroutine xdmf_close_grid + + subroutine xdmf_write_attribute(unit, attributeName) + integer, intent(in) :: unit + character(len=*), intent(in) :: attributeName + write (unit, '(A,A,A)' ) '' + end subroutine xdmf_write_attribute + + subroutine xdmf_close_attribute(unit) + integer, intent(in) :: unit + write (unit, '(A)' ) '' + end subroutine xdmf_close_attribute + + subroutine xdmf_write_hyperslab_data_item(unit, offset, stride, selection, h5_dimension, h5_file_path, h5_data_path) + integer, intent(in) :: unit, offset(4), stride(4), selection(4), h5_dimension(4) + character(len=*), intent(in) :: h5_file_path, h5_data_path + write (unit, '(A,I0,1X,I0,1X,I0,1X,I0,A)') '' + call xdmf_write_h5_access_data_item(unit, offset, stride, selection) + call xdmf_write_h5_data_path(unit, h5_dimension, h5_file_path, h5_data_path) + call xdmf_close_data_item(unit) + end subroutine xdmf_write_hyperslab_data_item + + subroutine xdmf_write_h5_access_data_item(unit, offset, stride, selection) + !Used on cases where we acces parts of an h5 array + integer, intent(in) :: unit, offset(4), stride(4), selection(4) + write (unit, '(A)' ) '' + write (unit, '(I0,1X,I0,1X,I0,1X,I0)') offset(1), offset(2), offset(3), offset(4) + write (unit, '(I0,1X,I0,1X,I0,1X,I0)') stride(1), stride(2), stride(3), stride(4) + write (unit, '(I0,1X,I0,1X,I0,1X,I0)') selection(1), selection(2), selection(3), selection(4) + call xdmf_close_data_item(unit) + end subroutine xdmf_write_h5_access_data_item + + subroutine xdmf_write_h5_data_path(unit, h5_dimension, h5_file_path, h5_data_path) + integer, intent(in) :: unit, h5_dimension(4) + character(len=*), intent(in) :: h5_file_path, h5_data_path + write (unit, '(A,A,A)') ' Date: Wed, 22 Jul 2026 09:27:29 +0000 Subject: [PATCH 02/38] FDTD | Feature | Integrate observation output pipeline --- .github/workflows/ubuntu.yml | 5 +- CMakeLists.txt | 41 +- src_main_pub/fdetypes.F90 | 12 + src_main_pub/timestepping.F90 | 242 ++-- src_output/CMakeLists.txt | 46 + src_output/output.F90 | 547 ++++++++ test/CMakeLists.txt | 13 +- test/fdtd_tests.cpp | 7 +- test/output/CMakeLists.txt | 51 + test/output/output_tests.cpp | 1 + test/output/output_tests.h | 36 + test/output/test_output.F90 | 1100 +++++++++++++++++ test/output/test_output_utils.F90 | 236 ++++ test/output/test_volumic_utils.F90 | 138 +++ test/output/test_vtkAPI.F90 | 396 ++++++ test/output/test_xdmfAPI.F90 | 286 +++++ test/output/vtkAPI_tests.cpp | 1 + test/output/vtkAPI_tests.h | 27 + test/output/xdmfAPI_tests.cpp | 1 + test/output/xdmfAPI_tests.h | 18 + test/utils/CMakeLists.txt | 4 + test/utils/array_assertion_tools.F90 | 337 +++++ test/utils/assertion_tools.F90 | 180 +++ test/utils/fdetypes_tools.F90 | 869 ++++++++++++- test/utils/sgg_setters.F90 | 416 +++++++ .../movie_and_frequency_slices.fdtd.json | 197 +++ .../probes/time_movie_over_cube.fdtd.json | 2 +- 27 files changed, 5040 insertions(+), 169 deletions(-) create mode 100644 src_output/CMakeLists.txt create mode 100644 src_output/output.F90 create mode 100644 test/output/CMakeLists.txt create mode 100644 test/output/output_tests.cpp create mode 100644 test/output/output_tests.h create mode 100644 test/output/test_output.F90 create mode 100644 test/output/test_output_utils.F90 create mode 100644 test/output/test_volumic_utils.F90 create mode 100644 test/output/test_vtkAPI.F90 create mode 100644 test/output/test_xdmfAPI.F90 create mode 100644 test/output/vtkAPI_tests.cpp create mode 100644 test/output/vtkAPI_tests.h create mode 100644 test/output/xdmfAPI_tests.cpp create mode 100644 test/output/xdmfAPI_tests.h create mode 100644 test/utils/array_assertion_tools.F90 create mode 100644 test/utils/assertion_tools.F90 create mode 100644 test/utils/sgg_setters.F90 create mode 100644 testData/input_examples/probes/movie_and_frequency_slices.fdtd.json diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index c86b9f4d..e36a8674 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -26,6 +26,7 @@ jobs: mtln: ["ON", "OFF"] hdf: ["ON"] double-precision: ["OFF"] + new-output-module: ["OFF","ON"] include: # Disable by lack of space on github action @@ -86,13 +87,15 @@ jobs: -DSEMBA_FDTD_ENABLE_MPI=${{matrix.mpi}} \ -DSEMBA_FDTD_ENABLE_HDF=${{matrix.hdf}} \ -DSEMBA_FDTD_ENABLE_MTLN=${{matrix.mtln}} \ - -DSEMBA_FDTD_ENABLE_DOUBLE_PRECISION=${{matrix.double-precision}} + -DSEMBA_FDTD_ENABLE_DOUBLE_PRECISION=${{matrix.double-precision}} \ + -DSEMBA_FDTD_ENABLE_OUTPUT_MODULE=${{matrix.new-output-module}} cmake --build build -j - name: Run unit tests run: build/bin/fdtd_tests - name: Run python tests + if: matrix.new-output-module=='OFF' env: SEMBA_FDTD_ENABLE_MPI: ${{ matrix.mpi }} SEMBA_FDTD_ENABLE_MTLN: ${{ matrix.mtln }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 06c3cadb..2c65d14a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ option(SEMBA_FDTD_ENABLE_MPI "Use MPI" OFF) option(SEMBA_FDTD_ENABLE_HDF "Use HDF" ON) option(SEMBA_FDTD_ENABLE_MTLN "Use MTLN" ON) option(SEMBA_FDTD_ENABLE_SMBJSON "Use smbjson" ON) -option(SEMBA_FDTD_ENABLE_DOUBLE_PRECISION "Use double precision (CompileWithReal8)" OFF) +option(SEMBA_FDTD_ENABLE_DOUBLE_PRECISION "Use double precision (CompileWithReal8)" OFF) option(SEMBA_FDTD_ENABLE_TEST "Compile tests" ON) @@ -27,12 +27,18 @@ option(SEMBA_FDTD_EXECUTABLE "Compiles executable" ON) option(SEMBA_FDTD_MAIN_LIB "Compiles main library" ON) option(SEMBA_FDTD_COMPONENTS_LIB "Compiles components library" ON) option(SEMBA_FDTD_OUTPUTS_LIB "Compiles outputs library" ON) + +option(SEMBA_FDTD_ENABLE_OUTPUT_MODULE "Use the new output module" ON) + # Compilation defines. if(CMAKE_BUILD_TYPE MATCHES "Release" OR CMAKE_BUILD_TYPE MATCHES "release" ) add_definitions(-DCompileWithRelease) else() add_definitions(-DCompileWithDebug) endif() +if(SEMBA_FDTD_ENABLE_OUTPUT_MODULE) + add_definitions(-DCompileWithNewOutputModule) +endif() if(SEMBA_FDTD_ENABLE_SMBJSON) add_definitions(-DCompileWithSMBJSON) endif() @@ -44,12 +50,16 @@ if (SEMBA_FDTD_ENABLE_DOUBLE_PRECISION) else() add_definitions(-DCompileWithReal4) endif() -add_definitions( - -DCompileWithInt2 - -DCompileWithOpenMP -) - -include("${CMAKE_CURRENT_SOURCE_DIR}/set_precompiled_libraries.cmake") +add_definitions( + -DCompileWithInt2 + -DCompileWithOpenMP +) + +if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + add_definitions(-DGNUCompiler) +endif() + +include("${CMAKE_CURRENT_SOURCE_DIR}/set_precompiled_libraries.cmake") if (CMAKE_SYSTEM_NAME MATCHES "Linux") message(STATUS "Using Linux flags") @@ -180,6 +190,15 @@ if (SEMBA_FDTD_ENABLE_MTLN) endif() endif() +add_subdirectory(src_utils) + +if (SEMBA_FDTD_ENABLE_OUTPUT_MODULE) + add_subdirectory(src_output) + set(OUTPUT_LIBRARIES fdtd-output) + set(VTK_API_LIBRARIES vtkAPI) + set(XDMF_API_LIBRARIES xdmfAPI) +endif() + add_subdirectory(src_conformal) set(CONFORMAL_LIBRARIES conformal) @@ -188,6 +207,8 @@ if (SEMBA_FDTD_ENABLE_TEST) add_subdirectory(test) endif() + + if(SEMBA_FDTD_COMPONENTS_LIB) add_library(semba-components "src_main_pub/anisotropic.F90" @@ -250,7 +271,11 @@ if(SEMBA_FDTD_MAIN_LIB) "src_main_pub/timestepping.F90" ) target_link_libraries(semba-main - semba-outputs + semba-outputs + fdtd-utils + ${OUTPUT_LIBRARIES} + ${VTK_API_LIBRARIES} + ${XDMF_API_LIBRARIES} ${SMBJSON_LIBRARIES} ${MTLN_LIBRARIES}) endif() diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index 6c07acda..a51b4ee6 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -186,6 +186,17 @@ module FDETYPES_m integer(kind=4), parameter :: iBloqueJx=100*iEx,iBloqueJy=100*iEy,iBloqueJz=100*iEz integer(kind=4), parameter :: iBloqueMx=100*iHx,iBloqueMy=100*iHy,iBloqueMz=100*iHz ! + integer(kind=4), parameter :: VOLUMIC_M_MEASURE(3) = [iCur, iMEC, iMHC] + integer(kind=4), parameter :: VOLUMIC_X_MEASURE(3) = [iCurx, iExC, iHxC] + integer(kind=4), parameter :: VOLUMIC_Y_MEASURE(3) = [iCury, iEyC, iHyC] + integer(kind=4), parameter :: VOLUMIC_Z_MEASURE(3) = [iCurz, iEzC, iHzC] + + integer(kind=4), parameter :: MAGNETIC_FIELD_DIRECTION(3) = [iEx, iEy, iEz] + integer(kind=4), parameter :: ELECTRIC_FIELD_DIRECTION(3) = [iHx, iHy, iHz] + integer(kind=4), parameter :: CURRENT_MEASURE(4) = [iCur, iCurx, iCury, iCurz] + integer(kind=4), parameter :: ELECTRIC_FIELD_MEASURE(4) = [iMEC, iExC, iEyC, iEzC] + integer(kind=4), parameter :: MAGNETIC_FIELD_MEASURE(4) = [iMHC, iHxC, iHyC, iHzC] + ! character(len=*), parameter :: SEPARADOR='______________' integer(kind=4), parameter :: comi=1,fine=2, icoord=1,jcoord=2,kcoord=3 @@ -594,6 +605,7 @@ module FDETYPES_m type :: MediaData_t + integer(kind=SINGLE) :: Id real(kind=RKIND) :: Priority,Epr,Sigma,Mur,SigmaM logical :: sigmareasignado !solo afecta a un chequeo de errores en lumped 120123 type(exists_t) :: Is diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index 546ca5ce..c0ec567e 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -15,11 +15,15 @@ !________________________________________________________________________________________ module Solver_m - + use logUtils_m use FDETYPES_m use Report_m use PostProcessing_m use ilumina_m +#ifdef CompileWithNewOutputModule + use output_m + use outputTypes_m +#endif use Observa_m use BORDERS_other_m use BORDERS_CPML_m @@ -1461,9 +1465,13 @@ subroutine initializeObservation() call MPI_Barrier(SUBCOMM_MPI,ierr) #endif write(dubuf,*) 'Init Observation...'; call print11(this%control%layoutnumber,dubuf) +#ifdef CompileWithNewOutputModule + call init_outputs(this%sgg, this%media, this%sinPML_fullsize, this%tag_numbers, this%bounds, this%control, this%thereAre%Observation, this%thereAre%wires) +#else call InitObservation (this%sgg,this%media,this%tag_numbers, & this%thereAre%Observation,this%thereAre%wires,this%thereAre%FarFields,this%initialtimestep,this%lastexecutedtime, & this%sinPML_fullsize,this%eps0,this%mu0,this%bounds, this%control) +#endif l_auxinput=this%thereAre%Observation.or.this%thereAre%FarFields l_auxoutput=l_auxinput @@ -1725,8 +1733,12 @@ end subroutine solver_init subroutine solver_run(this) class(solver_t) :: this - real(kind=rkind), pointer, dimension(:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz - real(kind=rkind), pointer, dimension(:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh + real(kind=rkind), pointer, dimension (:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz + real(kind=rkind), pointer, dimension (:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh + +#ifdef CompileWithNewOutputModule + type(fields_reference_t) :: fieldReference +#endif logical :: call_timing, l_aux, flushFF, somethingdone, newsomethingdone integer :: i @@ -1748,6 +1760,23 @@ subroutine solver_run(this) Idxe => this%Idxe; Idye => this%Idye; Idze => this%Idze; Idxh => this%Idxh; Idyh => this%Idyh; Idzh => this%Idzh; dxe => this%dxe; dye => this%dye; dze => this%dze; dxh => this%dxh; dyh => this%dyh; dzh => this%dzh +#ifdef CompileWithNewOutputModule + fieldReference%E%x => this%Ex + fieldReference%E%y => this%Ey + fieldReference%E%z => this%Ez + + fieldReference%E%deltax => this%dxe + fieldReference%E%deltay => this%dye + fieldReference%E%deltaz => this%dze + + fieldReference%H%x => this%Hx + fieldReference%H%y => this%Hy + fieldReference%H%z => this%Hz + + fieldReference%H%deltax => this%dxh + fieldReference%H%deltay => this%dyh + fieldReference%H%deltaz => this%dzh +#endif ciclo_temporal : do while (this%n <= this%control%finaltimestep) @@ -1771,48 +1800,13 @@ subroutine solver_run(this) Ex,Ey,Ez,this%everflushed,this%control%nentradaroot,this%control%maxSourceValue,this%control%opcionestotales,this%control%simu_devia,this%control%dontwritevtk,this%control%permitscaling) if (.not.this%parar) then !!! si es por parada se gestiona al final -!!!!! si esta hecho lo flushea todo pero poniendo de acuerdo a todos los mpi - do i=1,this%sgg%NumberRequest - if (this%sgg%Observation(i)%done.and.(.not.this%sgg%Observation(i)%flushed)) then - this%perform%flushXdmf=.true. - this%perform%flushVTK=.true. - end if - end do -#ifdef CompileWithMPI - l_aux=this%perform%flushVTK - call MPI_AllReduce( l_aux, this%perform%flushVTK, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) - ! - l_aux=this%perform%flushXdmf - call MPI_AllReduce( l_aux, this%perform%flushXdmf, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) - ! - l_aux=this%perform%flushDATA - call MPI_AllReduce( l_aux, this%perform%flushDATA, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) - ! - l_aux=this%perform%flushFIELDS - call MPI_AllReduce( l_aux, this%perform%flushFIELDS, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) - ! - l_aux=this%perform%postprocess - call MPI_AllReduce( l_aux, this%perform%postprocess, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) -#endif -!!!!!!!!!!!! - if (this%perform%flushFIELDS) then - write(dubuf,*) SEPARADOR,trim(adjustl(this%control%nentradaroot)),separador - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) 'INIT FLUSHING OF RESTARTING FIELDS n=',this%n - call print11(this%control%layoutnumber,dubuf) - call flush_and_save_resume(this%sgg, this%bounds, this%control%layoutnumber, this%control%num_procs, this%control%nentradaroot, this%control%nresumeable2, this%thereare, this%n,this%eps0,this%mu0, this%everflushed, & - Ex, Ey, Ez, Hx, Hy, Hz,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic) -#ifdef CompileWithMPI - call MPI_Barrier(SUBCOMM_MPI,ierr) -#endif - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) 'DONE FLUSHING OF RESTARTING FIELDS n=',this%n - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) - end if - if (this%perform%isFlush()) then + call request_flush_if_any_observation_is_done() + + if (this%perform%flushFIELDS) then + call performFlushField() + end if + + if (this%perform%isFlush()) then ! flushFF=this%perform%postprocess if (this%thereAre%FarFields.and.flushFF) then @@ -1820,12 +1814,11 @@ subroutine solver_run(this) else write(dubuf,'(a,i9)') ' INIT OBSERVATION DATA FLUSHING n= ',this%n end if - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - call print11(this%control%layoutnumber,dubuf) - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - !! + call printMessageWithSeparator(this%control%layoutnumber,dubuf) +#ifdef CompileWithNewOutputModule + if (this%thereAre%Observation) call flush_outputs(this%sgg%tiempo, this%n, this%control, fieldReference, this%bounds, flushFF) +#else if (this%thereAre%Observation) call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,flushFF) - !! #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) #endif @@ -1834,15 +1827,11 @@ subroutine solver_run(this) else write(dubuf,'(a,i9)') ' Done OBSERVATION DATA FLUSHED n= ',this%n end if - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - call print11(this%control%layoutnumber,dubuf) - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) + call printMessageWithSeparator(this%control%layoutnumber,dubuf) ! if (this%perform%postprocess) then write(dubuf,'(a,i9)') 'Postprocessing frequency domain probes, if any, at n= ',this%n - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) + call printMessageWithEndingSeparator(this%control%layoutnumber,dubuf) somethingdone=.false. at=this%n*this%sgg%dt if (this%thereAre%Observation) call PostProcessOnthefly(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) @@ -1853,22 +1842,16 @@ subroutine solver_run(this) #endif if (somethingdone) then write(dubuf,*) 'End Postprocessing frequency domain probes.' - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) + call printMessageWithEndingSeparator(this%control%layoutnumber,dubuf) else write(dubuf,*) 'No frequency domain probes snapshots found to be postrocessed' - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) + call printMessageWithEndingSeparator(this%control%layoutnumber,dubuf) end if end if !! if (this%perform%flushvtk) then write(dubuf,'(a,i9)') ' Post-processing .vtk files n= ',this%n - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - call print11(this%control%layoutnumber,dubuf) - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) + call printMessageWithSeparator(this%control%layoutnumber,dubuf) somethingdone=.false. if (this%thereAre%Observation) call createvtkOnTheFly(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%vtkindex,somethingdone,this%control%mpidir,this%media%sggMtag,this%control%dontwritevtk) #ifdef CompileWithMPI @@ -1878,21 +1861,15 @@ subroutine solver_run(this) #endif if (somethingdone) then write(dubuf,*) 'End flushing .vtk snapshots' - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) + call printMessageWithEndingSeparator(this%control%layoutnumber,dubuf) else write(dubuf,*) 'No .vtk snapshots found to be flushed' - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) + call printMessageWithEndingSeparator(this%control%layoutnumber,dubuf) end if end if if (this%perform%flushXdmf) then write(dubuf,'(a,i9)') ' Post-processing .xdmf files n= ',this%n - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - call print11(this%control%layoutnumber,dubuf) - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) + call printMessageWithSeparator(this%control%layoutnumber,dubuf) somethingdone=.false. if (this%thereAre%Observation) call createxdmfOnTheFly(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%vtkindex,this%control%createh5bin,somethingdone,this%control%mpidir) @@ -1905,30 +1882,22 @@ subroutine solver_run(this) #endif if (somethingdone) then write(dubuf,*) 'End flushing .xdmf snapshots' - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) + call printMessageWithEndingSeparator(this%control%layoutnumber,dubuf) else write(dubuf,*) 'No .xdmf snapshots found to be flushed' - call print11(this%control%layoutnumber,dubuf) - write(dubuf,*) SEPARADOR//separador//separador - call print11(this%control%layoutnumber,dubuf) + call printMessageWithEndingSeparator(this%control%layoutnumber,dubuf) end if end if #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) +#endif #endif end if !del if (this%performflushDATA.or.... - ! - - if (this%control%singlefilewrite.and.this%perform%Unpack) call singleUnpack() if ((this%control%singlefilewrite.and.this%perform%Unpack).or.this%perform%isFlush()) then write(dubuf,'(a,i9)') ' Continuing simulation at n= ',this%n - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - call print11(this%control%layoutnumber,dubuf) - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) + call printMessageWithSeparator(this%control%layoutnumber,dubuf) end if end if !!!del if (.not.this%parar) @@ -1970,15 +1939,72 @@ subroutine solver_run(this) this%n=this%n+1 !sube de iteracion end do ciclo_temporal ! End of the time-stepping loop + contains + + subroutine request_flush_if_any_observation_is_done() + do i=1,this%sgg%NumberRequest + if (this%sgg%Observation(i)%done.and.(.not.this%sgg%Observation(i)%flushed)) then + this%perform%flushXdmf=.true. + this%perform%flushVTK=.true. + end if + end do +#ifdef CompileWithMPI + call syncroniceFlushFlags(this%perform, ierr) +#endif + end subroutine + +#ifdef CompileWithMPI + subroutine syncroniceFlushFlags(performFlags, integerError) + type(perform_t), intent(inout) :: performFlags + integer, intent(inout) :: integerError + logical :: logicalAux + logicalAux=performFlags%flushVTK + call MPI_AllReduce( logicalAux, performFlags%flushVTK, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, integerError) + logicalAux=performFlags%flushXdmf + call MPI_AllReduce( logicalAux, performFlags%flushXdmf, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, integerError) + logicalAux=performFlags%flushDATA + call MPI_AllReduce( logicalAux, performFlags%flushDATA, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, integerError) + logicalAux=performFlags%flushFIELDS + call MPI_AllReduce( logicalAux, performFlags%flushFIELDS, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, integerError) + logicalAux=performFlags%postprocess + call MPI_AllReduce( logicalAux, performFlags%postprocess, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, integerError) + end subroutine syncroniceFlushFlags +#endif + + subroutine performFlushField() + write(dubuf,*) SEPARADOR,trim(adjustl(this%control%nentradaroot)),SEPARADOR + call printMessage(this%control%layoutnumber,dubuf) + write(dubuf,*) 'INIT FLUSHING OF RESTARTING FIELDS n=',this%n + call printMessage(this%control%layoutnumber,dubuf) + + call flush_and_save_resume(this%sgg, this%bounds, this%control%layoutnumber, this%control%num_procs, this%control%nentradaroot, this%control%nresumeable2, this%thereare, this%n,this%eps0,this%mu0, this%everflushed, & + Ex, Ey, Ez, Hx, Hy, Hz,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic) +#ifdef CompileWithMPI + call MPI_Barrier(SUBCOMM_MPI,ierr) +#endif + write(dubuf,*) 'DONE FLUSHING OF RESTARTING FIELDS n=',this%n + call printMessageWithSeparator(this%control%layoutnumber, dubuf) + + end subroutine performFlushField subroutine updateAndFlush() integer(kind=4) :: mindum - if (this%thereAre%Observation) then + IF (this%thereAre%Observation) then +#ifdef CompileWithNewOutputModule + if (this%n /= 0) then + call update_outputs(this%control, this%sgg%tiempo, this%n, fieldReference) + if (this%n>=this%ini_save+BuffObse) then + mindum=min(this%control%finaltimestep,this%ini_save+BuffObse) + call flush_outputs(this%sgg%tiempo, this%n, this%control, fieldReference, this%bounds, .FALSE.) + end if + end if +#else call UpdateObservation(this%sgg,this%media,this%tag_numbers, this%n,this%ini_save, Ex, Ey, Ez, Hx, Hy, Hz, dxe, dye, dze, dxh, dyh, dzh,this%control%wiresflavor,this%sinPML_fullsize,this%control%wirecrank, this%control%noconformalmapvtk,this%bounds) if (this%n>=this%ini_save+BuffObse) then mindum=min(this%control%finaltimestep,this%ini_save+BuffObse) call FlushObservationFiles(this%sgg,this%ini_save,mindum,this%control%layoutnumber,this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.FALSE.) !no se flushean los farfields ahora end if +#endif end if end subroutine @@ -1989,10 +2015,9 @@ subroutine singleUnpack() #ifdef CompileWithMPI integer(kind=4) :: ierr #endif - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) write(dubuf,'(a,i9)') ' Unpacking .bin files and prostprocessing them at n= ',this%n - call print11(this%control%layoutnumber,dubuf) - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) + call printMessageWithSeparator(this%control%layoutnumber, dubuf) + if (this%thereAre%Observation) call unpacksinglefiles(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%singlefilewrite,this%initialtimestep,this%control%resume) !dump the remaining to disk somethingdone=.false. if (this%control%singlefilewrite.and.this%perform%Unpack) then @@ -2005,9 +2030,7 @@ subroutine singleUnpack() somethingdone=newsomethingdone #endif write(dubuf,'(a,i9)') ' Done Unpacking .bin files and prostprocessing them at n= ',this%n - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - call print11(this%control%layoutnumber,dubuf) - call print11(this%control%layoutnumber,SEPARADOR//separador//separador) + call printMessageWithSeparator(this%control%layoutnumber, dubuf) end subroutine singleUnpack @@ -2663,12 +2686,35 @@ subroutine solver_end(this) logical :: dummylog, somethingdone, newsomethingdone character(len=bufsize) :: dubuf +#ifdef CompileWithNewOutputModule + type(fields_reference_t) :: fieldReference +#endif + + #ifdef CompileWithMPI integer(kind=4) :: ierr #endif Ex => this%Ex; Ey => this%Ey; Ez => this%Ez; Hx => this%Hx; Hy => this%Hy; Hz => this%Hz; dxe => this%dxe; dye => this%dye; dze => this%dze; dxh => this%dxh; dyh => this%dyh; dzh => this%dzh +#ifdef CompileWithNewOutputModule + fieldReference%E%x => this%Ex + fieldReference%E%y => this%Ey + fieldReference%E%z => this%Ez + + fieldReference%E%deltax => this%dxe + fieldReference%E%deltay => this%dye + fieldReference%E%deltaz => this%dze + + fieldReference%H%x => this%Hx + fieldReference%H%y => this%Hy + fieldReference%H%z => this%Hz + + fieldReference%H%deltax => this%dxh + fieldReference%H%deltay => this%dyh + fieldReference%H%deltaz => this%dzh +#endif + #ifdef CompileWithProfiling call nvtxEndRange #endif @@ -2710,10 +2756,14 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) if (this%thereAre%Observation) then +#ifdef CompileWithNewOutputModule + call flush_outputs(this%sgg%tiempo, this%n, this%control, fieldReference, this%bounds, .TRUE.) + call close_outputs() +#else call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.TRUE.) call CloseObservationFiles(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%singlefilewrite,this%initialtimestep,this%lastexecutedtime,this%control%resume) !dump the remaining to disk +#endif end if - if (this%thereAre%FarFields) then write(dubuf,'(a,i9)') ' DONE FINAL OBSERVATION DATA FLUSHED and Near-to-Far field n= ',this%n else @@ -2727,6 +2777,9 @@ subroutine solver_end(this) call MPI_Barrier(SUBCOMM_MPI,ierr) #endif +#ifdef CompileWithNewOutputModule +#else + write(dubuf,'(a,i9)') 'INIT FINAL Postprocessing frequency domain probes, if any, at n= ',this%n call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador @@ -2734,6 +2787,7 @@ subroutine solver_end(this) somethingdone=.false. at=this%n*this%sgg%dt if (this%thereAre%Observation) call PostProcess(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) +#endif #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) call MPI_AllReduce(somethingdone, newsomethingdone, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) diff --git a/src_output/CMakeLists.txt b/src_output/CMakeLists.txt new file mode 100644 index 00000000..9e8efc87 --- /dev/null +++ b/src_output/CMakeLists.txt @@ -0,0 +1,46 @@ +message(STATUS "Creating build system for output") + +set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/mod) + +add_library(fdtd-output + "output.F90" + "outputTypes.F90" + "domain.F90" + "outputUtils.F90" + "volumicProbeUtils.F90" + "pointProbeOutput.F90" + "wireProbeOutput.F90" + "bulkProbeOutput.F90" + "movieProbeOutput.F90" + "frequencySliceProbeOutput.F90" + "farFieldProbeOutput.F90" + "mapVTKOutput.F90" +) + +target_link_libraries(fdtd-output PRIVATE + semba-components + semba-types + fdtd-utils + ${HDF5_LIBRARIES} + ${HDF5_HL_LIBRARIES} +) + + +add_library(vtkAPI + "vtkAPI.F90" +) + +add_library(xdmfAPI + "xdmfAPI.F90" +) + +target_link_libraries(xdmfAPI PRIVATE + ${HDF5_LIBRARIES} + ${HDF5_HL_LIBRARIES} +) + +target_link_libraries(vtkAPI + fdtd-utils +) + +target_include_directories(xdmfAPI PRIVATE ${HDF5_INCLUDE_DIRS}) diff --git a/src_output/output.F90 b/src_output/output.F90 new file mode 100644 index 00000000..4c21bb35 --- /dev/null +++ b/src_output/output.F90 @@ -0,0 +1,547 @@ +module output_m + use FDETYPES_m + use report_m + use domain_m + use outputUtils_m + use pointProbeOutput_m + use wireProbeOutput_m + use bulkProbeOutput_m + use movieProbeOutput_m + use frequencySliceProbeOutput_m + use farFieldOutput_m + use mapVTKOutput_m +#ifdef CompileWithMTLN + use Wire_bundles_mtln_m, only: GetSolverPtr + use mtln_solver_m, only: mtln_solver_t => mtln_t +#endif + + + implicit none + private + + !=========================== + ! Public interface summary + !=========================== + public :: solver_output_t + public :: GetOutputs + public :: init_outputs + public :: update_outputs + public :: flush_outputs + public :: close_outputs + + public :: POINT_PROBE_ID, WIRE_CURRENT_PROBE_ID, WIRE_CHARGE_PROBE_ID, BULK_PROBE_ID, VOLUMIC_CURRENT_PROBE_ID, & + MOVIE_PROBE_ID, FREQUENCY_SLICE_PROBE_ID, FAR_FIELD_PROBE_ID + !=========================== + + !=========================== + ! Private interface summary + !=========================== + private :: get_required_output_count + !=========================== + + integer(kind=SINGLE), parameter :: UNDEFINED_PROBE = -1, & + POINT_PROBE_ID = 0, & + WIRE_CURRENT_PROBE_ID = 1, & + WIRE_CHARGE_PROBE_ID = 2, & + BULK_PROBE_ID = 3, & + VOLUMIC_CURRENT_PROBE_ID = 4, & + MOVIE_PROBE_ID = 5, & + FREQUENCY_SLICE_PROBE_ID = 6, & + FAR_FIELD_PROBE_ID = 7, & + MAPVTK_ID = 8 + + REAL(KIND=RKIND), save :: eps0, mu0 + REAL(KIND=RKIND), pointer, dimension(:), save :: InvEps, InvMu + type(solver_output_t), pointer, dimension(:), save :: outputs + type(problem_info_t), save, target :: problemInfo + + interface init_solver_output + module procedure & + init_point_probe_output, & + init_wire_current_probe_output, & + init_wire_charge_probe_output, & + init_bulk_probe_output, & + init_movie_probe_output, & + init_frequency_slice_probe_output, & + init_farField_probe_output, & + init_mapvtk_output + end interface + + interface update_solver_output + module procedure & + update_point_probe_output, & + update_wire_current_probe_output, & + update_wire_charge_probe_output, & + update_bulk_probe_output, & + update_movie_probe_output, & + update_frequency_slice_probe_output, & + update_farField_probe_output + end interface + + interface flush_solver_output + module procedure & + flush_point_probe_output, & + flush_wire_current_probe_output, & + flush_wire_charge_probe_output, & + flush_bulk_probe_output, & + flush_movie_probe_output, & + flush_frequency_slice_probe_output, & + flush_farField_probe_output + + end interface + + interface close_solver_output + module procedure close_frequency_slice_probe_output + end interface +contains + + function GetOutputs() result(r) + type(solver_output_t), pointer, dimension(:) :: r + r => outputs + return + end function + + function GetProblemInfo() result(r) + type(problem_info_t), pointer :: r + r => problemInfo + return + end function + + subroutine init_outputs(sgg, media, sinpml_fullsize, materialTags, bounds, control, observationsExists, wiresExists) + + type(SGGFDTDINFO_t), intent(in) :: sgg + type(media_matrices_t), target, intent(in) :: media + type(limit_t), dimension(:), target, intent(in) :: SINPML_fullsize + type(bounds_t),intent(in), target :: bounds + type(taglist_t),intent(in), target :: materialTags + type(sim_control_t), intent(in) :: control + logical, intent(inout) :: wiresExists + logical, intent(out) :: observationsExists + + type(domain_t) :: domain + type(spheric_domain_t) :: sphericRange + type(cell_coordinate_t) :: lowerBound, upperBound + integer(kind=SINGLE) :: i, ii, outputRequestType + integer(kind=SINGLE) :: NODE + integer(kind=SINGLE) :: outputCount + integer(kind=SINGLE) :: requestedOutputs + character(len=BUFSIZE) :: outputTypeExtension + +#ifdef CompileWithMTLN + logical :: thereAreMtlnObservations = .false. +#endif + observationsExists = .false. + requestedOutputs = get_required_output_count(sgg) + + problemInfo%geometryToMaterialData => media + problemInfo%materialList => sgg%Med + problemInfo%simulationBounds => bounds + problemInfo%problemDimension => SINPML_fullsize + problemInfo%materialTag => materialTags + problemInfo%xSteps => sgg%LineX + problemInfo%ySteps => sgg%LineY + problemInfo%zSteps => sgg%LineZ + + outputs => NULL() + allocate (outputs(requestedOutputs)) + + allocate (InvEps(0:sgg%NumMedia - 1), InvMu(0:sgg%NumMedia - 1)) + outputCount = 0 + + InvEps(0:sgg%NumMedia - 1) = 1.0_RKIND/(Eps0*sgg%Med(0:sgg%NumMedia - 1)%Epr) + InvMu(0:sgg%NumMedia - 1) = 1.0_RKIND/(Mu0*sgg%Med(0:sgg%NumMedia - 1)%Mur) + + !do ii = 1, sgg%NumberRequest + !do i = 1, sgg%Observation(ii)%nP + ! call eliminate_unnecesary_observation_points(sgg%Observation(ii)%P(i), output(ii)%item(i), & + ! sgg%Sweep, sgg%SINPMLSweep, sgg%Observation(ii)%P(1)%ZI, sgg%Observation(ii)%P(1)%ZE, control%layoutnumber, control%num_procs) + !end do + !end do + +#ifdef CompileWithMTLN + block + type(mtln_solver_t), pointer :: mtln_solver + integer :: i, j + mtln_solver => GetSolverPtr() + if (mtln_solver%number_of_bundles > 0) then + do i = 1, ubound(mtln_solver%bundles, 1) + if (ubound(mtln_solver%bundles(i)%probes, 1) /= 0) then + do j = 1, ubound(mtln_solver%bundles(i)%probes, 1) + if (mtln_solver%bundles(i)%probes(j)%in_layer) thereAreMtlnObservations = .true. + end do + end if + end do + end if + end block +#endif + + do ii = 1, sgg%NumberRequest + domain = preprocess_domain(sgg%Observation(ii), sgg%tiempo, sgg%dt, control%finaltimestep) + if (domain%domainType == UNDEFINED_DOMAIN) cycle + do i = 1, sgg%Observation(ii)%nP + lowerBound%x = sgg%observation(ii)%P(i)%XI + lowerBound%y = sgg%observation(ii)%P(i)%YI + lowerBound%z = sgg%observation(ii)%P(i)%ZI + + upperBound%x = sgg%observation(ii)%P(i)%XE + upperBound%y = sgg%observation(ii)%P(i)%YE + upperBound%z = sgg%observation(ii)%P(i)%ZE + NODE = sgg%observation(ii)%P(i)%NODE + + outputTypeExtension = trim(adjustl(control%nEntradaRoot))//'_'//trim(adjustl(sgg%observation(ii)%outputrequest)) + + outputRequestType = sgg%observation(ii)%P(i)%what + select case (outputRequestType) + case (mapvtk) + outputCount = outputCount + 1 + outputs(outputCount)%outputID = MAPVTK_ID + + allocate (outputs(outputCount)%mapvtkOutput) + call init_solver_output(outputs(outputCount)%mapvtkOutput, lowerBound, upperBound, outputRequestType, outputTypeExtension, control%mpidir, problemInfo) + call create_geometry_simulation_vtu(outputs(outputCount)%mapvtkOutput, control, sgg%LineX, sgg%LineY, sgg%LineZ) + !! call adjust_computation_range --- Required due to issues in mpi region edges + + case (iEx, iEy, iEz, iHx, iHy, iHz) + outputCount = outputCount + 1 + outputs(outputCount)%outputID = POINT_PROBE_ID + + allocate (outputs(outputCount)%pointProbe) + call init_solver_output(outputs(outputCount)%pointProbe, lowerBound, outputRequestType, domain, outputTypeExtension, control%mpidir, sgg%dt) + case (iJx, iJy, iJz) + if (wiresExists) then + outputCount = outputCount + 1 + outputs(outputCount)%outputID = WIRE_CURRENT_PROBE_ID + + allocate (outputs(outputCount)%wireCurrentProbe) + call init_solver_output(outputs(outputCount)%wireCurrentProbe, lowerBound, NODE, outputRequestType, domain, problemInfo%materialList, outputTypeExtension, control%mpidir, control%wiresflavor) + end if + + case (iQx, iQy, iQz) + outputCount = outputCount + 1 + outputs(outputCount)%outputID = WIRE_CHARGE_PROBE_ID + + allocate (outputs(outputCount)%wireChargeProbe) + call init_solver_output(outputs(outputCount)%wireChargeProbe, lowerBound, NODE, outputRequestType, domain, outputTypeExtension, control%mpidir, control%wiresflavor) + + case (iBloqueJx, iBloqueJy, iBloqueJz, iBloqueMx, iBloqueMy, iBloqueMz) + outputCount = outputCount + 1 + outputs(outputCount)%outputID = BULK_PROBE_ID + + allocate (outputs(outputCount)%bulkCurrentProbe) + call init_solver_output(outputs(outputCount)%bulkCurrentProbe, lowerBound, upperBound, outputRequestType, domain, outputTypeExtension, control%mpidir) + !! call adjust_computation_range --- Required due to issues in mpi region edges + + case (iCur, iMEC, iMHC, iCurX, iCurY, iCurZ, iExC, iEyC, iEzC, iHxC, iHyC, iHzC) + call adjust_bound_range() + + if (domain%domainType == TIME_DOMAIN) then + + outputCount = outputCount + 1 + outputs(outputCount)%outputID = MOVIE_PROBE_ID + allocate (outputs(outputCount)%movieProbe) + call init_solver_output(outputs(outputCount)%movieProbe, lowerBound, upperBound, outputRequestType, domain, control, problemInfo, outputTypeExtension) + else if (domain%domainType == FREQUENCY_DOMAIN) then + + outputCount = outputCount + 1 + outputs(outputCount)%outputID = FREQUENCY_SLICE_PROBE_ID + allocate (outputs(outputCount)%frequencySliceProbe) + call init_solver_output(outputs(outputCount)%frequencySliceProbe, lowerBound, upperBound, sgg%dt, outputRequestType, domain, outputTypeExtension, control, problemInfo) + end if + case (farfield) + sphericRange = preprocess_polar_range(sgg%Observation(ii)) + + outputCount = outputCount + 1 + outputs(outputCount)%outputID = FAR_FIELD_PROBE_ID + allocate (outputs(outputCount)%farFieldOutput) + call init_solver_output(outputs(outputCount)%farFieldOutput, sgg, lowerBound, upperBound, outputRequestType, domain, sphericRange, outputTypeExtension, sgg%Observation(ii)%FileNormalize, control, problemInfo, eps0, mu0) + case default + call stoponerror(0, 0, 'OutputRequestType type not implemented yet on new observations') + end select + end do + end do + if (outputCount /= requestedOutputs) then + call remove_unused_outputs(outputs) + outputCount = size(outputs) + end if + if (outputCount /= 0) observationsExists = .true. +#ifdef CompileWithMTLN + observationsExists = observationsExists .or. thereAreMtlnObservations +#endif + if (observationsExists) call registerOutputFiles(control, outputCount) + return + contains + subroutine adjust_bound_range() + select case (outputRequestType) + case (iExC, iEyC, iHzC, iMhC) + lowerBound%z = max(sgg%Sweep(fieldo(outputRequestType, 'Z'))%ZI, sgg%observation(ii)%P(i)%ZI) + upperBound%z = min(sgg%Sweep(fieldo(outputRequestType, 'Z'))%ZE - 1, sgg%observation(ii)%P(i)%ZE) + case (iEzC, iHxC, iHyC, iMeC) + lowerBound%z = max(sgg%Sweep(fieldo(outputRequestType, 'Z'))%ZI, sgg%observation(ii)%P(i)%ZI) + upperbound%z = min(sgg%Sweep(fieldo(outputRequestType, 'Z'))%ZE, sgg%observation(ii)%P(i)%ZE) + case (iCur, iCurX, iCurY, iCurZ) + lowerBound%z = max(sgg%Sweep(fieldo(outputRequestType, 'X'))%ZI, sgg%observation(ii)%P(i)%ZI) !ojo estaba sweep(iEz) para ser conservador...puede dar problemas!! 03/07/15 + upperbound%z = min(sgg%Sweep(fieldo(outputRequestType, 'X'))%ZE, sgg%observation(ii)%P(i)%ZE) !ojo estaba sweep(iEz) para ser conservador...puede dar problemas!! 03/07/15 + end select + end subroutine + function preprocess_domain(observation, timeArray, simulationTimeStep, finalStepIndex) result(newDomain) + type(Obses_t), intent(in) :: observation + real(kind=RKIND_tiempo), pointer, dimension(:), intent(in) :: timeArray + real(kind=RKIND_tiempo), intent(in) :: simulationTimeStep + integer(kind=4), intent(in) :: finalStepIndex + type(domain_t) :: newDomain + + integer(kind=SINGLE) :: nFreq + + if (observation%TimeDomain) then + newdomain = domain_t(real(observation%InitialTime, kind=RKIND_tiempo), & + real(observation%FinalTime, kind=RKIND_tiempo), & + real(observation%TimeStep, kind=RKIND_tiempo)) + + newdomain%tstep = max(newdomain%tstep, simulationTimeStep) + + if (10.0_RKIND*(newdomain%tstop - newdomain%tstart)/min(simulationTimeStep, newdomain%tstep) >= huge(1_4)) then + newdomain%tstop = newdomain%tstart + min(simulationTimeStep, newdomain%tstep)*huge(1_4)/10.0_RKIND + end if + + if (newDomain%tstart < newDomain%tstep) then + newDomain%tstart = 0.0_RKIND_tiempo + end if + + if (newDomain%tstep > (newdomain%tstop - newdomain%tstart)) then + newDomain%tstop = newDomain%tstart + newDomain%tstep + end if + + elseif (observation%FreqDomain) then + !Just linear progression for now. Need to bring logartihmic info to here + nFreq = int((observation%FinalFreq - observation%InitialFreq)/observation%FreqStep, kind=SINGLE) + 1_SINGLE + newdomain = domain_t(observation%InitialFreq, observation%FinalFreq, nFreq, logarithmicspacing=.false.) + + newDomain%fstep = min(newDomain%fstep, 2.0_RKIND/simulationTimeStep) + if ((newDomain%fstep > newDomain%fstop - newDomain%fstart) .or. (newDomain%fstep == 0)) then + newDomain%fstep = newDomain%fstop - newDomain%fstart + newDomain%fstop = newDomain%fstart + newDomain%fstep + end if + + newDomain%fnum = int((newDomain%fstop - newDomain%fstart)/newDomain%fstep, kind=SINGLE) + + else + newDomain = domain_t() + end if + return + end function preprocess_domain + + function preprocess_polar_range(observation) result(sphericDomain) + type(spheric_domain_t) :: sphericDomain + type(Obses_t), intent(in) :: observation + + sphericDomain%phiStart = observation%phiStart + sphericDomain%phiStop = observation%phiStop + sphericDomain%phiStep = observation%phiStep + sphericDomain%thetaStart = observation%thetaStart + sphericDomain%thetaStop = observation%thetaStop + sphericDomain%thetaStep = observation%thetaStep + end function preprocess_polar_range + + end subroutine init_outputs + + subroutine update_outputs(control, discreteTimeArray, timeIndx, fieldsReference) + integer(kind=SINGLE), intent(in) :: timeIndx + real(kind=RKIND_tiempo), dimension(:), intent(in) :: discreteTimeArray + integer(kind=SINGLE) :: i, id + type(sim_control_t), intent(in) :: control + real(kind=RKIND), pointer, dimension(:, :, :) :: fieldComponent + type(field_data_t) :: fieldReference + type(fields_reference_t), intent(in) :: fieldsReference + real(kind=RKIND_tiempo) :: discreteTime + + discreteTime = discreteTimeArray(timeIndx) + + do i = 1, size(outputs) + select case (outputs(i)%outputID) + case (POINT_PROBE_ID) + fieldComponent => get_field_component(outputs(i)%pointProbe%component, fieldsReference) !Cada componente requiere de valores deiferentes pero estos valores no se como conseguirlos + call update_solver_output(outputs(i)%pointProbe, discreteTime, fieldComponent) + case (WIRE_CURRENT_PROBE_ID) + call update_solver_output(outputs(i)%wireCurrentProbe, discreteTime, control, InvEps, InvMu) + case (WIRE_CHARGE_PROBE_ID) + call update_solver_output(outputs(i)%wireChargeProbe, discreteTime) + case (BULK_PROBE_ID) + fieldReference = get_field_reference(outputs(i)%bulkCurrentProbe%component, fieldsReference) + call update_solver_output(outputs(i)%bulkCurrentProbe, discreteTime, fieldReference) + case (MOVIE_PROBE_ID) + call update_solver_output(outputs(i)%movieProbe, discreteTime, fieldsReference, control, problemInfo) + case (FREQUENCY_SLICE_PROBE_ID) + call update_solver_output(outputs(i)%frequencySliceProbe, discreteTime, fieldsReference, control, problemInfo) + case (FAR_FIELD_PROBE_ID) + call update_solver_output(outputs(i)%farFieldOutput, timeIndx, problemInfo%simulationBounds, fieldsReference) + case(MAPVTK_ID) + case default + call stoponerror(0, 0, 'Output update not implemented') + end select + end do + + end subroutine update_outputs + + subroutine flush_outputs(simulationTimeArray, simulationTimeIndex, control, fields, bounds, farFieldFlushRequested) + implicit none + type(fields_reference_t), target :: fields + type(fields_reference_t), pointer :: fieldsPtr + type(sim_control_t), intent(in) :: control + type(bounds_t), intent(in) :: bounds + logical, intent(in) :: farFieldFlushRequested + real(KIND=RKIND_tiempo), pointer, dimension(:), intent(in) :: simulationTimeArray + integer, intent(in) :: simulationTimeIndex + integer :: outIdx + + fieldsPtr => fields + + do outIdx = 1, size(outputs) + select case (outputs(outIdx)%outputID) + case (POINT_PROBE_ID) + call flush_solver_output(outputs(outIdx)%pointProbe) + case (WIRE_CURRENT_PROBE_ID) + call flush_solver_output(outputs(outIdx)%wireCurrentProbe) + case (WIRE_CHARGE_PROBE_ID) + call flush_solver_output(outputs(outIdx)%wireChargeProbe) + case (BULK_PROBE_ID) + call flush_solver_output(outputs(outIdx)%bulkCurrentProbe) + case (MOVIE_PROBE_ID) + call flush_solver_output(outputs(outIdx)%movieProbe) + case (FREQUENCY_SLICE_PROBE_ID) + call flush_solver_output(outputs(outIdx)%frequencySliceProbe) + case (FAR_FIELD_PROBE_ID) + if (farFieldFlushRequested) call flush_solver_output(outputs(outIdx)%farFieldOutput, simulationTimeArray, simulationTimeIndex, control, fieldsPtr, bounds) + case default + end select + end do + end subroutine flush_outputs + + subroutine remove_unused_outputs(output_list) + implicit none + type(solver_output_t), pointer, intent(inout) :: output_list(:) + + type(solver_output_t), allocatable :: tmp(:) + integer :: i, n, k + + n = count(output_list%outputID /= UNDEFINED_PROBE) + + allocate (tmp(n)) + + ! Copy valid elements + k = 0 + do i = 1, size(output_list) + if (output_list(i)%outputID /= UNDEFINED_PROBE) then + k = k + 1 + tmp(k) = output_list(i) ! deep copy of all allocatable components + end if + end do + + ! Replace the saved pointer target safely + if (associated(output_list)) deallocate (output_list) + allocate (output_list(n)) + output_list = tmp + + end subroutine remove_unused_outputs + + subroutine close_outputs() + integer :: i + do i = 1, size(outputs) + select case (outputs(i)%outputID) + case (POINT_PROBE_ID) + case (WIRE_CURRENT_PROBE_ID) + case (WIRE_CHARGE_PROBE_ID) + case (BULK_PROBE_ID) + case (VOLUMIC_CURRENT_PROBE_ID) + case (MOVIE_PROBE_ID) + case (FREQUENCY_SLICE_PROBE_ID) + call close_solver_output(outputs(i)%frequencySliceProbe) + end select + end do + end subroutine + + subroutine create_pvd(pvdPath) + implicit none + character(len=*), intent(in) :: pvdPath + integer :: ios + integer :: unit + + open (newunit=unit, file=trim(pvdPath), status="replace", action="write", iostat=ios) + if (ios /= 0) stop "Error al crear archivo PVD" + + ! Escribimos encabezados XML + write (unit, *) '' + write (unit, *) '' + write (unit, *) ' ' + close (unit) + end subroutine create_pvd + + subroutine close_pvd(pvdPath) + implicit none + character(len=*), intent(in) :: pvdPath + integer :: unit + integer :: ios + open (newunit=unit, file=trim(pvdPath), status="old", action="write", iostat=ios) + if (ios /= 0) stop "Error al abrir archivo PVD" + write (unit, *) ' ' + write (unit, *) '' + close (unit) + end subroutine close_pvd + + function get_required_output_count(sgg) result(count) + type(SGGFDTDINFO_t), intent(in) :: sgg + integer(kind=SINGLE) ::i, count + count = 0 + do i = 1, sgg%NumberRequest + count = count + sgg%Observation(i)%nP + end do + return + end function + + subroutine registerOutputFiles(control, outputCount) + type(sim_control_t), intent(in) :: control + integer, intent(in) :: outputCount + + character(LEN=BUFSIZE) :: whoami, whoamishort, outputRequestFile + integer :: iostat, i, unit + + write (whoamishort, '(i5)') control%layoutnumber + 1 + write (whoami, '(a,i5,a,i5,a)') '(', control%layoutnumber + 1, '/', control%num_procs, ') ' + write (outputRequestFile, *) trim(adjustl(control%nEntradaRoot))//'_Outputrequests_'//trim(adjustl(whoamishort))//'.txt' + + call create_file_with_path(outputRequestFile, iostat) + if (iostat /= 0) call StopOnError(control%layoutnumber, control%num_procs, 'Error while creating new outputrequestRegister file...') + + open (newunit=unit, file=trim(adjustl(outputRequestFile)), status='replace', action='write', position='append', iostat=iostat) + do i = 1, outputCount + select case (outputs(i)%outputID) + case (POINT_PROBE_ID) + if (any(outputs(i)%pointProbe%domain%domainType == (/TIME_DOMAIN, BOTH_DOMAIN/))) then + write (unit, *) trim(adjustl(outputs(i)%pointProbe%filePathTime)) + end if + if (any(outputs(i)%pointProbe%domain%domainType == (/FREQUENCY_DOMAIN, BOTH_DOMAIN/))) then + write (unit, *) trim(adjustl(outputs(i)%pointProbe%filePathFreq)) + end if + case (WIRE_CURRENT_PROBE_ID) + write (unit, *) trim(adjustl(outputs(i)%wireCurrentProbe%filePathTime)) + case (WIRE_CHARGE_PROBE_ID) + write (unit, *) trim(adjustl(outputs(i)%wireChargeProbe%filePathTime)) + case (BULK_PROBE_ID) + write (unit, *) trim(adjustl(outputs(i)%bulkCurrentProbe%filePathTime)) + case (MOVIE_PROBE_ID) + write (unit, *) trim(adjustl(outputs(i)%movieProbe%filePathTime)) + case (FREQUENCY_SLICE_PROBE_ID) + write (unit, *) trim(adjustl(outputs(i)%frequencySliceProbe%filePathFreq)) + case (FAR_FIELD_PROBE_ID) + write (unit, *) trim(adjustl(outputs(i)%farFieldOutput%filePathFreq)) + case (MAPVTK_ID) + write (unit, *) trim(adjustl(outputs(i)%mapvtkOutput%path)) + case default + call stoponerror(0, 0, 'Output update not implemented') + end select + end do + + write (unit, *) 'END!' + close (unit) + end subroutine + +end module output_m diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1cf9378e..8e559176 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -23,7 +23,13 @@ if (SEMBA_FDTD_ENABLE_SMBJSON) set(ROTATE_TESTS_LIBRARY rotate_tests) add_subdirectory(vtk) set(VTK_TESTS_LIBRARY vtk_tests) - if (NOT SEMBA_FDTD_ENABLE_MPI) + if (SEMBA_FDTD_ENABLE_OUTPUT_MODULE) + add_subdirectory(output) + set(OUTPUT_TESTS_LIBRARY output_tests) + set(VTK_API_TESTS_LIBRARY vtkAPI_tests) + set(XDMF_API_TESTS_LIBRARY xdmfAPI_tests) + endif() + if (NOT SEMBA_FDTD_ENABLE_MPI AND NOT SEMBA_FDTD_ENABLE_OUTPUT_MODULE) add_subdirectory(observation) set(OBSERVATION_TESTS_LIBRARY observation_tests) endif() @@ -47,7 +53,10 @@ target_link_libraries(fdtd_tests ${ROTATE_TESTS_LIBRARY} ${HDF_TESTS_LIBRARY} ${VTK_TESTS_LIBRARY} + ${OUTPUT_TESTS_LIBRARY} + ${VTK_API_TESTS_LIBRARY} + ${XDMF_API_TESTS_LIBRARY} ${SYSTEM_TESTS_LIBRARY} ${OBSERVATION_TESTS_LIBRARY} GTest::gtest_main -) \ No newline at end of file +) diff --git a/test/fdtd_tests.cpp b/test/fdtd_tests.cpp index 8c9aee1c..2c0e74b3 100644 --- a/test/fdtd_tests.cpp +++ b/test/fdtd_tests.cpp @@ -8,8 +8,13 @@ #include "smbjson/smbjson_tests.h" #include "rotate/rotate_tests.h" #include "vtk/vtk_tests.h" + #ifdef CompileWithNewOutputModule + #include "output/output_tests.h" + #include "output/vtkAPI_tests.h" + #include "output/xdmfAPI_tests.h" + #endif #endif -#ifndef CompileWithMPI +#if !defined(CompileWithMPI) && !defined(CompileWithNewOutputModule) #include "observation/observation_tests.h" #endif #include "conformal/conformal_tests.h" diff --git a/test/output/CMakeLists.txt b/test/output/CMakeLists.txt new file mode 100644 index 00000000..86270a9d --- /dev/null +++ b/test/output/CMakeLists.txt @@ -0,0 +1,51 @@ +message(STATUS "Creating build system for test/output") + +add_library( + output_test_fortran + "test_output.F90" + "test_output_utils.F90" + "test_volumic_utils.F90" +) + +add_library(vtkAPI_test_fortran + "test_vtkAPI.F90" +) + +add_library(xdmfAPI_test_fortran + "test_xdmfAPI.F90" +) + +add_library(output_tests "output_tests.cpp") +add_library(vtkAPI_tests "vtkAPI_tests.cpp") +add_library(xdmfAPI_tests "xdmfAPI_tests.cpp") + +target_link_libraries(output_test_fortran + semba-outputs + fdtd-output + test_utils_fortran +) +target_link_libraries(output_tests + output_test_fortran + GTest::gtest +) +target_link_libraries(vtkAPI_test_fortran + vtkAPI + test_utils_fortran +) +target_link_libraries(vtkAPI_tests + vtkAPI_test_fortran + GTest::gtest +) + +target_link_libraries(xdmfAPI_test_fortran + xdmfAPI + test_utils_fortran + ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES} +) + +target_link_libraries(xdmfAPI_tests + xdmfAPI_test_fortran + GTest::gtest +) + +target_include_directories(xdmfAPI_test_fortran PRIVATE ${HDF5_INCLUDE_DIRS}) diff --git a/test/output/output_tests.cpp b/test/output/output_tests.cpp new file mode 100644 index 00000000..0dcc8252 --- /dev/null +++ b/test/output/output_tests.cpp @@ -0,0 +1 @@ +#include "output_tests.h" \ No newline at end of file diff --git a/test/output/output_tests.h b/test/output/output_tests.h new file mode 100644 index 00000000..6e35893d --- /dev/null +++ b/test/output/output_tests.h @@ -0,0 +1,36 @@ +#ifdef CompileWithNewOutputModule + +#include + +extern "C" int test_init_point_probe(); +extern "C" int test_update_point_probe(); +extern "C" int test_flush_point_probe(); +extern "C" int test_multiple_flush_point_probe(); +extern "C" int test_init_movie_probe(); +extern "C" int test_update_movie_probe(); +extern "C" int test_flush_movie_probe(); +extern "C" int test_init_frequency_slice_probe(); +extern "C" int test_update_frequency_slice_probe(); + +extern "C" int test_count_required_coords(); +extern "C" int test_store_required_coords(); +extern "C" int test_is_valid_point_current(); +extern "C" int test_is_valid_point_field(); + + +TEST(output, test_initialize_point_probe) {EXPECT_EQ(0, test_init_point_probe()); } +TEST(output, test_update_point_probe_info) {EXPECT_EQ(0, test_update_point_probe()); } +TEST(output, test_flush_point_probe_info) {EXPECT_EQ(0, test_flush_point_probe()); } +TEST(output, test_flush_multiple_point_probe_info) {EXPECT_EQ(0, test_multiple_flush_point_probe()); } +TEST(output, test_init_movie_probe_for_pec_surface) {EXPECT_EQ(0, test_init_movie_probe()); } +TEST(output, test_update_movie_probe_for_pec_surface) {EXPECT_EQ(0, test_update_movie_probe()); } +TEST(output, test_flush_movie_probe_data) {EXPECT_EQ(0, test_flush_movie_probe()); } +TEST(output, test_init_frequency_slice) {EXPECT_EQ(0, test_init_frequency_slice_probe()); } +TEST(output, test_update_frequency_slice) {EXPECT_EQ(0, test_update_frequency_slice_probe()); } + +TEST(output, test_volumic_utils_count) { EXPECT_EQ(0, test_count_required_coords()); } +TEST(output, test_volumic_utils_store) { EXPECT_EQ(0, test_store_required_coords()); } +TEST(output, test_volumic_utils_valid_current) { EXPECT_EQ(0, test_is_valid_point_current()); } +TEST(output, test_volumic_utils_valid_field) { EXPECT_EQ(0, test_is_valid_point_field()); } + +#endif \ No newline at end of file diff --git a/test/output/test_output.F90 b/test/output/test_output.F90 new file mode 100644 index 00000000..00ff2f87 --- /dev/null +++ b/test/output/test_output.F90 @@ -0,0 +1,1100 @@ +integer function test_init_point_probe() bind(c) result(err) +! This test initializes a single point probe at coordinates (4,4,4). +! It verifies that the probe is correctly registered in the simulation outputs, +! that the output ID matches POINT_PROBE_ID, and that the output paths for +! both the probe and its time data file are correctly set and exist. + use FDETYPES_m + use FDETYPES_TOOLS + use output_m + use outputTypes_m + use testOutputUtils_m + use sggMethods_m + use assertionTools_m + use directoryUtils_m + implicit none + + ! Parameters + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=18), parameter :: test_name = 'initPointProbeTest' + + ! Local variables + character(len=1) :: sep + character(len=BUFSIZE) :: nEntrada + character(len=BUFSIZE) :: expectedProbePath + character(len=BUFSIZE) :: expectedDataPath + + type(SGGFDTDINFO_t) :: sgg + type(sim_control_t) :: control + type(bounds_t) :: bounds + type(media_matrices_t) :: media + type(limit_t), allocatable :: sinpml(:) + type(Obses_t) :: probe + type(solver_output_t), pointer :: outputs(:) + type(MediaData_t), allocatable, target :: materials(:) + type(MediaData_t), pointer :: materialsPtr(:) + type(taglist_t) :: tagNumbers + + real(kind=RKIND_tiempo), pointer :: timeArray(:) + real(kind=RKIND_tiempo) :: dt = 0.1_RKIND_tiempo + integer(kind=SINGLE) :: nSteps = 100_SINGLE + + logical :: outputRequested + logical :: hasWires = .false. + integer(kind=SINGLE) :: test_err = 0 + integer :: ios + + ! Setup + sep = get_path_separator() + nEntrada = test_folder//sep//test_name + + call sgg_init(sgg) + call init_time_array(timeArray, nSteps, dt) + call sgg_set_tiempo(sgg, timeArray) + call sgg_set_dt(sgg, dt) + + call init_simulation_material_list(materials) + materialsPtr => materials + call sgg_set_Med(sgg, materialsPtr) + + probe = create_point_probe_observation(4, 4, 4) + call sgg_add_observation(sgg, probe) + + control = create_control_flags(mpidir=3, nEntradaRoot=trim(nEntrada), wiresflavor='holland') + + ! Action + call init_outputs(sgg, media, sinpml, tagNumbers, bounds, control, outputRequested, hasWires) + outputs => GetOutputs() + + ! Assertions + test_err = test_err + assert_true(outputRequested, 'Valid probes not found') + test_err = test_err + assert_integer_equal(outputs(1)%outputID, POINT_PROBE_ID, 'Unexpected probe id') + + expectedProbePath = trim(nEntrada)//wordSeparation//'pointProbe_Ex_4_4_4' + expectedDataPath = trim(expectedProbePath)//wordSeparation//timeExtension//datFileExtension + + test_err = test_err + assert_string_equal(outputs(1)%pointProbe%path, expectedProbePath, 'Unexpected path') + test_err = test_err + assert_string_equal(outputs(1)%pointProbe%filePathTime, expectedDataPath, 'Unexpected path') + test_err = test_err + assert_true(file_exists(expectedDataPath), 'Time data file do not exist') + + ! Cleanup + call remove_folder(test_folder, ios) + deallocate (sgg%Observation, outputs) + + err = test_err +end function + +integer function test_update_point_probe() bind(c) result(err) +! This test updates the values recorded by a single point probe at (4,4,4) +! over two timesteps. It verifies that the probe correctly stores the time +! steps and associated field values, ensuring proper temporal tracking of +! measured quantities. + use FDETYPES_m + use FDETYPES_TOOLS + use output_m + use outputTypes_m + use testOutputUtils_m + use sggMethods_m + use assertionTools_m + use directoryUtils_m + implicit none + + ! Parameters + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=20), parameter :: test_name = 'updatePointProbeTest' + + ! Local variables + character(len=1) :: sep + character(len=BUFSIZE) :: nEntrada + + type(SGGFDTDINFO_t) :: sgg + type(sim_control_t) :: control + type(bounds_t) :: bounds + type(media_matrices_t) :: media + type(limit_t), allocatable :: sinpml(:) + type(Obses_t) :: probe + type(solver_output_t), pointer :: outputs(:) + type(MediaData_t), allocatable, target :: materials(:) + type(MediaData_t), pointer :: materialsPtr(:) + type(taglist_t) :: tagNumbers + + type(dummyFields_t), target :: dummyFields + type(fields_reference_t) :: fields + + real(kind=RKIND_tiempo), pointer :: timeArray(:) + real(kind=RKIND_tiempo) :: dt = 0.1_RKIND_tiempo + integer(kind=SINGLE) :: nSteps = 100_SINGLE + + logical :: outputRequested + logical :: hasWires = .false. + integer(kind=SINGLE) :: test_err = 0 + integer :: ios + + ! Setup + sep = get_path_separator() + nEntrada = test_folder//sep//test_name + + call sgg_init(sgg) + call init_time_array(timeArray, nSteps, dt) + call sgg_set_tiempo(sgg, timeArray) + call sgg_set_dt(sgg, dt) + + probe = create_point_probe_observation(4, 4, 4) + call sgg_add_observation(sgg, probe) + + call init_simulation_material_list(materials) + materialsPtr => materials + call sgg_set_Med(sgg, materialsPtr) + + control = create_control_flags(mpidir=3, nEntradaRoot=nEntrada, wiresflavor='holland') + call init_outputs(sgg, media, sinpml, tagNumbers, bounds, control, outputRequested, hasWires) + + call create_dummy_fields(dummyFields, 1, 10, 0.01_RKIND) + + fields%E%x => dummyFields%Ex + fields%E%y => dummyFields%Ey + fields%E%z => dummyFields%Ez + fields%E%deltax => dummyFields%dxe + fields%E%deltaY => dummyFields%dye + fields%E%deltaZ => dummyFields%dze + + fields%H%x => dummyFields%Hx + fields%H%y => dummyFields%Hy + fields%H%z => dummyFields%Hz + fields%H%deltax => dummyFields%dxh + fields%H%deltaY => dummyFields%dyh + fields%H%deltaZ => dummyFields%dzh + + ! Action + dummyFields%Ex(4, 4, 4) = 5.0_RKIND + call update_outputs(control, sgg%tiempo, 1_SINGLE, fields) + outputs => GetOutputs() + + ! Assertions + test_err = test_err + assert_real_equal(outputs(1)%pointProbe%timeStep(1), 0.0_RKIND_tiempo, 1e-5_RKIND_tiempo, 'Unexpected timestep 1') + test_err = test_err + assert_real_equal(outputs(1)%pointProbe%valueForTime(1), 5.0_RKIND, 1e-5_RKIND, 'Unexpected field 1') + + dummyFields%Ex(4, 4, 4) = -4.0_RKIND + call update_outputs(control, sgg%tiempo, 2_SINGLE, fields) + + test_err = test_err + assert_real_equal(outputs(1)%pointProbe%timeStep(2), 0.1_RKIND_tiempo, 1e-5_RKIND_tiempo, 'Unexpected timestep 2') + test_err = test_err + assert_real_equal(outputs(1)%pointProbe%valueForTime(2), -4.0_RKIND, 1e-5_RKIND, 'Unexpected field 2') + + !Cleanup + call remove_folder(test_folder, ios) + + err = test_err +end function + +integer function test_flush_point_probe() bind(c) result(err) +! This test validates the flush operation for a point probe. It ensures +! that time and frequency data are properly written to files, and that +! internal arrays are cleared/reset after flushing, preserving data integrity. + use output_m + use outputTypes_m + use pointProbeOutput_m + use domain_m + use testOutputUtils_m + use assertionTools_m + use directoryUtils_m + implicit none + + ! Parameters + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=19), parameter :: test_name = 'flushPointProbeTest' + + ! Local variables + character(len=1) :: sep + character(len=BUFSIZE) :: nEntrada + + type(point_probe_output_t) :: probe + type(domain_t) :: domain + type(cell_coordinate_t) :: coordinates + + integer :: n, i + integer :: test_err = 0 + integer :: ios + + ! Setup + sep = get_path_separator() + nEntrada = test_folder//sep//test_name + + domain = domain_t( & + 0.0_RKIND_tiempo, 10.0_RKIND_tiempo, 0.1_RKIND_tiempo, & + 10.0_RKIND, 100.0_RKIND, 10, .false.) + + coordinates%x = 2 + coordinates%y = 2 + coordinates%z = 2 + + call init_point_probe_output(probe, coordinates, iEx, domain, nEntrada, 3, 0.1_RKIND_tiempo) + + ! Action + n = 10 + do i = 1, n + probe%timeStep(i) = real(i) + probe%valueForTime(i) = 10.0*i + probe%frequencySlice(i) = 0.1*i + probe%valueForFreq(i) = 0.2*i + end do + + probe%nTime = n + probe%nFreq = n + + call flush_point_probe_output(probe) + + ! Assertions + test_err = test_err + assert_written_output_file(probe%filePathTime) + test_err = test_err + assert_written_output_file(probe%filePathFreq) + + test_err = test_err + assert_integer_equal(probe%nTime, 0, 'ERROR: clear_time_data did not reset serializedTimeSize!') + + if (.not. all(probe%timeStep == 0.0) .or. .not. all(probe%valueForTime == 0.0)) then + print *, 'ERROR: time arrays not cleared!' + test_err = test_err + 1 + end if + + if (probe%nFreq == 0) then + print *, 'ERROR: Destroyed frequency reference!' + test_err = test_err + 1 + end if + + !Cleanup + call remove_folder(test_folder, ios) + + err = test_err +end function + +integer function test_multiple_flush_point_probe() bind(c) result(err) +! This test verifies that multiple consecutive flushes of a point probe +! correctly append or overwrite data files without losing previous data. +! It ensures consistency of both time and frequency outputs across multiple flushes. + use output_m + use outputTypes_m + use pointProbeOutput_m + use domain_m + use testOutputUtils_m + use assertionTools_m + use directoryUtils_m + implicit none + + ! Parameters + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=27), parameter :: test_name = 'flushMultiplePointProbeTest' + + ! Local variables + character(len=1) :: sep + character(len=BUFSIZE) :: nEntrada + + type(point_probe_output_t) :: probe + type(domain_t) :: domain + type(cell_coordinate_t) :: coordinates + + real(kind=RKIND), allocatable :: expectedTime(:, :) + real(kind=RKIND), allocatable :: expectedFreq(:, :) + + integer :: n, i, unit + integer :: test_err = 0 + integer :: ios + + ! Setup + sep = get_path_separator() + nEntrada = test_folder//sep//test_name + + domain = domain_t( & + 0.0_RKIND_tiempo, 10.0_RKIND_tiempo, 0.1_RKIND_tiempo, & + 10.0_RKIND, 100.0_RKIND, 10, .false.) + + coordinates%x = 2 + coordinates%y = 2 + coordinates%z = 2 + + call init_point_probe_output(probe, coordinates, iEx, domain, nEntrada, 3, 0.1_RKIND_tiempo) + + n = 10 + allocate (expectedTime(2*n, 2)) + allocate (expectedFreq(n, 2)) + + ! Action - first flush + do i = 1, n + probe%timeStep(i) = real(i) + probe%valueForTime(i) = 10.0*i + probe%frequencySlice(i) = 0.1*i + probe%valueForFreq(i) = 0.2*i + + expectedTime(i, 1) = real(i) + expectedTime(i, 2) = 10.0*i + + expectedFreq(i, 1) = 0.1*i + expectedFreq(i, 2) = 0.2*i + end do + + probe%nTime = n + probe%nFreq = n + call flush_point_probe_output(probe) + + ! Action - second flush + do i = 1, n + probe%timeStep(i) = real(i + 10) + probe%valueForTime(i) = 10.0*(i + 10) + probe%valueForFreq(i) = -0.5*i + + expectedTime(i + n, 1) = real(i + 10) + expectedTime(i + n, 2) = 10.0*(i + 10) + + expectedFreq(i, 1) = 0.1*i + expectedFreq(i, 2) = -0.5*i + end do + + probe%nTime = n + call flush_point_probe_output(probe) + + ! Assertions + unit = 1 + open (unit=unit, file=probe%filePathTime, status='old', action='read') + test_err = test_err + assert_file_content(unit, expectedTime, 2*n, 2, 1e-06_RKIND) + close (unit) + unit = 2 + open (unit=unit, file=probe%filePathFreq, status='old', action='read') + test_err = test_err + assert_file_content(unit, expectedFreq, n, 2, 1e-06_RKIND) + close (unit) + + !Cleanup + call remove_folder(test_folder, ios) + + err = test_err +end function + +integer function test_init_movie_probe() bind(c) result(err) +! This test initializes a movie probe over a 3D region from (2,2,2) to (5,5,5). +! It checks that the probe is correctly allocated, that the number of measurement +! points and buffer sizes are correct, and that the output folder and PVD file +! for the movie are properly created. + use output_m + use outputTypes_m + use testOutputUtils_m + use FDETYPES_TOOLS + use sggMethods_m + use assertionTools_m + use directoryUtils_m + implicit none + + type(SGGFDTDINFO_t) :: dummysgg + type(sim_control_t) :: dummyControl + type(bounds_t) :: dummyBound + type(XYZlimit_t) :: dummySweep(6) + type(XYZlimit_t) :: dummySinpmlSweep(6) + type(XYZlimit_t) :: allocationRange(6) + type(solver_output_t), pointer :: outputs(:) + + type(media_matrices_t), target :: media + type(media_matrices_t), pointer :: mediaPtr + + type(MediaData_t), allocatable, target :: simulationMaterials(:) + type(MediaData_t), pointer :: simulationMaterialsPtr(:) + + type(taglist_t) :: tagNumbers + + type(limit_t) :: sinpml(6) + + type(Obses_t) :: movieObservable + type(cell_coordinate_t) :: lowerBoundMovieProbe + type(cell_coordinate_t) :: upperBoundMovieProbe + + real(kind=RKIND_tiempo), pointer :: timeArray(:) + real(kind=RKIND_tiempo) :: dt = 0.1_RKIND_tiempo + integer(kind=SINGLE) :: nTimeSteps = 100_SINGLE + + real(kind=RKIND), dimension(:), pointer :: x_steps, y_steps, z_steps + + integer(kind=SINGLE) :: expectedNumMeasurments + integer(kind=SINGLE) :: mpidir = 3 + logical :: ThereAreWires = .false. + logical :: outputRequested + integer(kind=SINGLE) :: iter + integer(kind=SINGLE) :: test_err = 0 + + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=9), parameter :: test_name = 'initMovie' + + character(len=BUFSIZE) :: nEntrada + character(len=1) :: sep + character(len=BUFSIZE) :: expectedProbePath + character(len=BUFSIZE) :: pdvFileName + integer :: ios + + sep = get_path_separator() + nEntrada = test_folder//sep//test_name + + err = 1 + + lowerBoundMovieProbe = cell_coordinate_t(2, 2, 2) + upperBoundMovieProbe = cell_coordinate_t(5, 5, 5) + + call sgg_init(dummysgg) + call init_time_array(timeArray, nTimeSteps, dt) + call sgg_set_tiempo(dummysgg, timeArray) + call sgg_set_dt(dummysgg, dt) + + call init_simulation_material_list(simulationMaterials) + simulationMaterialsPtr => simulationMaterials + call sgg_set_NumMedia(dummysgg, size(simulationMaterials)) + call sgg_set_Med(dummysgg, simulationMaterialsPtr) + dummySweep = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Sweep(dummysgg, dummySweep) + dummySinpmlSweep = create_xyz_limit_array(1, 1, 1, 5, 5, 5) + call sgg_set_SINPMLSweep(dummysgg, dummySinpmlSweep) + call sgg_set_NumPlaneWaves(dummysgg, 1) + allocationRange = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Alloc(dummysgg, allocationRange) + + allocate(x_steps(6),source=1.0_RKIND) + allocate(y_steps(6),source=1.0_RKIND) + allocate(z_steps(6),source=1.0_RKIND) + call sgg_set_LineX(dummysgg, x_steps) + call sgg_set_LineY(dummysgg, y_steps) + call sgg_set_LineZ(dummysgg, z_steps) + + movieObservable = create_movie_observation(2, 2, 2, 5, 5, 5, iCur) + call sgg_add_observation(dummysgg, movieObservable) + + call create_geometry_media(media, 0, 8, 0, 8, 0, 8) + + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 4, 3, simulationMaterials(0)%Id) + + expectedNumMeasurments = 4_SINGLE + mediaPtr => media + + do iter = 1, 6 + sinpml(iter) = create_limit_t(0, 8, 0, 8, 0, 8, 10, 10, 10) + end do + + dummyControl = create_control_flags(nEntradaRoot=nEntrada, mpidir=mpidir) + + call init_outputs(dummysgg, media, sinpml, tagNumbers, dummyBound, dummyControl, & + outputRequested, ThereAreWires) + + outputs => GetOutputs() + + test_err = test_err + assert_integer_equal(outputs(1)%outputID, MOVIE_PROBE_ID, 'Unexpected probe id') + test_err = test_err + assert_integer_equal(outputs(1)%movieProbe%nPoints, expectedNumMeasurments, 'Unexpected number of measurements') + test_err = test_err + assert_integer_equal(size(outputs(1)%movieProbe%xValueForTime), expectedNumMeasurments*BuffObse, 'Unexpected allocation size') + test_err = test_err + assert_integer_equal(size(outputs(1)%movieProbe%timeStep), BuffObse, 'Unexpected timestep buffer size') + + expectedProbePath = trim(nEntrada)//wordSeparation//'movieProbe_BC_2_2_2__5_5_5' + pdvFileName = trim(get_last_component(expectedProbePath))//pvdExtension + + test_err = test_err + assert_string_equal(outputs(1)%movieProbe%path, expectedProbePath, 'Unexpected path') + test_err = test_err + assert_true(folder_exists(expectedProbePath), 'Movie folder do not exist') + + !Cleanup + call remove_folder(test_folder, ios) + + err = test_err +end function + +integer function test_update_movie_probe() bind(c) result(err) +! This test updates a movie probe with field values at a single timestep. +! It verifies that the probe correctly stores the measured values in the x, y, +! and z components for all points, and that the timestep buffer is properly populated. + use output_m + use outputTypes_m + use testOutputUtils_m + use FDETYPES_TOOLS + use sggMethods_m + use assertionTools_m + use directoryUtils_m + implicit none + + type(SGGFDTDINFO_t) :: dummysgg + type(sim_control_t) :: dummyControl + type(bounds_t) :: dummyBound + type(solver_output_t), pointer :: outputs(:) + + type(media_matrices_t), target :: media + type(media_matrices_t), pointer :: mediaPtr + + type(MediaData_t), allocatable, target :: simulationMaterials(:) + type(MediaData_t), pointer :: simulationMaterialsPtr(:) + + type(limit_t), target :: sinpml_fullsize(6) + type(limit_t), pointer :: sinpml_fullsizePtr(:) + + type(taglist_t) :: tagNumbers + + type(XYZlimit_t) :: dummySweep(6) + type(XYZlimit_t) :: dummySinpmlSweep(6) + type(XYZlimit_t) :: allocationRange(6) + + type(Obses_t) :: movieObservable + + real(kind=RKIND_tiempo), pointer :: timeArray(:) + real(kind=RKIND_tiempo) :: dt = 0.1_RKIND_tiempo + integer(kind=SINGLE) :: nTimeSteps = 100_SINGLE + + real(kind=RKIND), dimension(:), pointer :: x_steps, y_steps, z_steps + + type(dummyFields_t), target :: dummyFields + type(fields_reference_t) :: fields + + integer(kind=SINGLE) :: expectedNumMeasurments + integer(kind=SINGLE) :: mpidir = 3 + integer(kind=SINGLE) :: iter + integer(kind=SINGLE) :: test_err = 0 + logical :: ThereAreWires = .false. + logical :: outputRequested + + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=11), parameter :: test_name = 'updateMovie' + + character(len=BUFSIZE) :: nEntrada + integer :: ios + + nEntrada = join_path(test_folder, test_name) + + err = 1 + + call sgg_init(dummysgg) + call init_time_array(timeArray, nTimeSteps, dt) + call sgg_set_tiempo(dummysgg, timeArray) + call sgg_set_dt(dummysgg, dt) + + call init_simulation_material_list(simulationMaterials) + simulationMaterialsPtr => simulationMaterials + call sgg_set_NumMedia(dummysgg, size(simulationMaterials)) + call sgg_set_Med(dummysgg, simulationMaterialsPtr) + + dummySweep = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Sweep(dummysgg, dummySweep) + dummySinpmlSweep = create_xyz_limit_array(1, 1, 1, 5, 5, 5) + call sgg_set_SINPMLSweep(dummysgg, dummySinpmlSweep) + call sgg_set_NumPlaneWaves(dummysgg, 1) + allocationRange = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Alloc(dummysgg, allocationRange) + + allocate(x_steps(6),source=1.0_RKIND) + allocate(y_steps(6),source=1.0_RKIND) + allocate(z_steps(6),source=1.0_RKIND) + call sgg_set_LineX(dummysgg, x_steps) + call sgg_set_LineY(dummysgg, y_steps) + call sgg_set_LineZ(dummysgg, z_steps) + + movieObservable = create_movie_observation(2, 2, 2, 5, 5, 5, iCur) + call sgg_add_observation(dummysgg, movieObservable) + + call create_geometry_media(media, 0, 8, 0, 8, 0, 8) + + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 4, 3, simulationMaterials(0)%Id) + + expectedNumMeasurments = 4_SINGLE + mediaPtr => media + + do iter = 1, 6 + sinpml_fullsize(iter) = create_limit_t(0, 8, 0, 8, 0, 8, 10, 10, 10) + end do + sinpml_fullsizePtr => sinpml_fullsize + + dummyControl = create_control_flags(nEntradaRoot=nEntrada, mpidir=mpidir) + + call init_outputs(dummysgg, media, sinpml_fullsize, tagNumbers, dummyBound, dummyControl, & + outputRequested, ThereAreWires) + + outputs => GetOutputs() + + call create_dummy_fields(dummyFields, 1, 5, 0.1_RKIND) + + fields%E%x => dummyFields%Ex + fields%E%y => dummyFields%Ey + fields%E%z => dummyFields%Ez + fields%E%deltax => dummyFields%dxe + fields%E%deltaY => dummyFields%dye + fields%E%deltaZ => dummyFields%dze + fields%H%x => dummyFields%Hx + fields%H%y => dummyFields%Hy + fields%H%z => dummyFields%Hz + fields%H%deltax => dummyFields%dxh + fields%H%deltaY => dummyFields%dyh + fields%H%deltaZ => dummyFields%dzh + + dummyFields%Hx(3, 3, 3) = 2.0_RKIND + dummyFields%Hy(3, 3, 3) = 5.0_RKIND + dummyFields%Hz(3, 3, 3) = 4.0_RKIND + + call update_outputs(dummyControl, dummysgg%tiempo, 1_SINGLE, fields) + + test_err = test_err + assert_real_equal(outputs(1)%movieProbe%yValueForTime(1, 1), & + -0.2_RKIND, 1e-5_RKIND, 'Value error') + + test_err = test_err + assert_real_equal(outputs(1)%movieProbe%yValueForTime(1, 2), & + 0.4_RKIND, 1e-5_RKIND, 'Value error') + + test_err = test_err + assert_real_equal(outputs(1)%movieProbe%yValueForTime(1, 3), & + 0.0_RKIND, 1e-5_RKIND, 'Value error') + + test_err = test_err + assert_real_equal(outputs(1)%movieProbe%yValueForTime(1, 4), & + 0.0_RKIND, 1e-5_RKIND, 'Value error') + + test_err = test_err + assert_integer_equal( & + size(outputs(1)%movieProbe%timeStep), BuffObse, 'Unexpected timestep buffer size') + + !Cleanup + call remove_folder(test_folder, ios) + + err = test_err +end function + +integer function test_flush_movie_probe() bind(c) result(err) +! This test validates flushing movie probes to disk. It ensures that +! VTU files for each timestep and the PVD file are created, confirming that +! the temporal sequence of the movie probe is correctly serialized and saved. + use output_m + use outputTypes_m + use testOutputUtils_m + use FDETYPES_TOOLS + use sggMethods_m + use assertionTools_m + use directoryUtils_m + implicit none + + type(SGGFDTDINFO_t) :: dummysgg + type(sim_control_t) :: dummyControl + type(bounds_t) :: dummyBound + type(solver_output_t), pointer :: outputs(:) + + type(media_matrices_t), target :: media + type(media_matrices_t), pointer :: mediaPtr + + type(MediaData_t), allocatable, target :: simulationMaterials(:) + type(MediaData_t), pointer :: simulationMaterialsPtr(:) + + type(limit_t), target :: sinpml_fullsize(6) + type(limit_t), pointer :: sinpml_fullsizePtr(:) + + type(taglist_t) :: tagNumbers + + type(XYZlimit_t) :: dummySweep(6) + type(XYZlimit_t) :: dummySinpmlSweep(6) + type(XYZlimit_t) :: allocationRange(6) + + type(Obses_t) :: movieCurrentObservable + type(Obses_t) :: movieElectricXObservable + type(Obses_t) :: movieMagneticYObservable + type(fields_reference_t) :: fields + + real(kind=RKIND_tiempo), pointer :: timeArray(:) + real(kind=RKIND_tiempo) :: dt = 0.1_RKIND_tiempo + integer(kind=SINGLE) :: nTimeSteps = 100_SINGLE + + real(kind=RKIND), dimension(:), pointer :: x_steps, y_steps, z_steps + + integer(kind=SINGLE) :: expectedNumMeasurments + integer(kind=SINGLE) :: mpidir = 3 + integer(kind=SINGLE) :: iter + integer(kind=SINGLE) :: test_err = 0 + logical :: ThereAreWires = .false. + logical :: outputRequested + + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=10), parameter :: test_name = 'flushMovie' + + character(len=BUFSIZE) :: nEntrada + character(len=BUFSIZE) :: expectedPath + integer :: outputIdx + integer :: ios + + nEntrada = join_path(test_folder, test_name) + + err = 1 + + call sgg_init(dummysgg) + call init_time_array(timeArray, nTimeSteps, dt) + call sgg_set_tiempo(dummysgg, timeArray) + call sgg_set_dt(dummysgg, dt) + + call init_simulation_material_list(simulationMaterials) + simulationMaterialsPtr => simulationMaterials + call sgg_set_NumMedia(dummysgg, size(simulationMaterials)) + call sgg_set_Med(dummysgg, simulationMaterialsPtr) + + dummySweep = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Sweep(dummysgg, dummySweep) + dummySinpmlSweep = create_xyz_limit_array(1, 1, 1, 5, 5, 5) + call sgg_set_SINPMLSweep(dummysgg, dummySinpmlSweep) + call sgg_set_NumPlaneWaves(dummysgg, 1) + allocationRange = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Alloc(dummysgg, allocationRange) + + allocate(x_steps(6),source=1.0_RKIND) + allocate(y_steps(6),source=1.0_RKIND) + allocate(z_steps(6),source=1.0_RKIND) + call sgg_set_LineX(dummysgg, x_steps) + call sgg_set_LineY(dummysgg, y_steps) + call sgg_set_LineZ(dummysgg, z_steps) + + movieCurrentObservable = create_movie_observation(2, 2, 2, 5, 5, 5, iCur) + call sgg_add_observation(dummysgg, movieCurrentObservable) + + movieElectricXObservable = create_movie_observation(2, 2, 2, 5, 5, 5, iExC) + call sgg_add_observation(dummysgg, movieElectricXObservable) + + movieMagneticYObservable = create_movie_observation(2, 2, 2, 5, 5, 5, iHyC) + call sgg_add_observation(dummysgg, movieMagneticYObservable) + + call create_geometry_media(media, 0, 8, 0, 8, 0, 8) + + call assign_material_id_to_media_matrix_coordinate(media, iEx, 3, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iHy, 3, 3, 3, simulationMaterials(0)%Id) + + call assign_material_id_to_media_matrix_coordinate(media, iEx, 3, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iHy, 3, 4, 3, simulationMaterials(0)%Id) + + call assign_material_id_to_media_matrix_coordinate(media, iEx, 4, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iHy, 4, 4, 3, simulationMaterials(0)%Id) + + call assign_material_id_to_media_matrix_coordinate(media, iEx, 4, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iHy, 4, 3, 3, simulationMaterials(0)%Id) + + expectedNumMeasurments = 4_SINGLE + mediaPtr => media + + do iter = 1, 6 + sinpml_fullsize(iter) = create_limit_t(0, 8, 0, 8, 0, 8, 10, 10, 10) + end do + sinpml_fullsizePtr => sinpml_fullsize + + dummyControl = create_control_flags(nEntradaRoot=nEntrada, mpidir=mpidir) + + call init_outputs(dummysgg, media, sinpml_fullsize, tagNumbers, dummyBound, dummyControl, & + outputRequested, ThereAreWires) + + outputs => GetOutputs() + + !--- Dummy first update --- + !movieCurrentObservable + outputs(1)%movieProbe%nTime = 1 + outputs(1)%movieProbe%timeStep(1) = 0.5_RKIND_tiempo + outputs(1)%movieProbe%xValueForTime(1, :) = [0.1_RKIND, 0.2_RKIND, 0.3_RKIND, 0.4_RKIND] + outputs(1)%movieProbe%yValueForTime(1, :) = [0.3_RKIND, 0.4_RKIND, 0.5_RKIND, 0.6_RKIND] + outputs(1)%movieProbe%zValueForTime(1, :) = [0.7_RKIND, 0.8_RKIND, 0.9_RKIND, 1.0_RKIND] + + !movieElectricXObservable + outputs(2)%movieProbe%nTime = 1 + outputs(2)%movieProbe%timeStep(1) = 0.5_RKIND_tiempo + outputs(2)%movieProbe%xValueForTime(1, :) = [0.1_RKIND, 0.2_RKIND, 0.3_RKIND, 0.4_RKIND] + + !movieMagneticYObservable + outputs(3)%movieProbe%nTime = 1 + outputs(3)%movieProbe%timeStep(1) = 0.5_RKIND_tiempo + outputs(3)%movieProbe%yValueForTime(1, :) = [0.1_RKIND, 0.2_RKIND, 0.3_RKIND, 0.4_RKIND] + + !--- Dummy second update --- + !movieCurrentObservable + outputs(1)%movieProbe%nTime = 2 + outputs(1)%movieProbe%timeStep(2) = 0.75_RKIND_tiempo + outputs(1)%movieProbe%xValueForTime(2, :) = [1.1_RKIND, 1.2_RKIND, 1.3_RKIND, 1.4_RKIND] + outputs(1)%movieProbe%yValueForTime(2, :) = [1.3_RKIND, 1.4_RKIND, 1.5_RKIND, 1.6_RKIND] + outputs(1)%movieProbe%zValueForTime(2, :) = [1.7_RKIND, 1.8_RKIND, 1.9_RKIND, 2.0_RKIND] + + !movieElectricXObservable + outputs(2)%movieProbe%nTime = 2 + outputs(2)%movieProbe%timeStep(2) = 0.75_RKIND_tiempo + outputs(2)%movieProbe%xValueForTime(2, :) = [1.1_RKIND, 1.2_RKIND, 1.3_RKIND, 1.4_RKIND] + + !movieMagneticYObservable + outputs(3)%movieProbe%nTime = 2 + outputs(3)%movieProbe%timeStep(2) = 0.75_RKIND_tiempo + outputs(3)%movieProbe%yValueForTime(2, :) = [1.1_RKIND, 1.2_RKIND, 1.3_RKIND, 1.4_RKIND] + + call flush_outputs(dummysgg%tiempo, 1_SINGLE, dummyControl, fields, dummyBound, .false.) + + call close_outputs() + + call remove_folder(test_folder, ios) + + err = test_err +end function + +integer function test_init_frequency_slice_probe() bind(c) result(err) +! This test initializes a frequency slice probe over a 3D region (2,2,2) to (5,5,5). +! It verifies that the probe is correctly set up, that the expected number of measurement +! points and frequencies are allocated, and that the output folder and PVD file exist. + use output_m + use outputTypes_m + use testOutputUtils_m + use FDETYPES_TOOLS + use sggMethods_m + use assertionTools_m + use directoryUtils_m + implicit none + + type(SGGFDTDINFO_t) :: dummysgg + type(sim_control_t) :: dummyControl + type(bounds_t) :: dummyBound + type(solver_output_t), pointer :: outputs(:) + + type(media_matrices_t), target :: media + type(media_matrices_t), pointer :: mediaPtr + + type(MediaData_t), allocatable, target :: simulationMaterials(:) + type(MediaData_t), pointer :: simulationMaterialsPtr(:) + + type(taglist_t) :: tagNumbers + + type(limit_t), target :: sinpml_fullsize(6) + type(limit_t), pointer :: sinpml_fullsizePtr(:) + + type(XYZlimit_t) :: dummySweep(6) + type(XYZlimit_t) :: dummySinpmlSweep(6) + type(XYZlimit_t) :: allocationRange(6) + + type(Obses_t) :: frequencySliceObservation + + real(kind=RKIND_tiempo), pointer :: timeArray(:) + real(kind=RKIND_tiempo) :: dt = 0.1_RKIND_tiempo + integer(kind=SINGLE) :: nTimeSteps = 100_SINGLE + + integer(kind=SINGLE) :: expectedNumMeasurments + integer(kind=SINGLE) :: expectedTotalFrequnecies + integer(kind=SINGLE) :: mpidir = 3 + integer(kind=SINGLE) :: iter + integer(kind=SINGLE) :: test_err = 0 + logical :: ThereAreWires = .false. + logical :: outputRequested + + + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=13), parameter :: test_name = 'initFrequency' + + character(len=BUFSIZE) :: nEntrada + character(len=BUFSIZE) :: expectedProbePath + character(len=BUFSIZE) :: pdvFileName + integer :: ios + + nEntrada = join_path(test_folder, test_name) + err = 1 + + call sgg_init(dummysgg) + + call init_time_array(timeArray, nTimeSteps, dt) + call sgg_set_tiempo(dummysgg, timeArray) + call sgg_set_dt(dummysgg, dt) + + call init_simulation_material_list(simulationMaterials) + simulationMaterialsPtr => simulationMaterials + call sgg_set_NumMedia(dummysgg, size(simulationMaterials)) + call sgg_set_Med(dummysgg, simulationMaterialsPtr) + + dummySweep = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Sweep(dummysgg, dummySweep) + dummySinpmlSweep = create_xyz_limit_array(1, 1, 1, 5, 5, 5) + call sgg_set_SINPMLSweep(dummysgg, dummySinpmlSweep) + call sgg_set_NumPlaneWaves(dummysgg, 1) + allocationRange = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Alloc(dummysgg, allocationRange) + + frequencySliceObservation = create_frequency_slice_observation(2, 2, 2, 5, 5, 5, iCur) + call sgg_add_observation(dummysgg, frequencySliceObservation) + + expectedTotalFrequnecies = 6_SINGLE + + call create_geometry_media(media, 0, 8, 0, 8, 0, 8) + + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 4, 3, simulationMaterials(0)%Id) + + expectedNumMeasurments = 4_SINGLE + mediaPtr => media + + do iter = 1, 6 + sinpml_fullsize(iter) = create_limit_t(0, 8, 0, 8, 0, 8, 10, 10, 10) + end do + sinpml_fullsizePtr => sinpml_fullsize + + dummyControl = create_control_flags(nEntradaRoot=nEntrada, mpidir=mpidir) + + call init_outputs(dummysgg, media, sinpml_fullsize, tagNumbers, dummyBound, dummyControl, & + outputRequested, ThereAreWires) + + outputs => GetOutputs() + + test_err = test_err + assert_integer_equal(outputs(1)%outputID, FREQUENCY_SLICE_PROBE_ID, 'Unexpected probe id') + + test_err = test_err + assert_integer_equal(outputs(1)%frequencySliceProbe%nFreq, 6, 'Unexpected number of frequencies') + + test_err = test_err + assert_integer_equal(outputs(1)%frequencySliceProbe%nPoints, expectedNumMeasurments, 'Unexpected number of measurements') + + test_err = test_err + assert_integer_equal( & + size(outputs(1)%frequencySliceProbe%xValueForFreq), & + expectedNumMeasurments*expectedTotalFrequnecies, 'Unexpected allocation size') + + test_err = test_err + assert_integer_equal( & + size(outputs(1)%frequencySliceProbe%frequencySlice), & + expectedTotalFrequnecies, 'Unexpected frequency count') + + expectedProbePath = trim(nEntrada)//wordSeparation//'frequencySliceProbe_BC_2_2_2__5_5_5' + pdvFileName = trim(get_last_component(expectedProbePath))//pvdExtension + + test_err = test_err + assert_string_equal(outputs(1)%frequencySliceProbe%path, expectedProbePath, 'Unexpected path') + test_err = test_err + assert_true(folder_exists(expectedProbePath), 'Frequency Slice folder do not exist') + + call remove_folder(test_folder, ios) + + err = test_err +end function + +integer function test_update_frequency_slice_probe() bind(c) result(err) +! This test updates a frequency slice probe with field gradients. +! It checks that no current is detected along the X-axis for H-field gradients +! and verifies the correct relation between Y and Z values (Y = -Z), ensuring +! correct handling of field distributions across the frequency slice. + use output_m + use outputTypes_m + use testOutputUtils_m + use FDETYPES_TOOLS + use sggMethods_m + use assertionTools_m + use directoryUtils_m + implicit none + + type(SGGFDTDINFO_t) :: dummysgg + type(sim_control_t) :: dummyControl + type(bounds_t) :: dummyBound + type(solver_output_t), pointer :: outputs(:) + + type(media_matrices_t), target :: media + type(media_matrices_t), pointer :: mediaPtr + + type(MediaData_t), allocatable, target :: simulationMaterials(:) + type(MediaData_t), pointer :: simulationMaterialsPtr(:) + + type(limit_t), target :: sinpml_fullsize(6) + type(limit_t), pointer :: sinpml_fullsizePtr(:) + + type(taglist_t) :: tagNumbers + + type(XYZlimit_t) :: dummySweep(6) + type(XYZlimit_t) :: dummySinpmlSweep(6) + type(XYZlimit_t) :: allocationRange(6) + + type(Obses_t) :: frequencySliceObservation + + real(kind=RKIND_tiempo), pointer :: timeArray(:) + real(kind=RKIND_tiempo) :: dt = 0.1_RKIND_tiempo + integer(kind=SINGLE) :: nTimeSteps = 100_SINGLE + + type(dummyFields_t), target :: dummyFields + type(fields_reference_t) :: fields + + integer(kind=SINGLE) :: expectedNumMeasurments + integer(kind=SINGLE) :: expectedNumberFrequencies + integer(kind=SINGLE) :: mpidir = 3 + integer(kind=SINGLE) :: iter + integer(kind=SINGLE) :: test_err = 0 + logical :: ThereAreWires = .false. + logical :: outputRequested + + + character(len=14), parameter :: test_folder = 'testing_folder' + character(len=13), parameter :: test_name = 'initFrequency' + + character(len=BUFSIZE) :: nEntrada + integer :: ios + + nEntrada = join_path(test_folder, test_name) + + err = 1 + + call sgg_init(dummysgg) + call init_time_array(timeArray, nTimeSteps, dt) + call sgg_set_tiempo(dummysgg, timeArray) + call sgg_set_dt(dummysgg, dt) + + call init_simulation_material_list(simulationMaterials) + simulationMaterialsPtr => simulationMaterials + call sgg_set_NumMedia(dummysgg, size(simulationMaterials)) + call sgg_set_Med(dummysgg, simulationMaterialsPtr) + + dummySweep = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Sweep(dummysgg, dummySweep) + dummySinpmlSweep = create_xyz_limit_array(1, 1, 1, 5, 5, 5) + call sgg_set_SINPMLSweep(dummysgg, dummySinpmlSweep) + call sgg_set_NumPlaneWaves(dummysgg, 1) + allocationRange = create_xyz_limit_array(0, 0, 0, 6, 6, 6) + call sgg_set_Alloc(dummysgg, allocationRange) + + frequencySliceObservation = create_frequency_slice_observation(2, 2, 2, 5, 5, 5, iCur) + call sgg_add_observation(dummysgg, frequencySliceObservation) + + call create_geometry_media(media, 0, 8, 0, 8, 0, 8) + + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 3, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 4, 4, 3, simulationMaterials(0)%Id) + call assign_material_id_to_media_matrix_coordinate(media, iEy, 3, 4, 3, simulationMaterials(0)%Id) + expectedNumberFrequencies = 6_SINGLE + expectedNumMeasurments = 4_SINGLE + mediaPtr => media + + do iter = 1, 6 + sinpml_fullsize(iter) = create_limit_t(0, 8, 0, 8, 0, 8, 10, 10, 10) + end do + sinpml_fullsizePtr => sinpml_fullsize + + dummyControl = create_control_flags(nEntradaRoot=nEntrada, mpidir=mpidir) + + call init_outputs(dummysgg, media, sinpml_fullsize, tagNumbers, dummyBound, dummyControl, & + outputRequested, ThereAreWires) + + outputs => GetOutputs() + + call create_dummy_fields(dummyFields, 1, 5, 0.1_RKIND) + + fields%E%x => dummyFields%Ex + fields%E%y => dummyFields%Ey + fields%E%z => dummyFields%Ez + fields%E%deltax => dummyFields%dxe + fields%E%deltaY => dummyFields%dye + fields%E%deltaZ => dummyFields%dze + fields%H%x => dummyFields%Hx + fields%H%y => dummyFields%Hy + fields%H%z => dummyFields%Hz + fields%H%deltax => dummyFields%dxh + fields%H%deltaY => dummyFields%dyh + fields%H%deltaZ => dummyFields%dzh + + call fillGradient(dummyFields, 1, 0.0_RKIND, 10.0_RKIND) + + call update_outputs(dummyControl, dummysgg%tiempo, 2_SINGLE, fields) + + test_err = test_err + assert_integer_equal(outputs(1)%outputID, & + FREQUENCY_SLICE_PROBE_ID, 'Unexpected probe id') + + test_err = test_err + assert_integer_equal(outputs(1)%frequencySliceProbe%nPoints, & + expectedNumMeasurments, 'Unexpected number of measurements') + + test_err = test_err + assert_integer_equal( & + size(outputs(1)%frequencySliceProbe%frequencySlice), & + expectedNumberFrequencies, 'Unexpected allocation size') + + !This test generates X Gradient for H. It is expected to detect none Current accros X axis and Opposite values for Y and Z + + test_err = test_err + assert_array_value(outputs(1)%frequencySliceProbe%xValueForFreq, (0.0_CKIND , 0.0_CKIND), errormessage='Detected Current on X Axis for Hx gradient') + test_err = test_err + assert_arrays_equal(outputs(1)%frequencySliceProbe%yValueForFreq, & + -1.0_RKIND*outputs(1)%frequencySliceProbe%zValueForFreq, errormessage='Unequal values for Y and -Z') + + + call remove_folder(test_folder, ios) + + err = test_err +end function diff --git a/test/output/test_output_utils.F90 b/test/output/test_output_utils.F90 new file mode 100644 index 00000000..2b192ca9 --- /dev/null +++ b/test/output/test_output_utils.F90 @@ -0,0 +1,236 @@ +module testOutputUtils_m + use FDETYPES_m + use FDETYPES_TOOLS + use outputTypes_m + implicit none + private + + !=========================== + ! Public interface summary + !=========================== + public :: dummyFields_t + public :: create_point_probe_observation + public :: create_volumic_probe_observation + public :: create_movie_observation + public :: create_frequency_slice_observation + public :: create_dummy_fields + public :: fillGradient + public :: setup_dummy_problem_info + public :: clean_dummy_problem_info + !=========================== + + ! Storage for dummy targets + type(media_matrices_t), target :: dummyGeometry + type(limit_t), allocatable, target :: dummyProblemDim(:) + type(MediaData_t), allocatable, target :: dummyMaterialList(:) + type(bounds_t), target :: dummyBounds + + !=========================== + ! Private interface summary + !=========================== + + !=========================== + + type :: dummyFields_t + real(kind=RKIND), allocatable, dimension(:, :, :) :: Ex, Ey, Ez, Hx, Hy, Hz + real(kind=RKIND), allocatable, dimension(:) :: dxe, dye, dze, dxh, dyh, dzh + contains + procedure, public :: createDummyFields => create_dummy_fields + end type dummyFields_t +contains + function create_point_probe_observation(x, y, z) result(obs) + integer, intent(in) :: x, y, z + type(Obses_t) :: obs + + type(observable_t), dimension(:), allocatable :: P + type(observation_domain_t) :: domain + + allocate (P(1)) + P(1) = create_observable(x, y, z, x, y, z, iEx) + call initialize_observation_time_domain(domain, 0.0_RKIND, 10.0_RKIND, 0.1_RKIND) + + call set_observation(obs, P, 'pointProbe', domain, 'DummyFileNormalize') + end function + + function create_bulk_probe_observation(xi, yi, zi) result(obs) + integer, intent(in) :: xi, yi, zi + type(Obses_t) :: obs + + type(observable_t), dimension(:), allocatable :: P + type(observation_domain_t) :: domain + + allocate (P(1)) + P(1) = create_observable(xi, yi, zi, xi+1, yi+1, zi+1, iCurX) + + call initialize_observation_time_domain(domain, 0.0_RKIND, 10.0_RKIND, 0.1_RKIND) + call initialize_observation_frequency_domain(domain, 0.0_RKIND, 1000.0_RKIND, 50.0_RKIND) + + call set_observation(obs, P, 'bulkProbe', domain, 'DummyFileNormalize') + end function create_bulk_probe_observation + + function create_volumic_probe_observation(xi, yi, zi, xe, ye, ze) result(obs) + integer, intent(in) :: xi, yi, zi, xe, ye, ze + type(Obses_t) :: obs + + type(observable_t), dimension(:), allocatable :: P + type(observation_domain_t) :: domain + + allocate (P(1)) + P(1) = create_observable(xi, yi, zi, xe, ye, ze, iCurX) + + call initialize_observation_time_domain(domain, 0.0_RKIND, 10.0_RKIND, 0.1_RKIND) + call initialize_observation_frequency_domain(domain, 0.0_RKIND, 1000.0_RKIND, 50.0_RKIND) + + call set_observation(obs, P, 'volumicProbe', domain, 'DummyFileNormalize') + end function create_volumic_probe_observation + + function create_movie_observation(xi, yi, zi, xe, ye, ze, request) result(observation) + integer, intent(in) :: xi, yi, zi, xe, ye, ze, request + type(Obses_t) :: observation + + type(observable_t), dimension(:), allocatable :: P + type(observation_domain_t) :: domain + + allocate (P(1)) + P(1) = create_observable(xi, yi, zi, xe, ye, ze, request) + call initialize_observation_time_domain(domain, 0.0_RKIND, 10.0_RKIND, 0.1_RKIND) + + call set_observation(observation, P, 'movieProbe', domain, 'DummyFileNormalize') + end function create_movie_observation + + function create_frequency_slice_observation(xi, yi, zi, xe, ye, ze, request) result(observation) + integer, intent(in) :: xi, yi, zi, xe, ye, ze, request + type(Obses_t) :: observation + + type(observable_t), dimension(:), allocatable :: P + type(observation_domain_t) :: domain + + allocate (P(1)) + P(1) = create_observable(xi, yi, zi, xe, ye, ze, request) + call initialize_observation_frequency_domain(domain, 0.0_RKIND, 100.0_RKIND, 20.0_RKIND) + + call set_observation(observation, P, 'frequencySliceProbe', domain, 'DummyFileNormalize') + end function create_frequency_slice_observation + + subroutine create_dummy_fields(this, lower, upper, delta) + class(dummyFields_t), intent(inout) :: this + integer, intent(in) :: lower, upper + real(kind=rkind), intent(in) :: delta + allocate ( & + this%Ex(lower:upper, lower:upper, lower:upper), & + this%Ey(lower:upper, lower:upper, lower:upper), & + this%Ez(lower:upper, lower:upper, lower:upper), & + this%Hx(lower:upper, lower:upper, lower:upper), & + this%Hy(lower:upper, lower:upper, lower:upper), & + this%Hz(lower:upper, lower:upper, lower:upper) & + ) + + this%Ex = 0.0_RKIND + this%Ey = 0.0_RKIND + this%Ez = 0.0_RKIND + this%Hx = 0.0_RKIND + this%Hy = 0.0_RKIND + this%Hz = 0.0_RKIND + + allocate ( & + this%dxh(lower:upper), & + this%dyh(lower:upper), & + this%dzh(lower:upper), & + this%dxe(lower:upper), & + this%dye(lower:upper), & + this%dze(lower:upper) & + ) + this%dxh = delta + this%dyh = delta + this%dzh = delta + this%dxe = delta + this%dye = delta + this%dze = delta + end subroutine create_dummy_fields + + subroutine fillGradient(dummyFields, direction, minVal, maxVal) + !-------------------------------------------- + ! Fills dummyFields%Hx, Hy, Hz with a linear gradient + ! along the specified direction (1=x, 2=y, 3=z) + !-------------------------------------------- + implicit none + type(dummyFields_t), intent(inout) :: dummyFields + integer, intent(in) :: direction ! 1=x, 2=y, 3=z + real(RKIND), intent(in) :: minVal, maxVal + + integer :: i, j, k + integer :: nx, ny, nz + real(RKIND) :: factor + + ! Get array sizes + nx = size(dummyFields%Hx, 1) + ny = size(dummyFields%Hx, 2) + nz = size(dummyFields%Hx, 3) + + select case (direction) + case (1) ! x-direction + do i = 1, nx + factor = real(i - 1, RKIND)/real(nx - 1, RKIND) + dummyFields%Hx(i, :, :) = minVal + factor*(maxVal - minVal) + dummyFields%Hy(i, :, :) = minVal + factor*(maxVal - minVal) + dummyFields%Hz(i, :, :) = minVal + factor*(maxVal - minVal) + end do + case (2) ! y-direction + do j = 1, ny + factor = real(j - 1, RKIND)/real(ny - 1, RKIND) + dummyFields%Hx(:, j, :) = minVal + factor*(maxVal - minVal) + dummyFields%Hy(:, j, :) = minVal + factor*(maxVal - minVal) + dummyFields%Hz(:, j, :) = minVal + factor*(maxVal - minVal) + end do + case (3) ! z-direction + do k = 1, nz + factor = real(k - 1, RKIND)/real(nz - 1, RKIND) + dummyFields%Hx(:, :, k) = minVal + factor*(maxVal - minVal) + dummyFields%Hy(:, :, k) = minVal + factor*(maxVal - minVal) + dummyFields%Hz(:, :, k) = minVal + factor*(maxVal - minVal) + end do + case default + print *, "Error: direction must be 1, 2, or 3." + end select + + end subroutine fillGradient + + !-------------------------------------------------------------------------------- + ! Setup/Teardown + !-------------------------------------------------------------------------------- + subroutine setup_dummy_problem_info(problemInfo) + type(problem_info_t), intent(out) :: problemInfo + + integer :: i + + ! Create a 11x11x11 grid (0..10) + if (allocated(dummyProblemDim)) deallocate(dummyProblemDim) + allocate(dummyProblemDim(6)) + do i = 1,6 + dummyProblemDim(i) = create_limit_t(0, 10, 0, 10, 0, 10, 1, 1, 1) + end do + problemInfo%problemDimension => dummyProblemDim + + call create_geometry_media(dummyGeometry, 0, 10, 0, 10, 0, 10) + problemInfo%geometryToMaterialData => dummyGeometry + + call init_simulation_material_list(dummyMaterialList) + problemInfo%materialList => dummyMaterialList + + problemInfo%simulationBounds => dummyBounds + + end subroutine setup_dummy_problem_info + + subroutine clean_dummy_problem_info(problemInfo) + type(problem_info_t), intent(inout) :: problemInfo + + if (allocated(dummyProblemDim)) deallocate(dummyProblemDim) + if (allocated(dummyMaterialList)) deallocate(dummyMaterialList) + + nullify(problemInfo%problemDimension) + nullify(problemInfo%geometryToMaterialData) + nullify(problemInfo%materialList) + nullify(problemInfo%simulationBounds) + end subroutine clean_dummy_problem_info + +end module testOutputUtils_m diff --git a/test/output/test_volumic_utils.F90 b/test/output/test_volumic_utils.F90 new file mode 100644 index 00000000..08475374 --- /dev/null +++ b/test/output/test_volumic_utils.F90 @@ -0,0 +1,138 @@ +!-------------------------------------------------------------------------------- +! Test: count_required_coords +!-------------------------------------------------------------------------------- +integer function test_count_required_coords() bind(c) result(err) + use FDETYPES_m + use outputTypes_m + use volumicProbeUtils_m + use assertionTools_m + use testOutputUtils_m + implicit none + + type(cell_coordinate_t) :: lowerBound, upperBound + type(problem_info_t) :: problemInfo + integer(kind=SINGLE) :: count + integer :: test_err = 0 + integer, allocatable :: dummy_coords(:,:) + + ! Setup test case: 3x3x3 domain (1..3) + lowerBound = cell_coordinate_t(1, 1, 1) + upperBound = cell_coordinate_t(3, 3, 3) + + call setup_dummy_problem_info(problemInfo) + + ! Test Case 1: Field Request (iExC) + call find_and_store_important_coords(lowerBound, upperBound, iExC, problemInfo, count, dummy_coords) + + ! Expected: 3*3*3 = 27 points + test_err = test_err + assert_integer_equal(count, 27_SINGLE, "Failed count for iExC") + + if (allocated(dummy_coords)) deallocate(dummy_coords) + call clean_dummy_problem_info(problemInfo) + err = test_err +end function test_count_required_coords + +!-------------------------------------------------------------------------------- +! Test: store_required_coords +!-------------------------------------------------------------------------------- +integer function test_store_required_coords() bind(c) result(err) + use FDETYPES_m + use outputTypes_m + use outputUtils_m + use volumicProbeUtils_m + use assertionTools_m + use testOutputUtils_m + implicit none + + type(cell_coordinate_t) :: lowerBound, upperBound + type(problem_info_t) :: problemInfo + integer(kind=SINGLE) :: nPoints + integer(kind=SINGLE), allocatable :: stored_coords(:,:) + integer :: test_err = 0 + + lowerBound = new_cell_coordinate(1, 1, 1) + upperBound = new_cell_coordinate(2, 2, 2) + call setup_dummy_problem_info(problemInfo) + + call find_and_store_important_coords(lowerBound, upperBound, iHyC, problemInfo, nPoints, stored_coords) + + test_err = test_err + assert_integer_equal(nPoints, 8_SINGLE, "Failed nPoints for iHyC") + + if (allocated(stored_coords)) then + test_err = test_err + assert_integer_equal(int(size(stored_coords, 2), SINGLE), 8_SINGLE, "Allocated coords size error") + ! Verify first coord is (1,1,1) + test_err = test_err + assert_integer_equal(stored_coords(1,1), 1_SINGLE, "First x coord mismatch") + test_err = test_err + assert_integer_equal(stored_coords(2,1), 1_SINGLE, "First y coord mismatch") + test_err = test_err + assert_integer_equal(stored_coords(3,1), 1_SINGLE, "First z coord mismatch") + deallocate(stored_coords) + else + print *, "Coords not allocated." + test_err = test_err + 1 + end if + + call clean_dummy_problem_info(problemInfo) + err = test_err +end function test_store_required_coords + +!-------------------------------------------------------------------------------- +! Test: isValidPointForCurrent +!-------------------------------------------------------------------------------- +integer function test_is_valid_point_current() bind(c) result(err) + use FDETYPES_m + use outputTypes_m + use volumicProbeUtils_m + use testOutputUtils_m + implicit none + + type(problem_info_t) :: problemInfo + integer :: test_err = 0 + logical :: valid + + call setup_dummy_problem_info(problemInfo) + + ! By default, our dummy setup has NO PEC and NO Wires. + ! So isValidPointForCurrent should be FALSE (as it requires PEC or Wire) + valid = isValidPointForCurrent(iCur, 1, 1, 1, problemInfo) + + if (valid) then + print *, "Expected False for empty space current probe (no PEC/Wire)" + test_err = test_err + 1 + end if + + call clean_dummy_problem_info(problemInfo) + err = test_err +end function test_is_valid_point_current + +!-------------------------------------------------------------------------------- +! Test: isValidPointForField +!-------------------------------------------------------------------------------- +integer function test_is_valid_point_field() bind(c) result(err) + use FDETYPES_m + use outputTypes_m + use volumicProbeUtils_m + use testOutputUtils_m + implicit none + + type(problem_info_t) :: problemInfo + integer :: test_err = 0 + logical :: valid + + call setup_dummy_problem_info(problemInfo) + + ! Point inside boundary + valid = isValidPointForField(iEx, 5, 5, 5, problemInfo) + if (.not. valid) then + print *, "Expected True for field probe in bounds" + test_err = test_err + 1 + end if + + ! Point outside boundary (-1) + valid = isValidPointForField(iEx, -1, 5, 5, problemInfo) + if (valid) then + print *, "Expected False for field probe out of bounds" + test_err = test_err + 1 + end if + + call clean_dummy_problem_info(problemInfo) + err = test_err +end function test_is_valid_point_field diff --git a/test/output/test_vtkAPI.F90 b/test/output/test_vtkAPI.F90 new file mode 100644 index 00000000..7564dd90 --- /dev/null +++ b/test/output/test_vtkAPI.F90 @@ -0,0 +1,396 @@ +!============================== +! vtkAPI_m extended testsuite (class-based) +!============================== + +!============================== +! Test 1: Structured grid basic allocation +!============================== +integer function test_vtkAPI_points_allocation() bind(C) result(error_cnt) + use vtkAPI_m + implicit none + type(vtk_structured_grid), target :: grid + class(vtk_grid), pointer :: grid_base + real, allocatable :: points(:, :) + integer :: nx, ny, nz + + error_cnt = 0 + nx = 2; ny = 2; nz = 2 + grid%nx = nx; grid%ny = ny; grid%nz = nz + grid_base => grid + + allocate(points(3, nx*ny*nz)) + points = 0.0 + call grid_base%add_points(points) + + if (.not. allocated(grid%points)) error_cnt = error_cnt + 1 + if (size(grid%points,1) /= 3) error_cnt = error_cnt + 1 + if (size(grid%points,2) /= nx*ny*nz) error_cnt = error_cnt + 1 +end function + +!============================== +! Test 2: Point scalar assignment +!============================== +integer function test_vtkAPI_point_scalar() bind(C) result(error_cnt) + use vtkAPI_m + implicit none + type(vtk_structured_grid), target :: grid + class(vtk_grid), pointer :: grid_base + real, allocatable :: scalars(:) + integer :: nx=2, ny=2, nz=2, i + + error_cnt = 0 + grid%nx=nx; grid%ny=ny; grid%nz=nz + grid_base => grid + + allocate(scalars(nx*ny*nz)) + do i=1,nx*ny*nz + scalars(i) = real(i) + end do + call grid_base%add_scalar('Density', scalars) + + if (.not. allocated(grid%scalars)) error_cnt = error_cnt + 1 + if (grid%scalars(1)%data(1) /= 1.0) error_cnt = error_cnt + 1 +end function + +!============================== +! Test 3: Point vector assignment +!============================== +integer function test_vtkAPI_point_vector() bind(C) result(error_cnt) + use vtkAPI_m + implicit none + type(vtk_structured_grid), target :: grid + class(vtk_grid), pointer :: grid_base + real, allocatable :: vec(:) + integer :: nx=2, ny=2, nz=2, i + + error_cnt = 0 + grid%nx=nx; grid%ny=ny; grid%nz=nz + grid_base => grid + + allocate(vec(3*nx*ny*nz)) + do i=1,nx*ny*nz + vec(3*i-2) = real(i) + vec(3*i-1) = real(i*10) + vec(3*i) = real(i*100) + end do + call grid_base%add_vector('Momentum', vec) + + if (.not. allocated(grid%vectors)) error_cnt = error_cnt + 1 + if (grid%vectors(1)%data(2) /= 10.0) error_cnt = error_cnt + 1 +end function + +!============================== +! Test 4: Cell scalar assignment +!============================== +integer function test_vtkAPI_cell_scalar() bind(C) result(error_cnt) + use vtkAPI_m + implicit none + type(vtk_structured_grid), target :: grid + class(vtk_grid), pointer :: grid_base + real, allocatable :: cell_data(:) + integer :: nx=2, ny=2, nz=2, n + + error_cnt = 0 + grid%nx=nx; grid%ny=ny; grid%nz=nz + grid_base => grid + + allocate(cell_data((nx-1)*(ny-1)*(nz-1))) + do n=1,(nx-1)*(ny-1)*(nz-1) + cell_data(n) = real(n) + end do + call grid_base%add_cell_scalar('Pressure', cell_data) + + if (.not. allocated(grid%cell_scalars)) error_cnt = error_cnt + 1 + if (grid%cell_scalars(1)%data(1) /= 1.0) error_cnt = error_cnt + 1 +end function + +!============================== +! Test 5: Cell vector assignment +!============================== +integer function test_vtkAPI_cell_vector() bind(C) result(error_cnt) + use vtkAPI_m + implicit none + type(vtk_structured_grid), target :: grid + class(vtk_grid), pointer :: grid_base + real, allocatable :: vec(:) + integer :: nx=2, ny=2, nz=2, n + + error_cnt = 0 + grid%nx=nx; grid%ny=ny; grid%nz=nz + grid_base => grid + + allocate(vec(3*(nx-1)*(ny-1)*(nz-1))) + do n=1,(nx-1)*(ny-1)*(nz-1) + vec(3*n-2) = real(n) + vec(3*n-1) = real(n*10) + vec(3*n) = real(n*100) + end do + call grid_base%add_cell_vector('Flux', vec) + + if (.not. allocated(grid%cell_vectors)) error_cnt = error_cnt + 1 + if (grid%cell_vectors(1)%data(3) /= 100.0) error_cnt = error_cnt + 1 +end function + +!============================== +! Test 6: VTS file creation +!============================== +integer function test_vtkAPI_vts_file_creation() bind(C) result(error_cnt) + use vtkAPI_m + use directoryUtils_m + implicit none + type(vtk_structured_grid), target :: grid + class(vtk_grid), pointer :: grid_base + real, allocatable :: points(:, :), scalars(:) + integer :: nx=2, ny=2, nz=2 + integer :: ierr + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + + error_cnt = 0 + grid%nx=nx; grid%ny=ny; grid%nz=nz + grid_base => grid + + allocate(points(3, nx*ny*nz)); points = 0.0 + call grid_base%add_points(points) + + allocate(scalars(nx*ny*nz)); scalars = 1.0 + call grid_base%add_scalar('Density', scalars) + + file = join_path(folder, 'test.vts') + call create_folder(folder, ierr) + call grid_base%write_file(file) + + open(unit=10, file=file, status='old', action='read', iostat=ierr) + if (ierr /= 0) then + error_cnt = error_cnt + 1 + else + close(10) + end if + call remove_folder(folder, ierr) +end function + +!============================== +! Test 7: VTU file creation with cells and point data +!============================== +integer function test_vtkAPI_vtu_file_creation() bind(C) result(error_cnt) + use vtkAPI_m + use directoryUtils_m + implicit none + type(vtk_unstructured_grid), target :: ugrid + class(vtk_grid), pointer :: grid_base + real, allocatable :: points(:, :), scalars(:) + integer, allocatable :: conn(:), offsets(:), types(:) + integer :: ierr + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + + error_cnt = 0 + grid_base => ugrid + + ! Points + ugrid%num_points = 4 + allocate(points(3,4)) + points(:,1)=(/0.0,0.0,0.0/) + points(:,2)=(/1.0,0.0,0.0/) + points(:,3)=(/0.0,1.0,0.0/) + points(:,4)=(/0.0,0.0,1.0/) + call grid_base%add_points(points) + + ! Cells + allocate(conn(4)); conn = (/0,1,2,3/) + allocate(offsets(1)); offsets = (/4/) + allocate(types(1)); types = (/10/) + call ugrid%add_cell_connectivity(conn, offsets, types) + + ! Scalars + allocate(scalars(4)); scalars = (/1.0,2.0,3.0,4.0/) + call grid_base%add_scalar('Velocity', scalars) + + file = join_path(folder, 'test.vtu') + call create_folder(folder, ierr) + call grid_base%write_file(file) + + open(unit=10, file=file, status='old', action='read', iostat=ierr) + if (ierr /= 0) then + error_cnt = error_cnt + 1 + else + close(10) + end if + call remove_folder(folder, ierr) +end function + +!============================== +! Test 8: VTU file with cell data +!============================== +integer function test_vtkAPI_vtu_cell_data() bind(C) result(error_cnt) + use vtkAPI_m + implicit none + type(vtk_unstructured_grid), target :: ugrid + class(vtk_grid), pointer :: grid_base + real, allocatable :: cell_scalars(:), cell_vectors(:) + integer, allocatable :: conn(:), offsets(:), types(:) + + error_cnt = 0 + grid_base => ugrid + + ! Cells + ugrid%num_cells = 1 + allocate(conn(4)); conn = (/0,1,2,3/) + allocate(offsets(1)); offsets = (/4/) + allocate(types(1)); types = (/10/) + call ugrid%add_cell_connectivity(conn, offsets, types) + + ! Cell scalar + allocate(cell_scalars(1)); cell_scalars(1) = 5.0 + call grid_base%add_cell_scalar('Pressure', cell_scalars) + if (ugrid%cell_scalars(1)%data(1) /= 5.0) error_cnt = error_cnt + 1 + + ! Cell vector + allocate(cell_vectors(3*1)); cell_vectors = (/1.0,2.0,3.0/) + call grid_base%add_cell_vector('Flux', cell_vectors) + if (ugrid%cell_vectors(1)%data(3) /= 3.0) error_cnt = error_cnt + 1 +end function + +!============================== +! Test 9: Verificación de VTS contenido +!============================== +integer function test_vtkAPI_vts_content() bind(C) result(error_cnt) + use vtkAPI_m + use directoryUtils_m + implicit none + type(vtk_structured_grid), target :: grid + class(vtk_grid), pointer :: grid_base + real, allocatable :: points(:, :), scalars(:), vectors(:) + integer :: nx=2, ny=2, nz=2 + integer :: ierr, i + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + character(len=256) :: line + logical :: found_scalar, found_vector + + error_cnt = 0 + grid%nx=nx; grid%ny=ny; grid%nz=nz + grid_base => grid + + ! Points + allocate(points(3, nx*ny*nz)); points=0.0 + call grid_base%add_points(points) + + ! Scalar + allocate(scalars(nx*ny*nz)) + do i=1,nx*ny*nz + scalars(i) = real(i) + end do + call grid_base%add_scalar('Density', scalars) + + ! Vector + allocate(vectors(3*nx*ny*nz)) + do i=1,nx*ny*nz + vectors(3*i-2) = real(i) + vectors(3*i-1) = real(i*10) + vectors(3*i) = real(i*100) + end do + call grid_base%add_vector('Momentum', vectors) + + ! Create VTS file + file = join_path(folder,'test_content.vts') + call create_folder(folder,ierr) + call grid_base%write_file(file) + + ! Read file and verify PointData + found_scalar = .false.; found_vector = .false. + open(unit=10, file=file, status='old', action='read', iostat=ierr) + if (ierr /= 0) then + error_cnt = error_cnt + 1 + return + end if + + do + read(10,'(A)', iostat=ierr) line + if (ierr /= 0) exit + if (index(line,'Scalars="Density"') /= 0) found_scalar = .true. + if (index(line,'Vectors="Momentum"') /= 0) found_vector = .true. + if (found_scalar .and. found_vector) exit + end do + close(10) + + if (.not. found_scalar) error_cnt = error_cnt + 1 + if (.not. found_vector) error_cnt = error_cnt + 1 + + call remove_folder(folder, ierr) +end function + +!============================== +! Test 10 +!============================== +integer function test_vtkAPI_vtu_content() bind(C) result(error_cnt) + use vtkAPI_m + use directoryUtils_m + implicit none + type(vtk_unstructured_grid), target :: ugrid + class(vtk_grid), pointer :: grid_base + real, allocatable :: points(:, :), scalars(:), cell_scalars(:) + integer, allocatable :: conn(:), offsets(:), types(:) + integer :: ierr + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + character(len=256) :: line + logical :: found_point_scalar, found_cell_scalar, found_cells, found_points + + error_cnt = 0 + grid_base => ugrid + + ! Points + ugrid%num_points = 4 + allocate(points(3,4)) + points(:,1)=(/0.0,0.0,0.0/); points(:,2)=(/1.0,0.0,0.0/) + points(:,3)=(/0.0,1.0,0.0/); points(:,4)=(/0.0,0.0,1.0/) + call grid_base%add_points(points) + + ! Cells + ugrid%num_cells = 1 + allocate(conn(4)); conn=(/0,1,2,3/) + allocate(offsets(1)); offsets=(/4/) + allocate(types(1)); types=(/10/) + call ugrid%add_cell_connectivity(conn, offsets, types) + + ! Point scalarll + allocate(scalars(4)); scalars=(/1.0,2.0,3.0,4.0/) + call grid_base%add_scalar('Velocity', scalars) + + ! Cell scalar + allocate(cell_scalars(1)); cell_scalars=(/5.0/) + call grid_base%add_cell_scalar('Pressure', cell_scalars) + + ! Create VTU file + file = join_path(folder,'test_content.vtu') + call create_folder(folder,ierr) + call grid_base%write_file(file) + + ! Read file + found_point_scalar = .false.; found_cell_scalar = .false. + found_cells = .false.; found_points = .false. + open(unit=10, file=file, status='old', action='read', iostat=ierr) + if (ierr /= 0) then + error_cnt = error_cnt + 1 + return + end if + + do + read(10,'(A)', iostat=ierr) line + if (ierr /= 0) exit + if (index(line,'PointData') /= 0) found_point_scalar = .true. + if (index(line,'CellData') /= 0) found_cell_scalar = .true. + if (index(line,'') /= 0) found_cells = .true. + if (index(line,'') /= 0) found_points = .true. + if (found_point_scalar .and. found_cell_scalar .and. found_cells .and. found_points) exit + end do + close(10) + + if (.not. found_point_scalar) error_cnt = error_cnt + 1 + if (.not. found_cell_scalar) error_cnt = error_cnt + 1 + if (.not. found_cells) error_cnt = error_cnt + 1 + if (.not. found_points) error_cnt = error_cnt + 1 + + call remove_folder(folder, ierr) +end function \ No newline at end of file diff --git a/test/output/test_xdmfAPI.F90 b/test/output/test_xdmfAPI.F90 new file mode 100644 index 00000000..12debd2f --- /dev/null +++ b/test/output/test_xdmfAPI.F90 @@ -0,0 +1,286 @@ +integer function test_create_h5_file() bind(c) result(err) + + use xdmfAPI_m + use assertionTools_m + use directoryUtils_m + implicit none + + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + integer(HID_T) :: file_id + integer :: error + logical :: exists + integer :: test_err = 0 + + call create_folder(folder, error) + file = join_path(folder, "test_api.h5") + + call H5open_f(error) + + call create_h5_file(trim(adjustl(file)), file_id) + + test_err = test_err + assert_true(file_id > 0, "create_h5_file returned invalid id") + + call H5Fclose_f(file_id, error) + + inquire(file=trim(adjustl(file)), exist=exists) + test_err = test_err + assert_true(exists, "HDF5 file was not created") + + call H5close_f(error) + + err = test_err + call remove_folder(folder, error) +end function + +integer function test_write_1d_dataset() bind(c) result(err) + + use xdmfAPI_m + use assertionTools_m + use directoryUtils_m + implicit none + + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + integer(HID_T) :: file_id + real(8), allocatable :: data(:) + integer :: error + integer :: test_err = 0 + integer :: n, i + + call create_folder(folder, error) + file = join_path(folder, "test_api.h5") + + call H5open_f(error) + + n = 10 + allocate(data(n)) + data = [(real(i,8), i=1,n)] + + call create_h5_file(trim(adjustl(file)), file_id) + + call h5_write_dataset(file_id, "/data1d", data) + + test_err = test_err + assert_integer_equal(size(data), 10, "1D dataset size mismatch") + + call H5Fclose_f(file_id, error) + + deallocate(data) + + call H5close_f(error) + + err = test_err + call remove_folder(folder, error) +end function + +integer function test_write_2d_dataset() bind(c) result(err) + + use xdmfAPI_m + use assertionTools_m + use directoryUtils_m + implicit none + + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + integer(HID_T) :: file_id + real(8), allocatable :: data(:,:) + integer :: error + integer :: test_err = 0 + + call create_folder(folder, error) + file = join_path(folder, "test_api.h5") + + call H5open_f(error) + + allocate(data(4,5)) + data = 1.0d0 + + call create_h5_file(trim(adjustl(file)), file_id) + + call h5_write_dataset(file_id, "/data2d", data) + + test_err = test_err + assert_integer_equal(size(data,1),4,"2D dim1 mismatch") + test_err = test_err + assert_integer_equal(size(data,2),5,"2D dim2 mismatch") + + call H5Fclose_f(file_id, error) + + deallocate(data) + + call H5close_f(error) + + err = test_err + call remove_folder(folder, error) +end function + +integer function test_write_3d_dataset() bind(c) result(err) + + use xdmfAPI_m + use assertionTools_m + use directoryUtils_m + implicit none + + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + integer(HID_T) :: file_id + real(8), allocatable :: data(:,:,:) + integer :: error + integer :: test_err = 0 + + call create_folder(folder, error) + file = join_path(folder, "test_api.h5") + + call H5open_f(error) + + allocate(data(3,3,3)) + data = 2.0d0 + + call create_h5_file(trim(adjustl(file)), file_id) + + call h5_write_dataset(file_id, "/data3d", data) + + test_err = test_err + assert_integer_equal(size(data,1),3,"3D dim1 mismatch") + test_err = test_err + assert_integer_equal(size(data,2),3,"3D dim2 mismatch") + test_err = test_err + assert_integer_equal(size(data,3),3,"3D dim3 mismatch") + + call H5Fclose_f(file_id, error) + + deallocate(data) + + call H5close_f(error) + + err = test_err + + call remove_folder(folder, error) +end function + +integer function test_xdmf_file_creation() bind(c) result(err) + + use xdmfAPI_m + use assertionTools_m + use directoryUtils_m + implicit none + + character(len=14), parameter :: folder='testing_folder' + character(len=1024) :: file + integer :: test_err = 0 + integer :: error, unit + logical :: exists + integer :: dims(4) + + call create_folder(folder, error) + file = join_path(folder, "test_api.xdmf") + + dims = [4,4,4,1] + + + open(newunit=unit, file=trim(file), position='append') + call xdmf_write_header_file(unit, 'movieProbe') + + call xdmf_create_grid_step_info(unit,"step0",0.0,"data.h5",dims(1)*dims(2)*dims(3)) + + call xdmf_write_attribute(unit,"Efield") + + call xdmf_write_scalar_attribute(unit, dims, "data.h5","/Efield") + + call xdmf_close_data_item(unit) + call xdmf_close_attribute(unit) + call xdmf_close_grid(unit) + + call xdmf_write_footer_file(unit) + close(unit) + + + inquire(file=trim(file), exist=exists) + + test_err = test_err + assert_true(exists, "XDMF file not created") + + err = test_err + call remove_folder(folder, error) + +end function + +integer function test_xdmf_file_with_h5data() bind(c) result(err) + ! use HDF5 + use xdmfAPI_m + use assertionTools_m + use directoryUtils_m + implicit none + + character(len=20), parameter :: folder = "testing_folder" + character(len=1024) :: xdmf_file, h5_file + integer :: test_err = 0 + integer :: error, t, unit + logical :: exists + integer :: dims(4) + integer(HID_T) :: file_id + real(dp), allocatable :: Efield(:,:), coords(:,:) + real(dp) :: time + character(len=20) :: ts + integer :: i,j, npoints + + call create_folder(folder, error) + + xdmf_file = join_path(folder, "test_api.xdmf") + h5_file = join_path(folder, "data.h5") + + call H5open_f(error) + + ! Create HDF5 file + call create_h5_file(trim(h5_file), file_id) + + dims = [3,3,1,1] ! 2D grid stored as 3D with depth 1 + npoints = dims(1)*dims(2) + + ! Allocate and write coords data: shape (npoints,3) + allocate(coords(npoints,3)) + do j = 1, dims(2) + do i = 1, dims(1) + coords((j-1)*dims(1)+i,1) = real(i-1, dp) ! X + coords((j-1)*dims(1)+i,2) = real(j-1, dp) ! Y + coords((j-1)*dims(1)+i,3) = 0.0_dp ! Z + end do + end do + call h5_write_dataset(file_id,"coords",coords) + deallocate(coords) + + ! Create XDMF file + open(newunit=unit,file=trim(xdmf_file),position='append') + call xdmf_write_header_file(unit, 'movieProbe') + + do t = 1, 5 + time = real(t-1,dp)*0.1_dp + + allocate(Efield(dims(1),dims(2))) + do j=1,dims(2) + do i=1,dims(1) + Efield(i,j) = i + j + t - 1 + end do + end do + + write(ts,'("Efield_",I0)') t + + ! Write timestep data + call h5_write_dataset(file_id,trim(ts),Efield) + + ! XDMF grid + call xdmf_create_grid_step_info(unit,trim(ts),real(time),trim(h5_file),npoints) + call xdmf_write_attribute(unit,"Efield") + call xdmf_write_scalar_attribute(unit,dims, trim(h5_file),"/"//trim(ts)) + + call xdmf_close_data_item(unit) + call xdmf_close_attribute(unit) + call xdmf_close_grid(unit) + + deallocate(Efield) + end do + call xdmf_write_footer_file(unit) + close(unit) + call H5Fclose_f(file_id,error) + + inquire(file=trim(xdmf_file),exist=exists) + test_err = test_err + assert_true(exists,"XDMF file not created") + + call remove_folder(folder,error) + call H5close_f(error) + + err = test_err +end function \ No newline at end of file diff --git a/test/output/vtkAPI_tests.cpp b/test/output/vtkAPI_tests.cpp new file mode 100644 index 00000000..01684e2b --- /dev/null +++ b/test/output/vtkAPI_tests.cpp @@ -0,0 +1 @@ +#include "vtkAPI_tests.h" \ No newline at end of file diff --git a/test/output/vtkAPI_tests.h b/test/output/vtkAPI_tests.h new file mode 100644 index 00000000..814c0944 --- /dev/null +++ b/test/output/vtkAPI_tests.h @@ -0,0 +1,27 @@ +#ifdef CompileWithNewOutputModule +#include + +extern "C" int test_vtkapi_points_allocation(); +extern "C" int test_vtkapi_point_scalar(); +extern "C" int test_vtkapi_point_vector(); +extern "C" int test_vtkapi_cell_scalar(); +extern "C" int test_vtkapi_cell_vector(); +extern "C" int test_vtkapi_vts_file_creation(); +extern "C" int test_vtkapi_vtu_file_creation(); +extern "C" int test_vtkapi_vtu_cell_data(); +extern "C" int test_vtkapi_vts_content(); +extern "C" int test_vtkapi_vtu_content(); + +TEST(vtkapi, test_points_allocation) {EXPECT_EQ(0, test_vtkapi_points_allocation());} +TEST(vtkapi, test_point_scalar) {EXPECT_EQ(0, test_vtkapi_point_scalar());} +TEST(vtkapi, test_point_vector) {EXPECT_EQ(0, test_vtkapi_point_vector());} +TEST(vtkapi, test_cell_scalar) {EXPECT_EQ(0, test_vtkapi_cell_scalar());} +TEST(vtkapi, test_cell_vector) {EXPECT_EQ(0, test_vtkapi_cell_vector());} +TEST(vtkapi, test_vts_file_creation) {EXPECT_EQ(0, test_vtkapi_vts_file_creation());} +TEST(vtkapi, test_vtu_file_creation) {EXPECT_EQ(0, test_vtkapi_vtu_file_creation());} +TEST(vtkapi, test_vtu_cell_data) {EXPECT_EQ(0, test_vtkapi_vtu_cell_data());} +TEST(vtkapi, test_vts_content) {EXPECT_EQ(0, test_vtkapi_vts_content());} +TEST(vtkapi, test_vtu_content) {EXPECT_EQ(0, test_vtkapi_vtu_content());} + + +#endif diff --git a/test/output/xdmfAPI_tests.cpp b/test/output/xdmfAPI_tests.cpp new file mode 100644 index 00000000..e0167c57 --- /dev/null +++ b/test/output/xdmfAPI_tests.cpp @@ -0,0 +1 @@ +#include "xdmfAPI_tests.h" \ No newline at end of file diff --git a/test/output/xdmfAPI_tests.h b/test/output/xdmfAPI_tests.h new file mode 100644 index 00000000..6747793f --- /dev/null +++ b/test/output/xdmfAPI_tests.h @@ -0,0 +1,18 @@ +#ifdef CompileWithNewOutputModule +#include + +extern "C" int test_create_h5_file(); +extern "C" int test_write_1d_dataset(); +extern "C" int test_write_2d_dataset(); +extern "C" int test_write_3d_dataset(); +extern "C" int test_xdmf_file_creation(); +extern "C" int test_xdmf_file_with_h5data(); + +TEST(xdmfapi, test_create_h5) { EXPECT_EQ(0, test_create_h5_file()); } +TEST(xdmfapi, test_write_1d) { EXPECT_EQ(0, test_write_1d_dataset()); } +TEST(xdmfapi, test_write_2d) { EXPECT_EQ(0, test_write_2d_dataset()); } +TEST(xdmfapi, test_write_3d) { EXPECT_EQ(0, test_write_3d_dataset()); } +TEST(xdmfapi, test_xdmf_file) { EXPECT_EQ(0, test_xdmf_file_creation()); } +TEST(xdmfapi, test_xdmf_file_with_h5) { EXPECT_EQ(0, test_xdmf_file_with_h5data()); } + +#endif \ No newline at end of file diff --git a/test/utils/CMakeLists.txt b/test/utils/CMakeLists.txt index ad087a19..96e569ad 100644 --- a/test/utils/CMakeLists.txt +++ b/test/utils/CMakeLists.txt @@ -3,8 +3,12 @@ message(STATUS "Creating build system for test/observation") add_library( test_utils_fortran "fdetypes_tools.F90" + "assertion_tools.F90" + "array_assertion_tools.F90" + "sgg_setters.F90" ) target_link_libraries(test_utils_fortran semba-types + fdtd-utils ) diff --git a/test/utils/array_assertion_tools.F90 b/test/utils/array_assertion_tools.F90 new file mode 100644 index 00000000..770d458d --- /dev/null +++ b/test/utils/array_assertion_tools.F90 @@ -0,0 +1,337 @@ +module arrayAssertionTools_m + use FDETYPES_m + implicit none + real(RKIND), parameter :: tol = 1.0e-12_RKIND + private + !----------------------------- + ! Public assertion procedures + !----------------------------- + public :: assert_arrays_equal + public :: assert_array_value + + !--------------------------------------- + ! GENERIC INTERFACES + !--------------------------------------- + interface assert_arrays_equal + module procedure & + assert_arrays_equal_int1, assert_arrays_equal_int2, assert_arrays_equal_int3, & + assert_arrays_equal_real1, assert_arrays_equal_real2, assert_arrays_equal_real3, & + assert_arrays_equal_complex1, assert_arrays_equal_complex2, assert_arrays_equal_complex3 + end interface + + interface assert_array_value + module procedure & + assert_array_value_int1, assert_array_value_int2, assert_array_value_int3, & + assert_array_value_real1, assert_array_value_real2, assert_array_value_real3, & + assert_array_value_complex1, assert_array_value_complex2, assert_array_value_complex3 + end interface + +contains + + !--------------------------------------- + ! 1D Integer arrays + !--------------------------------------- + integer function assert_arrays_equal_int1(A, B, errorMessage) + integer, intent(in) :: A(:), B(:) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_int1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(A == B)) then + assert_arrays_equal_int1 = 0 + else + assert_arrays_equal_int1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_int1(A, val, errorMessage) + integer, intent(in) :: A(:) + integer, intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(A == val)) then + assert_array_value_int1 = 0 + else + assert_array_value_int1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + !--------------------------------------- + ! 2D Integer arrays + !--------------------------------------- + integer function assert_arrays_equal_int2(A, B, errorMessage) + integer, intent(in) :: A(:, :), B(:, :) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_int2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(A == B)) then + assert_arrays_equal_int2 = 0 + else + assert_arrays_equal_int2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_int2(A, val, errorMessage) + integer, intent(in) :: A(:, :) + integer, intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(A == val)) then + assert_array_value_int2 = 0 + else + assert_array_value_int2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + !--------------------------------------- + ! 3D Integer arrays + !--------------------------------------- + integer function assert_arrays_equal_int3(A, B, errorMessage) + integer, intent(in) :: A(:, :, :), B(:, :, :) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_int3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(A == B)) then + assert_arrays_equal_int3 = 0 + else + assert_arrays_equal_int3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_int3(A, val, errorMessage) + integer, intent(in) :: A(:, :, :) + integer, intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(A == val)) then + assert_array_value_int3 = 0 + else + assert_array_value_int3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + !--------------------------------------- + ! REAL arrays (1D, 2D, 3D) + !--------------------------------------- + integer function assert_arrays_equal_real1(A, B, errorMessage) + real(RKIND), intent(in) :: A(:), B(:) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_real1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(abs(A - B) < tol)) then + assert_arrays_equal_real1 = 0 + else + assert_arrays_equal_real1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_real1(A, val, errorMessage) + real(RKIND), intent(in) :: A(:) + real(RKIND), intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(abs(A - val) < tol)) then + assert_array_value_real1 = 0 + else + assert_array_value_real1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + !--------------------------------------- + ! REAL 2D + !--------------------------------------- + integer function assert_arrays_equal_real2(A, B, errorMessage) + real(RKIND), intent(in) :: A(:, :), B(:, :) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_real2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(abs(A - B) < tol)) then + assert_arrays_equal_real2 = 0 + else + assert_arrays_equal_real2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_real2(A, val, errorMessage) + real(RKIND), intent(in) :: A(:, :) + real(RKIND), intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(abs(A - val) < tol)) then + assert_array_value_real2 = 0 + else + assert_array_value_real2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + !--------------------------------------- + ! REAL 3D + !--------------------------------------- + integer function assert_arrays_equal_real3(A, B, errorMessage) + real(RKIND), intent(in) :: A(:, :, :), B(:, :, :) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_real3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(abs(A - B) < tol)) then + assert_arrays_equal_real3 = 0 + else + assert_arrays_equal_real3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_real3(A, val, errorMessage) + real(RKIND), intent(in) :: A(:, :, :) + real(RKIND), intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(abs(A - val) < tol)) then + assert_array_value_real3 = 0 + else + assert_array_value_real3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + !--------------------------------------- + ! COMPLEX 1D arrays + !--------------------------------------- + integer function assert_arrays_equal_complex1(A, B, errorMessage) + complex(CKIND), intent(in) :: A(:), B(:) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_complex1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(abs(A - B) < tol)) then + assert_arrays_equal_complex1 = 0 + else + assert_arrays_equal_complex1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_complex1(A, val, errorMessage) + complex(CKIND), intent(in) :: A(:) + complex(CKIND), intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(abs(A - val) < tol)) then + assert_array_value_complex1 = 0 + else + assert_array_value_complex1 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + +!--------------------------------------- +! COMPLEX 2D arrays +!--------------------------------------- + integer function assert_arrays_equal_complex2(A, B, errorMessage) + complex(CKIND), intent(in) :: A(:, :), B(:, :) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_complex2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(abs(A - B) < tol)) then + assert_arrays_equal_complex2 = 0 + else + assert_arrays_equal_complex2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_complex2(A, val, errorMessage) + complex(CKIND), intent(in) :: A(:, :) + complex(CKIND), intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(abs(A - val) < tol)) then + assert_array_value_complex2 = 0 + else + assert_array_value_complex2 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + +!--------------------------------------- +! COMPLEX 3D arrays +!--------------------------------------- + integer function assert_arrays_equal_complex3(A, B, errorMessage) + complex(CKIND), intent(in) :: A(:, :, :), B(:, :, :) + character(*), intent(in), optional :: errorMessage + + if (any(shape(A) /= shape(B))) then + assert_arrays_equal_complex3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + return + end if + + if (all(abs(A - B) < tol)) then + assert_arrays_equal_complex3 = 0 + else + assert_arrays_equal_complex3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + integer function assert_array_value_complex3(A, val, errorMessage) + complex(CKIND), intent(in) :: A(:, :, :) + complex(CKIND), intent(in) :: val + character(*), intent(in), optional :: errorMessage + + if (all(abs(A - val) < tol)) then + assert_array_value_complex3 = 0 + else + assert_array_value_complex3 = 1 + if (present(errorMessage)) print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + +end module arrayAssertionTools_m diff --git a/test/utils/assertion_tools.F90 b/test/utils/assertion_tools.F90 new file mode 100644 index 00000000..3a865eaf --- /dev/null +++ b/test/utils/assertion_tools.F90 @@ -0,0 +1,180 @@ +module assertionTools_m + use FDETYPES_m + use arrayAssertionTools_m + use iso_fortran_env, only: real32, real64 + implicit none + + private :: assert_real_equal_impl +#ifndef CompileWithReal8 + private :: assert_real_time_equal_impl +#endif + ! Generic interface for real assertions + interface assert_real_equal + module procedure assert_real_equal_impl +#ifndef CompileWithReal8 + module procedure assert_real_time_equal_impl +#endif + end interface + +contains + + !--------------------------------------- + ! Logical assertion + !--------------------------------------- + function assert_true(boolean, errorMessage) result(err) + logical, intent(in) :: boolean + character(*), intent(in) :: errorMessage + integer :: err + if (boolean) then + err = 0 + else + err = 1 + print *, 'ASSERTION FAILED: ', trim(errorMessage) + end if + end function + + !--------------------------------------- + ! Integer equality + !--------------------------------------- + function assert_integer_equal(val, expected, errorMessage) result(err) + integer, intent(in) :: val, expected + character(*), intent(in) :: errorMessage + integer :: err + if (val == expected) then + err = 0 + else + err = 1 + print *, 'ASSERTION FAILED: ', trim(errorMessage) + print *, " Value: ", val, ". Expected: ", expected + end if + end function + + !--------------------------------------- + ! Real equality implementations + !--------------------------------------- + function assert_real_equal_impl(val, expected, tolerance, errorMessage) result(err) + real(kind=RKIND), intent(in) :: val, expected, tolerance + character(*), intent(in) :: errorMessage + integer :: err + if (abs(val - expected) <= tolerance) then + err = 0 + else + err = 1 + print *, 'ASSERTION FAILED (RKIND): ', trim(errorMessage) + print *, ' Value: ', val, '. Expected: ', expected, '. Tolerance: ', tolerance + end if + end function + + function assert_real_time_equal_impl(val, expected, tolerance, errorMessage) result(err) + real(kind=RKIND_tiempo), intent(in) :: val, expected, tolerance + character(*), intent(in) :: errorMessage + integer :: err + if (abs(val - expected) <= tolerance) then + err = 0 + else + err = 1 + print *, 'ASSERTION FAILED (time): ', trim(errorMessage) + print *, ' Value: ', val, '. Expected: ', expected, '. Tolerance: ', tolerance + end if + end function + + !--------------------------------------- + ! Complex equality + !--------------------------------------- + function assert_complex_equal(val, expected, tolerance, errorMessage) result(err) + complex(kind=CKIND), intent(in) :: val, expected + real(kind=RKIND), intent(in) :: tolerance + character(len=*), intent(in) :: errorMessage + integer :: err + if (abs(val - expected) <= tolerance) then + err = 0 + else + err = 1 + print *, 'ASSERTION FAILED: ', trim(errorMessage) + print *, ' Value: ', val + print *, ' Expected: ', expected + print *, ' Delta: ', abs(val - expected) + print *, ' Tolerance:', tolerance + end if + end function + + !--------------------------------------- + ! String equality + !--------------------------------------- + function assert_string_equal(val, expected, errorMessage) result(err) + character(*), intent(in) :: val, expected + character(*), intent(in) :: errorMessage + integer :: err + if (trim(val) == trim(expected)) then + err = 0 + else + err = 1 + print *, 'ASSERTION FAILED: ', trim(errorMessage) + print *, ' Value: "', trim(val), '". Expected: "', trim(expected), '"' + end if + end function + + !--------------------------------------- + ! Check if file was written + !--------------------------------------- + integer function assert_written_output_file(filename) result(code) + character(len=*), intent(in) :: filename + logical :: ex + integer :: filesize + code = 0 + inquire (file=filename, exist=ex, size=filesize) + if (.not. ex) then + print *, "ERROR: Output file not created:", trim(filename) + code = 1 + else if (filesize <= 0) then + print *, "ERROR: Output file is empty:", trim(filename) + code = 2 + end if + end function + + !--------------------------------------- + ! Check file content + !--------------------------------------- + integer function assert_file_content(unit, expectedValues, nRows, nCols, tolerance, headers) result(flag) + integer(kind=SINGLE), intent(in) :: unit + real(kind=RKIND), intent(in) :: expectedValues(:, :) + integer(kind=SINGLE), intent(in) :: nRows, nCols + real(kind=RKIND), intent(in) :: tolerance + character(len=*), intent(in), optional :: headers(:) + integer(kind=SINGLE) :: i, j, ios + real(kind=RKIND), dimension(nCols) :: val + character(len=BUFSIZE) :: line + flag = 0 + + if (present(headers)) then + read (unit, '(F12.6,1X,F12.6)', iostat=ios) line + if (ios /= 0) return + end if + + do i = 1, nRows + read (unit, *, iostat=ios) val + if (ios /= 0) then + flag = flag + 1 + return + end if + do j = 1, nCols + if (abs(val(j) - expectedValues(i, j)) > tolerance) then + flag = flag + 1 + end if + end do + end do + end function + + !--------------------------------------- + ! Check file exists + !--------------------------------------- + integer function assert_file_exists(fileName) result(err) + character(len=*), intent(in) :: filename + integer :: unit, ios + err = 0 + open (newunit=unit, file=filename, status='old', iostat=ios) + close (unit) + if (ios /= 0) err = 1 + end function + +end module assertionTools_m diff --git a/test/utils/fdetypes_tools.F90 b/test/utils/fdetypes_tools.F90 index aec321a9..489350fb 100644 --- a/test/utils/fdetypes_tools.F90 +++ b/test/utils/fdetypes_tools.F90 @@ -1,63 +1,808 @@ module FDETYPES_TOOLS - use FDETYPES_m - contains - function create_limit_t(XI,XE,YI,YE,ZI,ZE,NX,NY,NZ) result(r) - type(limit_t) :: r - integer(kind=4), intent(in) :: XI,XE,YI,YE,ZI,ZE,NX,NY,NZ - r%XI = XI - r%XE = XE - r%YI = YI - r%YE = YE - r%ZI = ZI - r%ZE = ZE - r%NX = NX - r%NY = NY - r%NZ = NZ - end function create_limit_t - function create_tag_list(sggAlloc) result(r) - type(XYZlimit_t), dimension(6), intent(in) :: sggAlloc - type(taglist_t) :: r - - - allocate (r%edge%x(sggAlloc(iEx)%XI:sggAlloc(iEx)%XE, sggAlloc(iEx)%YI:sggAlloc(iEx)%YE, sggAlloc(iEx)%ZI:sggAlloc(iEx)%ZE)) - allocate (r%edge%y(sggAlloc(iEy)%XI:sggAlloc(iEy)%XE, sggAlloc(iEy)%YI:sggAlloc(iEy)%YE, sggAlloc(iEy)%ZI:sggAlloc(iEy)%ZE)) - allocate (r%edge%z(sggAlloc(iEz)%XI:sggAlloc(iEz)%XE, sggAlloc(iEz)%YI:sggAlloc(iEz)%YE, sggAlloc(iEz)%ZI:sggAlloc(iEz)%ZE)) - allocate (r%face%x(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHx)%YI:sggAlloc(iHx)%YE, sggAlloc(iHx)%ZI:sggAlloc(iHx)%ZE)) - allocate (r%face%y(sggAlloc(iHy)%XI:sggAlloc(iHy)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHy)%ZI:sggAlloc(iHy)%ZE)) - allocate (r%face%z(sggAlloc(iHz)%XI:sggAlloc(iHz)%XE, sggAlloc(iHz)%YI:sggAlloc(iHz)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) - - - r%edge%x(:,:,:) = 0 - r%edge%y(:,:,:) = 0 - r%edge%z(:,:,:) = 0 - r%face%x(:,:,:) = 0 - r%face%y(:,:,:) = 0 - r%face%z(:,:,:) = 0 - end function create_tag_list - - function create_media(sggAlloc) result(r) - type(XYZlimit_t), dimension(6), intent(in) :: sggAlloc - type(media_matrices_t) :: r - - allocate (r%sggMtag(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) - allocate (r%sggMiNo(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) - - allocate (r%sggMiEx(sggAlloc(iEx)%XI:sggAlloc(iEx)%XE, sggAlloc(iEx)%YI:sggAlloc(iEx)%YE, sggAlloc(iEx)%ZI:sggAlloc(iEx)%ZE)) - allocate (r%sggMiEy(sggAlloc(iEy)%XI:sggAlloc(iEy)%XE, sggAlloc(iEy)%YI:sggAlloc(iEy)%YE, sggAlloc(iEy)%ZI:sggAlloc(iEy)%ZE)) - allocate (r%sggMiEz(sggAlloc(iEz)%XI:sggAlloc(iEz)%XE, sggAlloc(iEz)%YI:sggAlloc(iEz)%YE, sggAlloc(iEz)%ZI:sggAlloc(iEz)%ZE)) - - allocate (r%sggMiHx(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHx)%YI:sggAlloc(iHx)%YE, sggAlloc(iHx)%ZI:sggAlloc(iHx)%ZE)) - allocate (r%sggMiHy(sggAlloc(iHy)%XI:sggAlloc(iHy)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHy)%ZI:sggAlloc(iHy)%ZE)) - allocate (r%sggMiHz(sggAlloc(iHz)%XI:sggAlloc(iHz)%XE, sggAlloc(iHz)%YI:sggAlloc(iHz)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) - - r%sggMtag (:, :, :) = 0 - r%sggMiNo (:, :, :) = 1 - r%sggMiEx (:, :, :) = 1 - r%sggMiEy (:, :, :) = 1 - r%sggMiEz (:, :, :) = 1 - r%sggMiHx (:, :, :) = 1 - r%sggMiHy (:, :, :) = 1 - r%sggMiHz (:, :, :) = 1 - end function create_media - -end module FDETYPES_TOOLS \ No newline at end of file + use FDETYPES_m + use utils_m + use NFDETypes_m + implicit none + private + + !=========================== + ! Public interface summary + !=========================== + public :: observation_domain_t + public :: initialize_observation_domain_logical_flags + public :: initialize_observation_time_domain + public :: initialize_observation_frequency_domain + public :: initialize_observation_phi_domain + public :: initialize_observation_theta_domain + public :: create_observable + public :: set_observation + public :: init_time_array + public :: create_limit_t + public :: create_xyzlimit_t + public :: create_xyz_limit_array + public :: create_tag_list + public :: create_geometry_media + public :: create_geometry_media_from_sggAlloc + public :: create_thinWire_simulation_material + public :: init_simulation_material_list + public :: create_facesNF2FF + public :: create_control_flags + public :: add_simulation_material + public :: assign_material_id_to_media_matrix_coordinate + !=========================== + + !=========================== + ! Private interface summary + !=========================== + + !=========================== + + real(kind=rkind) :: UTILEPS0 = 8.8541878176203898505365630317107502606083701665994498081024171524053950954599821142852891607182008932e-12 + real(kind=rkind) :: UTILMU0 = 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6 + type :: observation_domain_t + real(kind=RKIND) :: InitialTime = 0.0_RKIND + real(kind=RKIND) :: FinalTime = 0.0_RKIND + real(kind=RKIND) :: TimeStep = 0.0_RKIND + + real(kind=RKIND) :: InitialFreq = 0.0_RKIND + real(kind=RKIND) :: FinalFreq = 0.0_RKIND + real(kind=RKIND) :: FreqStep = 0.0_RKIND + + real(kind=RKIND) :: thetaStart = 0.0_RKIND + real(kind=RKIND) :: thetaStop = 0.0_RKIND + real(kind=RKIND) :: thetaStep = 0.0_RKIND + + real(kind=RKIND) :: phiStart = 0.0_RKIND + real(kind=RKIND) :: phiStop = 0.0_RKIND + real(kind=RKIND) :: phiStep = 0.0_RKIND + + logical :: FreqDomain = .FALSE. + logical :: TimeDomain = .FALSE. + logical :: Saveall = .FALSE. + logical :: TransFer = .FALSE. + logical :: Volumic = .FALSE. + end type observation_domain_t + +contains + + function create_xyzlimit_t(XI, XE, YI, YE, ZI, ZE) result(r) + type(limit_t) :: r + integer(kind=4), intent(in) :: XI, XE, YI, YE, ZI, ZE + r%XI = XI + r%XE = XE + r%YI = YI + r%YE = YE + r%ZI = ZI + r%ZE = ZE + end function create_xyzlimit_t + + function create_limit_t(XI, XE, YI, YE, ZI, ZE, NX, NY, NZ) result(r) + type(limit_t) :: r + integer(kind=4), intent(in) :: XI, XE, YI, YE, ZI, ZE, NX, NY, NZ + r%XI = XI + r%XE = XE + r%YI = YI + r%YE = YE + r%ZI = ZI + r%ZE = ZE + r%NX = NX + r%NY = NY + r%NZ = NZ + end function create_limit_t + + function create_tag_list(sggAlloc) result(r) + type(XYZlimit_t), dimension(6), intent(in) :: sggAlloc + type(taglist_t) :: r + + allocate (r%edge%x(sggAlloc(iEx)%XI:sggAlloc(iEx)%XE, sggAlloc(iEx)%YI:sggAlloc(iEx)%YE, sggAlloc(iEx)%ZI:sggAlloc(iEx)%ZE)) + allocate (r%edge%y(sggAlloc(iEy)%XI:sggAlloc(iEy)%XE, sggAlloc(iEy)%YI:sggAlloc(iEy)%YE, sggAlloc(iEy)%ZI:sggAlloc(iEy)%ZE)) + allocate (r%edge%z(sggAlloc(iEz)%XI:sggAlloc(iEz)%XE, sggAlloc(iEz)%YI:sggAlloc(iEz)%YE, sggAlloc(iEz)%ZI:sggAlloc(iEz)%ZE)) + allocate (r%face%x(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHx)%YI:sggAlloc(iHx)%YE, sggAlloc(iHx)%ZI:sggAlloc(iHx)%ZE)) + allocate (r%face%y(sggAlloc(iHy)%XI:sggAlloc(iHy)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHy)%ZI:sggAlloc(iHy)%ZE)) + allocate (r%face%z(sggAlloc(iHz)%XI:sggAlloc(iHz)%XE, sggAlloc(iHz)%YI:sggAlloc(iHz)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) + + r%edge%x(:, :, :) = 0 + r%edge%y(:, :, :) = 0 + r%edge%z(:, :, :) = 0 + r%face%x(:, :, :) = 0 + r%face%y(:, :, :) = 0 + r%face%z(:, :, :) = 0 + end function create_tag_list + + subroutine create_geometry_media(res, xi, xe, yi, ye, zi, ze) + integer(kind=SINGLE), intent(in) :: xi, xe, yi, ye, zi, ze + type(media_matrices_t), intent(inout) :: res + + ! Allocate each array with its own kind + call alloc_and_init(res%sggMtag, xi, xe, yi, ye, zi, ze, 1_IKINDMTAG) + call alloc_and_init(res%sggMiNo, xi, xe, yi, ye, zi, ze, 1_INTEGERSIZEOFMEDIAMATRICES) + call alloc_and_init(res%sggMiEx, xi, xe, yi, ye, zi, ze, 1_INTEGERSIZEOFMEDIAMATRICES) + call alloc_and_init(res%sggMiEy, xi, xe, yi, ye, zi, ze, 1_INTEGERSIZEOFMEDIAMATRICES) + call alloc_and_init(res%sggMiEz, xi, xe, yi, ye, zi, ze, 1_INTEGERSIZEOFMEDIAMATRICES) + call alloc_and_init(res%sggMiHx, xi, xe, yi, ye, zi, ze, 1_INTEGERSIZEOFMEDIAMATRICES) + call alloc_and_init(res%sggMiHy, xi, xe, yi, ye, zi, ze, 1_INTEGERSIZEOFMEDIAMATRICES) + call alloc_and_init(res%sggMiHz, xi, xe, yi, ye, zi, ze, 1_INTEGERSIZEOFMEDIAMATRICES) + end subroutine create_geometry_media + + function create_geometry_media_from_sggAlloc(sggAlloc) result(r) + type(XYZlimit_t), dimension(6), intent(in) :: sggAlloc + type(media_matrices_t) :: r + + allocate (r%sggMtag(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) + allocate (r%sggMiNo(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) + + allocate (r%sggMiEx(sggAlloc(iEx)%XI:sggAlloc(iEx)%XE, sggAlloc(iEx)%YI:sggAlloc(iEx)%YE, sggAlloc(iEx)%ZI:sggAlloc(iEx)%ZE)) + allocate (r%sggMiEy(sggAlloc(iEy)%XI:sggAlloc(iEy)%XE, sggAlloc(iEy)%YI:sggAlloc(iEy)%YE, sggAlloc(iEy)%ZI:sggAlloc(iEy)%ZE)) + allocate (r%sggMiEz(sggAlloc(iEz)%XI:sggAlloc(iEz)%XE, sggAlloc(iEz)%YI:sggAlloc(iEz)%YE, sggAlloc(iEz)%ZI:sggAlloc(iEz)%ZE)) + + allocate (r%sggMiHx(sggAlloc(iHx)%XI:sggAlloc(iHx)%XE, sggAlloc(iHx)%YI:sggAlloc(iHx)%YE, sggAlloc(iHx)%ZI:sggAlloc(iHx)%ZE)) + allocate (r%sggMiHy(sggAlloc(iHy)%XI:sggAlloc(iHy)%XE, sggAlloc(iHy)%YI:sggAlloc(iHy)%YE, sggAlloc(iHy)%ZI:sggAlloc(iHy)%ZE)) + allocate (r%sggMiHz(sggAlloc(iHz)%XI:sggAlloc(iHz)%XE, sggAlloc(iHz)%YI:sggAlloc(iHz)%YE, sggAlloc(iHz)%ZI:sggAlloc(iHz)%ZE)) + + r%sggMtag(:, :, :) = 1 + r%sggMiNo(:, :, :) = 1 + r%sggMiEx(:, :, :) = 1 + r%sggMiEy(:, :, :) = 1 + r%sggMiEz(:, :, :) = 1 + r%sggMiHx(:, :, :) = 1 + r%sggMiHy(:, :, :) = 1 + r%sggMiHz(:, :, :) = 1 + end function create_geometry_media_from_sggAlloc + + function create_control_flags(layoutnumber, size, mpidir, finaltimestep, & + nEntradaRoot, wiresflavor, wirecrank, & + resume, saveall, NF2FFDecim, simu_devia, singlefilewrite, & + facesNF2FF) result(control) + + type(sim_control_t) :: control + + integer(kind=SINGLE), intent(in), optional :: layoutnumber, size, mpidir, finaltimestep + character(len=*), intent(in), optional :: nEntradaRoot, wiresflavor + logical, intent(in), optional :: wirecrank, resume, saveall, NF2FFDecim, simu_devia, singlefilewrite + type(nf2ff_t), intent(in), optional :: facesNF2FF + + ! 1. Set explicit defaults for all components + control%layoutnumber = 0 + control%num_procs = 0 + control%mpidir = 3 + control%finaltimestep = 0 + control%nEntradaRoot = "" + control%wiresflavor = "" + control%wirecrank = .false. + control%resume = .false. + control%saveall = .false. + control%NF2FFDecim = .false. + control%simu_devia = .false. + control%singlefilewrite = .false. + ! Note: control%facesNF2FF retains its default initialized state + + ! 2. Overwrite defaults only if the optional argument is present + if (present(layoutnumber)) control%layoutnumber = layoutnumber + if (present(size)) control%num_procs = size + if (present(mpidir)) control%mpidir = mpidir + if (present(finaltimestep)) control%finaltimestep = finaltimestep + if (present(nEntradaRoot)) control%nEntradaRoot = nEntradaRoot + if (present(wiresflavor)) control%wiresflavor = wiresflavor + if (present(wirecrank)) control%wirecrank = wirecrank + if (present(resume)) control%resume = resume + if (present(saveall)) control%saveall = saveall + if (present(NF2FFDecim)) control%NF2FFDecim = NF2FFDecim + if (present(simu_devia)) control%simu_devia = simu_devia + if (present(singlefilewrite)) control%singlefilewrite = singlefilewrite + if (present(facesNF2FF)) control%facesNF2FF = facesNF2FF + + end function create_control_flags + + subroutine init_simulation_material_list(simulationMaterials) + implicit none + type(MediaData_t), dimension(:), allocatable, intent(out) :: simulationMaterials + if (allocated(simulationMaterials)) deallocate (simulationMaterials) + allocate (simulationMaterials(0:2)) + simulationMaterials(0) = create_pec_simulation_material() + simulationMaterials(1) = get_default_mediadata() + simulationMaterials(2) = create_pmc_simulation_material() + + end subroutine init_simulation_material_list + + subroutine init_time_array(arr, array_size, interval) + integer, intent(in), optional :: array_size + real(kind=RKIND_tiempo), intent(in), optional :: interval + integer(kind=4) :: i + integer :: size_val + real(kind=RKIND_tiempo) :: interval_val + real(kind=RKIND_tiempo), pointer, dimension(:), intent(out) :: arr + + size_val = merge(array_size, 100, present(array_size)) + interval_val = merge(interval, 1.0_RKIND_tiempo, present(interval)) + + allocate (arr(size_val)) + + DO i = 1, size_val + arr(i) = (i - 1)*interval_val + END DO + end subroutine init_time_array + + function create_xyz_limit_array(XI, YI, ZI, XE, YE, ZE) result(arr) + type(XYZlimit_t), dimension(1:6) :: arr + integer(kind=4), intent(in), optional :: XI, YI, ZI, XE, YE, ZE + integer :: i + integer(kind=4) :: xi_val, yi_val, zi_val, xe_val, ye_val, ze_val + + ! Use merge for compact handling of optional inputs with defaults + xi_val = merge(XI, 0, present(XI)) + yi_val = merge(YI, 0, present(YI)) + zi_val = merge(ZI, 0, present(ZI)) + xe_val = merge(XE, 6, present(XE)) + ye_val = merge(YE, 6, present(YE)) + ze_val = merge(ZE, 6, present(ZE)) + + do i = 1, 6 + arr(i)%XI = xi_val + arr(i)%XE = xe_val + arr(i)%YI = yi_val + arr(i)%YE = ye_val + arr(i)%ZI = zi_val + arr(i)%ZE = ze_val + end do + end function create_xyz_limit_array + + function create_facesNF2FF(tr, fr, iz, de, ab, ar) result(faces) + type(nf2ff_t) :: faces + logical, intent(in), optional :: tr, fr, iz, de, ab, ar + + faces%tr = .false. + faces%fr = .false. + faces%iz = .false. + faces%de = .false. + faces%ab = .false. + faces%ar = .false. + + if (present(tr)) faces%tr = tr + if (present(fr)) faces%fr = fr + if (present(iz)) faces%iz = iz + if (present(de)) faces%de = de + if (present(ab)) faces%ab = ab + if (present(ar)) faces%ar = ar + end function create_facesNF2FF + + function define_point_observation() result(obs) + type(Obses_t) :: obs + + obs%nP = 1 + allocate (obs%P(obs%nP)) + obs%P(1) = create_observable(1_SINGLE, 1_SINGLE, 1_SINGLE, 1_SINGLE, 1_SINGLE, 1_SINGLE, iEx) + + obs%InitialTime = 0.0_RKIND_tiempo + obs%FinalTime = 1.0_RKIND_tiempo + obs%TimeStep = 0.1_RKIND_tiempo + + obs%InitialFreq = 0.0_RKIND + obs%FinalFreq = 0.0_RKIND + obs%FreqStep = 0.0_RKIND + + obs%outputrequest = 'pointProbe' + + obs%FreqDomain = .false. + obs%TimeDomain = .true. + obs%Saveall = .false. + obs%TransFer = .false. + obs%Volumic = .false. + obs%Done = .false. + obs%Begun = .false. + obs%Flushed = .false. + + end function define_point_observation + + function define_wire_current_observation() result(obs) + type(Obses_t) :: obs + + obs%nP = 1 + allocate (obs%P(obs%nP)) + obs%P(1) = create_observable(3_SINGLE, 3_SINGLE, 3_SINGLE, 3_SINGLE, 3_SINGLE, 3_SINGLE, iJx) + + obs%InitialTime = 0.0_RKIND_tiempo + obs%FinalTime = 1.0_RKIND_tiempo + obs%TimeStep = 0.1_RKIND_tiempo + + obs%InitialFreq = 0.0_RKIND + obs%FinalFreq = 0.0_RKIND + obs%FreqStep = 0.0_RKIND + + obs%outputrequest = 'pointProbe' + + obs%FreqDomain = .false. + obs%TimeDomain = .true. + obs%Saveall = .false. + obs%TransFer = .false. + obs%Volumic = .false. + obs%Done = .false. + obs%Begun = .false. + obs%Flushed = .false. + end function define_wire_current_observation + + function define_wire_charge_observation() result(obs) + type(Obses_t) :: obs + + obs%nP = 1 + allocate (obs%P(obs%nP)) + obs%P(1) = create_observable(3_SINGLE, 3_SINGLE, 3_SINGLE, 3_SINGLE, 3_SINGLE, 3_SINGLE, iQx) + + obs%InitialTime = 0.0_RKIND_tiempo + obs%FinalTime = 1.0_RKIND_tiempo + obs%TimeStep = 0.1_RKIND_tiempo + + obs%InitialFreq = 0.0_RKIND + obs%FinalFreq = 0.0_RKIND + obs%FreqStep = 0.0_RKIND + + obs%outputrequest = 'pointProbe' + + obs%FreqDomain = .false. + obs%TimeDomain = .true. + obs%Saveall = .false. + obs%TransFer = .false. + obs%Volumic = .false. + obs%Done = .false. + obs%Begun = .false. + obs%Flushed = .false. + end function define_wire_charge_observation + + function create_observable(XI, YI, ZI, XE, YE, ZE, what, line_in) result(observable) + type(observable_t) :: observable + integer(kind=4), intent(in) :: XI, YI, ZI, XE, YE, ZE, what + type(direction_t), dimension(:), optional, intent(in) :: line_in + + integer(kind=SINGLE) :: line_size + + observable%XI = XI + observable%YI = YI + observable%ZI = ZI + + observable%XE = XE + observable%YE = YE + observable%ZE = ZE + + observable%Xtrancos = 1 + observable%Ytrancos = 1 + observable%Ztrancos = 1 + + observable%What = what + + if (present(line_in)) then + line_size = size(line_in) + + if (line_size > 0) then + allocate (observable%line(1:line_size)) + + observable%line = line_in + else + + end if + end if + end function create_observable + + subroutine add_simulation_material(simulationMaterials, newSimulationMaterial) + type(MediaData_t), dimension(:), intent(inout), allocatable :: simulationMaterials + type(MediaData_t), intent(in) :: newSimulationMaterial + + type(MediaData_t), dimension(:), target, allocatable :: tempSimulationMaterials + integer(kind=SINGLE) :: oldSize, istat + oldSize = size(simulationMaterials) + allocate (tempSimulationMaterials(0:oldSize), stat=istat) + if (istat /= 0) then + stop "Allocation failed for temporary media array." + end if + + if (oldSize > 0) then + tempSimulationMaterials(0:oldSize - 1) = simulationMaterials + deallocate (simulationMaterials) + end if + tempSimulationMaterials(oldSize) = newSimulationMaterial + + simulationMaterials = tempSimulationMaterials + end subroutine add_simulation_material + + subroutine add_media_data_to_sgg(sgg, mediaData) + implicit none + + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(MediaData_t), intent(in) :: mediaData + + type(MediaData_t), dimension(:), target, allocatable :: temp_Med + integer :: new_size, istat + + new_size = sgg%NumMedia + 1 + + allocate (temp_Med(new_size), stat=istat) + if (istat /= 0) then + stop "Allocation failed for temporary media array." + end if + + if (sgg%NumMedia > 0) then + temp_Med(1:sgg%NumMedia) = sgg%Med + + deallocate (sgg%Med) + end if + + temp_Med(new_size) = mediaData + + sgg%Med => temp_Med + + sgg%NumMedia = new_size + + end subroutine add_media_data_to_sgg + + subroutine assign_material_id_to_media_matrix_coordinate(media, fieldComponent, i, j, k, materialId) + type(media_matrices_t), intent(inout) :: media + integer(kind=SINGLE), intent(in) :: fieldComponent, i, j, k, materialId + selectcase (fieldComponent) + case (iEx); media%sggMiEx(i, j, k) = materialId + case (iEy); media%sggMiEy(i, j, k) = materialId + case (iEz); media%sggMiEz(i, j, k) = materialId + case (iHx); media%sggMiHx(i, j, k) = materialId + case (iHy); media%sggMiHy(i, j, k) = materialId + case (iHz); media%sggMiHz(i, j, k) = materialId + end select + + end subroutine assign_material_id_to_media_matrix_coordinate + + function get_default_mediadata() result(res) + implicit none + + type(MediaData_t) :: res + !Vacuum id + res%Id = 0 + + ! Reals + res%Priority = 10 + res%Epr = 1.0_RKIND + res%Sigma = 0.0_RKIND + res%Mur = 1.0_RKIND + res%SigmaM = 0.0_RKIND + + ! Logical + res%sigmareasignado = .false. + + ! exists_t logicals + res%Is%PML = .false. + res%Is%PEC = .false. + res%Is%PMC = .false. + res%Is%ThinWire = .false. + res%Is%SlantedWire = .false. + res%Is%EDispersive = .false. + res%Is%MDispersive = .false. + res%Is%EDispersiveAnis = .false. + res%Is%MDispersiveAnis = .false. + res%Is%ThinSlot = .false. + res%Is%PMLbody = .false. + res%Is%SGBC = .false. + res%Is%SGBCDispersive = .false. + res%Is%Lumped = .false. + res%Is%Lossy = .false. + res%Is%AnisMultiport = .false. + res%Is%Multiport = .false. + res%Is%MultiportPadding = .false. + res%Is%Dielectric = .false. + res%Is%Anisotropic = .false. + res%Is%Volume = .false. + res%Is%Line = .false. + res%Is%Surface = .false. + res%Is%Needed = .true. + res%Is%Interfase = .false. + res%Is%already_YEEadvanced_byconformal = .false. + res%Is%split_and_useless = .false. + + ! Pointers: They are automatically unassociated (nullified) + ! when a function returns a type with pointer components, + ! unless explicitly associated before return. + ! For safety, we can explicitly nullify them, although Fortran often handles this. + nullify (res%Wire) + nullify (res%SlantedWire) + nullify (res%PMLbody) + nullify (res%Multiport) + nullify (res%AnisMultiport) + nullify (res%EDispersive) + nullify (res%MDispersive) + nullify (res%Anisotropic) + nullify (res%Lumped) + + end function get_default_mediadata + + function create_pec_simulation_material() result(res) + implicit none + + type(MediaData_t) :: res + type(Material_t) :: mat + + mat = create_pec_material() + res = get_default_mediadata() + res%Id = mat%id + res%Is%PEC = .TRUE. + + res%Priority = 150 + res%Epr = mat%eps/UTILEPS0 + res%Sigma = mat%sigma + res%Mur = mat%mu/UTILMU0 + res%SigmaM = mat%sigmam + + end function create_pec_simulation_material + + function create_pmc_simulation_material() result(res) + implicit none + + type(MediaData_t) :: res + type(Material_t) :: mat + + mat = create_pmc_material() + res = get_default_mediadata() + + res%Id = mat%id + res%Is%PMC = .TRUE. + + res%Priority = 160 + res%Epr = mat%eps/UTILEPS0 + res%Sigma = mat%sigma + res%Mur = mat%mu/UTILMU0 + res%SigmaM = mat%sigmam + + end function create_pmc_simulation_material + + function create_thinWire_simulation_material(materialId) result(res) + implicit none + integer(kind=SINGLE) :: materialId + + type(MediaData_t) :: res + type(Material_t) :: mat + + type(Wires_t), target, dimension(1) :: wire + + res = get_default_mediadata() + res%Id = materialId + res%Is%ThinWire = .TRUE. + + allocate (res%Wire(1)) + wire(1) = get_default_wire() + res%wire => wire + + res%Priority = 15 + + end function create_thinWire_simulation_material + + function create_empty_material() result(mat) + implicit none + type(Material_t) :: mat + end function create_empty_material + + function create_material(eps_in, mu_in, sigma_in, sigmam_in, id_in) result(mat) + implicit none + real(kind=RK), intent(in) :: eps_in, mu_in, sigma_in, sigmam_in + integer(kind=4), intent(in) :: id_in + type(Material_t) :: mat + + mat%eps = eps_in + mat%mu = mu_in + mat%sigma = sigma_in + mat%sigmam = sigmam_in + mat%id = id_in + end function create_material + + function create_vacuum_material() result(mat) + type(Material_t) :: mat + mat = create_material(EPSILON_VACUUM, MU_VACUUM, 0.0_RKIND, 0.0_RKIND, 1) + end function create_vacuum_material + + function create_pec_material() result(mat) + type(Material_t) :: mat + mat = create_material(EPSILON_VACUUM, MU_VACUUM, SIGMA_PEC, 0.0_RKIND, 0) + end function create_pec_material + + function create_pmc_material() result(mat) + type(Material_t) :: mat + mat = create_material(EPSILON_VACUUM, MU_VACUUM, 0.0_RKIND, SIGMA_PMC, 2) + end function create_pmc_material + + function create_empty_materials() result(mats) + implicit none + type(Materials_t) :: mats + end function create_empty_materials + + subroutine add_material_to_materials(mats_collection, new_mat) + implicit none + type(Materials_t), intent(inout) :: mats_collection + type(Material_t), intent(in) :: new_mat + + type(Material_t), dimension(:), target, allocatable :: temp_Mats + integer :: old_size, new_size + + old_size = mats_collection%n_Mats + new_size = old_size + 1 + + allocate (temp_Mats(new_size)) + + if (old_size > 0) then + temp_Mats(1:old_size) = mats_collection%Mats + + deallocate (mats_collection%Mats) + end if + + temp_Mats(new_size) = new_mat + + mats_collection%Mats => temp_Mats + + mats_collection%n_Mats = new_size + mats_collection%n_Mats_max = new_size + + end subroutine add_material_to_materials + + function get_default_wire() result(wire) + implicit none + type(Wires_t) :: wire + + wire%Radius = 0.0_RKIND_wires + wire%R = 0.0_RKIND_wires + wire%L = 0.0_RKIND_wires + wire%C = 0.0_RKIND_wires + wire%P_R = 0.0_RKIND_wires + wire%P_L = 0.0_RKIND_wires + wire%P_C = 0.0_RKIND_wires + wire%Radius_devia = 0.0_RKIND_wires + wire%R_devia = 0.0_RKIND_wires + wire%L_devia = 0.0_RKIND_wires + wire%C_devia = 0.0_RKIND_wires + + wire%numsegmentos = 0 + wire%NUMVOLTAGESOURCES = 0 + wire%NUMCURRENTSOURCES = 0 + + nullify (wire%segm) + nullify (wire%Vsource) + nullify (wire%Isource) + + wire%VsourceExists = .false. + wire%IsourceExists = .false. + wire%HasParallel_LeftEnd = .false. + wire%HasParallel_RightEnd = .false. + wire%HasSeries_LeftEnd = .false. + wire%HasSeries_RightEnd = .false. + wire%HasAbsorbing_LeftEnd = .false. + wire%HasAbsorbing_RightEnd = .false. + + wire%Parallel_R_RightEnd = 0.0_RKIND_wires + wire%Parallel_R_LeftEnd = 0.0_RKIND_wires + wire%Series_R_RightEnd = 0.0_RKIND_wires + wire%Series_R_LeftEnd = 0.0_RKIND_wires + wire%Parallel_L_RightEnd = 0.0_RKIND_wires + wire%Parallel_L_LeftEnd = 0.0_RKIND_wires + wire%Series_L_RightEnd = 0.0_RKIND_wires + wire%Series_L_LeftEnd = 0.0_RKIND_wires + wire%Parallel_C_RightEnd = 0.0_RKIND_wires + wire%Parallel_C_LeftEnd = 0.0_RKIND_wires + wire%Series_C_RightEnd = 2.0e7_RKIND ! Valor por defecto de corto + wire%Series_C_LeftEnd = 2.0e7_RKIND ! Valor por defecto de corto + + wire%Parallel_R_RightEnd_devia = 0.0_RKIND_wires + wire%Parallel_R_LeftEnd_devia = 0.0_RKIND_wires + wire%Series_R_RightEnd_devia = 0.0_RKIND_wires + wire%Series_R_LeftEnd_devia = 0.0_RKIND_wires + wire%Parallel_L_RightEnd_devia = 0.0_RKIND_wires + wire%Parallel_L_LeftEnd_devia = 0.0_RKIND_wires + wire%Series_L_RightEnd_devia = 0.0_RKIND_wires + wire%Series_L_LeftEnd_devia = 0.0_RKIND_wires + wire%Parallel_C_RightEnd_devia = 0.0_RKIND_wires + wire%Parallel_C_LeftEnd_devia = 0.0_RKIND_wires + wire%Series_C_RightEnd_devia = 0.0_RKIND_wires + wire%Series_C_LeftEnd_devia = 0.0_RKIND_wires + + wire%LeftEnd = 0 + wire%RightEnd = 0 + end function get_default_wire + + subroutine set_observation(obs, P_in, outputrequest_in, domain_params, FileNormalize_in) + implicit none + + type(observable_t), dimension(:), intent(in) :: P_in + character(LEN=*), intent(in) :: outputrequest_in, FileNormalize_in + type(observation_domain_t), intent(in) :: domain_params + + type(Obses_t), intent(out) :: obs + integer(kind=4) :: n_count + + n_count = size(P_in) + obs%nP = n_count + + allocate (obs%P(1:n_count)) + + obs%P(1:n_count) = P_in(1:n_count) + + obs%outputrequest = outputrequest_in + obs%FileNormalize = FileNormalize_in + + obs%InitialTime = domain_params%InitialTime + obs%FinalTime = domain_params%FinalTime + obs%TimeStep = domain_params%TimeStep + + obs%InitialFreq = domain_params%InitialFreq + obs%FinalFreq = domain_params%FinalFreq + obs%FreqStep = domain_params%FreqStep + + obs%thetaStart = domain_params%thetaStart + obs%thetaStop = domain_params%thetaStop + obs%thetaStep = domain_params%thetaStep + + obs%phiStart = domain_params%phiStart + obs%phiStop = domain_params%phiStop + obs%phiStep = domain_params%phiStep + + obs%FreqDomain = domain_params%FreqDomain + obs%TimeDomain = domain_params%TimeDomain + obs%Saveall = domain_params%Saveall + obs%TransFer = domain_params%TransFer + obs%Volumic = domain_params%Volumic + + end subroutine set_observation + + subroutine initialize_observation_time_domain(domain, InitialTime, FinalTime, TimeStep) + implicit none + + type(observation_domain_t), intent(inout) :: domain + real(kind=RKIND), intent(in) :: InitialTime, FinalTime, TimeStep + + domain%InitialTime = InitialTime + domain%FinalTime = FinalTime + domain%TimeStep = TimeStep + + domain%TimeDomain = .true. + + end subroutine initialize_observation_time_domain + + subroutine initialize_observation_frequency_domain(domain, InitialFreq, FinalFreq, FreqStep) + implicit none + + type(observation_domain_t), intent(inout) :: domain + real(kind=RKIND), intent(in) :: InitialFreq, FinalFreq, FreqStep + + domain%InitialFreq = InitialFreq + domain%FinalFreq = FinalFreq + domain%FreqStep = FreqStep + + domain%FreqDomain = .true. + + end subroutine initialize_observation_frequency_domain + + subroutine initialize_observation_theta_domain(domain, thetaStart, thetaStop, thetaStep) + implicit none + + type(observation_domain_t), intent(inout) :: domain + real(kind=RKIND), intent(in) :: thetaStart, thetaStop, thetaStep + + domain%thetaStart = thetaStart + domain%thetaStop = thetaStop + domain%thetaStep = thetaStep + + end subroutine initialize_observation_theta_domain + + subroutine initialize_observation_phi_domain(domain, phiStart, phiStop, phiStep) + implicit none + + type(observation_domain_t), intent(inout) :: domain + real(kind=RKIND), intent(in) :: phiStart, phiStop, phiStep + + domain%phiStart = phiStart + domain%phiStop = phiStop + domain%phiStep = phiStep + + end subroutine initialize_observation_phi_domain + + subroutine initialize_observation_domain_logical_flags(domain, Saveall_flag, TransFer_flag, Volumic_flag) + implicit none + + type(observation_domain_t), intent(inout) :: domain + logical, intent(in) :: Saveall_flag, TransFer_flag, Volumic_flag + + domain%Saveall = Saveall_flag + domain%TransFer = TransFer_flag + domain%Volumic = Volumic_flag + + end subroutine initialize_observation_domain_logical_flags + +end module FDETYPES_TOOLS diff --git a/test/utils/sgg_setters.F90 b/test/utils/sgg_setters.F90 new file mode 100644 index 00000000..9234d379 --- /dev/null +++ b/test/utils/sgg_setters.F90 @@ -0,0 +1,416 @@ +module sggMethods_m + use FDETYPES_m + implicit none + private + + + public :: sgg_init + + public :: sgg_set_tiempo + public :: sgg_set_dt + public :: sgg_set_extraswitches + + public :: sgg_set_NumMedia + public :: sgg_set_AllocMed + public :: sgg_set_IniPMLMedia + public :: sgg_set_EndPMLMedia + + public :: sgg_set_NumPlaneWaves + public :: sgg_set_TimeSteps + public :: sgg_set_InitialTimeStep + + public :: sgg_set_NumNodalSources + public :: sgg_set_NumberRequest + + public :: sgg_set_LineX + public :: sgg_set_LineY + public :: sgg_set_LineZ + public :: sgg_set_DX + public :: sgg_set_DY + public :: sgg_set_DZ + + public :: sgg_set_AllocDxI + public :: sgg_set_AllocDyI + public :: sgg_set_AllocDzI + public :: sgg_set_AllocDxE + public :: sgg_set_AllocDyE + public :: sgg_set_AllocDzE + + public :: sgg_set_PlaneWave + public :: sgg_set_Border + public :: sgg_set_PML + public :: sgg_set_Eshared + public :: sgg_set_Hshared + + public :: sgg_set_Alloc + public :: sgg_set_Sweep + public :: sgg_set_SINPMLSweep + + public :: sgg_set_Med + public :: sgg_set_NodalSource + public :: sgg_set_Observation + + public :: sgg_set_thereAreMagneticMedia + public :: sgg_set_thereArePMLMagneticMedia + + public :: sgg_set_nEntradaRoot + public :: sgg_set_Punto + + public :: sgg_add_observation +contains + subroutine sgg_init(obj, & + tiempo, dt, extraswitches, & + NumMedia, AllocMed, & + IniPMLMedia, EndPMLMedia, & + NumPlaneWaves, TimeSteps, InitialTimeStep, & + NumNodalSources, NumberRequest, & + thereAreMagneticMedia, thereArePMLMagneticMedia, & + nEntradaRoot) + + implicit none + + type(SGGFDTDINFO_t), intent(inout) :: obj + + ! ===== Optional arguments ===== + real(kind=RKIND_tiempo), pointer, optional :: tiempo(:) + real(kind=RKIND_tiempo), optional :: dt + character(len=*), optional :: extraswitches + + integer(kind=SINGLE), optional :: NumMedia, AllocMed + integer(kind=SINGLE), optional :: IniPMLMedia, EndPMLMedia + integer(kind=SINGLE), optional :: NumPlaneWaves, TimeSteps, InitialTimeStep + integer(kind=SINGLE), optional :: NumNodalSources, NumberRequest + + logical, optional :: thereAreMagneticMedia + logical, optional :: thereArePMLMagneticMedia + + character(len=*), optional :: nEntradaRoot + + ! ===== Defaults ===== + + nullify (obj%tiempo) + obj%dt = 0.0_RKIND_tiempo + obj%extraswitches = "" + + obj%NumMedia = 0_SINGLE + obj%AllocMed = 0_SINGLE + obj%IniPMLMedia = 0_SINGLE + obj%EndPMLMedia = 0_SINGLE + obj%NumPlaneWaves = 0_SINGLE + obj%TimeSteps = 0_SINGLE + obj%InitialTimeStep = 0_SINGLE + obj%NumNodalSources = 0_SINGLE + obj%NumberRequest = 0_SINGLE + + nullify (obj%LineX, obj%LineY, obj%LineZ) + nullify (obj%DX, obj%DY, obj%DZ) + + obj%AllocDxI = 0_SINGLE + obj%AllocDyI = 0_SINGLE + obj%AllocDzI = 0_SINGLE + obj%AllocDxE = 0_SINGLE + obj%AllocDyE = 0_SINGLE + obj%AllocDzE = 0_SINGLE + + nullify (obj%PlaneWave) + nullify (obj%Med) + nullify (obj%NodalSource) + nullify (obj%Observation) + + obj%thereAreMagneticMedia = .false. + obj%thereArePMLMagneticMedia = .false. + + obj%nEntradaRoot = "" + + ! NOTE: + ! Derived-type components (Border, PML, Shared_t, XYZlimit_t, Punto) + ! are automatically default-initialized if they define their own defaults. + + ! ===== Overrides from arguments ===== + + if (present(tiempo)) obj%tiempo => tiempo + if (present(dt)) obj%dt = dt + if (present(extraswitches)) obj%extraswitches = extraswitches + + if (present(NumMedia)) obj%NumMedia = NumMedia + if (present(AllocMed)) obj%AllocMed = AllocMed + if (present(IniPMLMedia)) obj%IniPMLMedia = IniPMLMedia + if (present(EndPMLMedia)) obj%EndPMLMedia = EndPMLMedia + if (present(NumPlaneWaves)) obj%NumPlaneWaves = NumPlaneWaves + if (present(TimeSteps)) obj%TimeSteps = TimeSteps + if (present(InitialTimeStep)) obj%InitialTimeStep = InitialTimeStep + if (present(NumNodalSources)) obj%NumNodalSources = NumNodalSources + if (present(NumberRequest)) obj%NumberRequest = NumberRequest + + if (present(thereAreMagneticMedia)) & + obj%thereAreMagneticMedia = thereAreMagneticMedia + + if (present(thereArePMLMagneticMedia)) & + obj%thereArePMLMagneticMedia = thereArePMLMagneticMedia + + if (present(nEntradaRoot)) obj%nEntradaRoot = nEntradaRoot + + end subroutine sgg_init + + subroutine sgg_set_tiempo(sgg, tiempo) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND_tiempo), pointer :: tiempo(:) + sgg%tiempo => tiempo + end subroutine + + subroutine sgg_set_dt(sgg, dt) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND_tiempo), intent(in) :: dt + sgg%dt = dt + end subroutine + + subroutine sgg_set_extraswitches(sgg, extraswitches) + type(SGGFDTDINFO_t), intent(inout) :: sgg + character(len=*), intent(in) :: extraswitches + sgg%extraswitches = extraswitches + end subroutine + + subroutine sgg_set_NumMedia(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%NumMedia = newValue + end subroutine + + subroutine sgg_set_AllocMed(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%AllocMed = newValue + end subroutine + + subroutine sgg_set_IniPMLMedia(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%IniPMLMedia = newValue + end subroutine + + subroutine sgg_set_EndPMLMedia(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%EndPMLMedia = newValue + end subroutine + + subroutine sgg_set_NumPlaneWaves(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%NumPlaneWaves = newValue + end subroutine + + subroutine sgg_set_TimeSteps(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%TimeSteps = newValue + end subroutine + + subroutine sgg_set_InitialTimeStep(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%InitialTimeStep = newValue + end subroutine + + subroutine sgg_set_NumNodalSources(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%NumNodalSources = newValue + end subroutine + + subroutine sgg_set_NumberRequest(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%NumberRequest = newValue + end subroutine + + subroutine sgg_set_LineX(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND), pointer :: newValue(:) + sgg%LineX => newValue + end subroutine + + subroutine sgg_set_LineY(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND), pointer :: newValue(:) + sgg%LineY => newValue + end subroutine + + subroutine sgg_set_LineZ(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND), pointer :: newValue(:) + sgg%LineZ => newValue + end subroutine + + subroutine sgg_set_DX(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND), pointer :: newValue(:) + sgg%DX => newValue + end subroutine + + subroutine sgg_set_DY(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND), pointer :: newValue(:) + sgg%DY => newValue + end subroutine + + subroutine sgg_set_DZ(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + real(kind=RKIND), pointer :: newValue(:) + sgg%DZ => newValue + end subroutine + + subroutine sgg_set_AllocDxI(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%AllocDxI = newValue + end subroutine + + subroutine sgg_set_AllocDyI(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%AllocDyI = newValue + end subroutine + + subroutine sgg_set_AllocDzI(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%AllocDzI = newValue + end subroutine + + subroutine sgg_set_AllocDxE(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%AllocDxE = newValue + end subroutine + + subroutine sgg_set_AllocDyE(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%AllocDyE = newValue + end subroutine + + subroutine sgg_set_AllocDzE(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + integer(kind=SINGLE), intent(in) :: newValue + sgg%AllocDzE = newValue + end subroutine + + subroutine sgg_set_PlaneWave(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(planeonde_t), pointer :: newValue(:) + sgg%PlaneWave => newValue + end subroutine + + subroutine sgg_set_Med(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(MediaData_t), pointer :: newValue(:) + sgg%Med => newValue + end subroutine + + subroutine sgg_set_NodalSource(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(NodalSource_t), pointer :: newValue(:) + sgg%NodalSource => newValue + end subroutine + + subroutine sgg_set_Observation(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(obses_t), pointer :: newValue(:) + sgg%Observation => newValue + end subroutine + + subroutine sgg_set_Border(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(Border_t), intent(in) :: newValue + sgg%Border = newValue + end subroutine + + subroutine sgg_set_PML(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(PML_t), intent(in) :: newValue + sgg%PML = newValue + end subroutine + + subroutine sgg_set_Eshared(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(Shared_t), intent(in) :: newValue + sgg%Eshared = newValue + end subroutine + + subroutine sgg_set_Hshared(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(Shared_t), intent(in) :: newValue + sgg%Hshared = newValue + end subroutine + + subroutine sgg_set_Alloc(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(XYZlimit_t), intent(in) :: newValue(1:6) + sgg%Alloc = newValue + end subroutine + + subroutine sgg_set_Sweep(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(XYZlimit_t), intent(in) :: newValue(1:6) + sgg%Sweep = newValue + end subroutine + + subroutine sgg_set_SINPMLSweep(sgg, newValue) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(XYZlimit_t), intent(in) :: newValue(1:6) + sgg%SINPMLSweep = newValue + end subroutine + + subroutine sgg_set_thereAreMagneticMedia(sgg, value) + type(SGGFDTDINFO_t), intent(inout) :: sgg + logical, intent(in) :: value + sgg%thereAreMagneticMedia = value + end subroutine + + subroutine sgg_set_thereArePMLMagneticMedia(sgg, value) + type(SGGFDTDINFO_t), intent(inout) :: sgg + logical, intent(in) :: value + sgg%thereArePMLMagneticMedia = value + end subroutine + + subroutine sgg_set_nEntradaRoot(sgg, value) + type(SGGFDTDINFO_t), intent(inout) :: sgg + character(len=*), intent(in) :: value + sgg%nEntradaRoot = value + end subroutine + + subroutine sgg_set_Punto(sgg, value) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(coorsxyzP_t), intent(in) :: value + sgg%Punto = value + end subroutine + + subroutine sgg_add_observation(sgg, new_observation) + implicit none + + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(Obses_t), intent(in), target :: new_observation + + type(Obses_t), dimension(:), pointer :: temp_obs + integer :: old_size, new_size + + old_size = sgg%NumberRequest + new_size = old_size + 1 + + allocate (temp_obs(1:new_size)) + + if (old_size > 0) then + temp_obs(1:old_size) = sgg%Observation(1:old_size) + deallocate (sgg%Observation) + end if + + temp_obs(new_size) = new_observation + + sgg%Observation => temp_obs + + sgg%NumberRequest = new_size + + end subroutine sgg_add_observation + +end module sggMethods_m diff --git a/testData/input_examples/probes/movie_and_frequency_slices.fdtd.json b/testData/input_examples/probes/movie_and_frequency_slices.fdtd.json new file mode 100644 index 00000000..a6686d01 --- /dev/null +++ b/testData/input_examples/probes/movie_and_frequency_slices.fdtd.json @@ -0,0 +1,197 @@ +{ + "_format": "FDTD Input file", + "general": { + "timeStep": 3.0813e-12, + "numberOfSteps": 1298 + }, + "boundary": { + "all": { + "type": "mur" + } + }, + "mesh": { + "grid": { + "numberOfCells": [ + 30, + 30, + 30 + ], + "steps": { + "x": [ + 0.002 + ], + "y": [ + 0.002 + ], + "z": [ + 0.002 + ] + } + }, + "coordinates": [ + { + "id": 1, + "relativePosition": [ + 0.0, + 10.0, + 10.0 + ] + }, + { + "id": 2, + "relativePosition": [ + 10.0, + 10.0, + 10.0 + ] + }, + { + "id": 3, + "relativePosition": [ + 10.0, + 0.0, + 10.0 + ] + } + ], + "elements": [ + { + "id": 1, + "type": "cell", + "intervals": [ + [ + [ + 0.0, + 20.0, + 20.0 + ], + [ + 20.0, + 20.0, + 20.0 + ] + ], + [ + [ + 20.0, + 20.0, + 20.0 + ], + [ + 20.0, + 20.0, + 10.0 + ] + ], + [ + [ + 20.0, + 20.0, + 10.0 + ], + [ + 20.0, + 0.0, + 10.0 + ] + ] + ] + }, + { + "id": 2, + "type": "cell", + "intervals": [ + [ + [ + 15, + 15, + 15 + ], + [ + 25, + 25, + 25 + ] + ] + ] + } + ] + }, + "materials": [], + "materialAssociations": [], + "sources": [ + { + "name": "nodalSource", + "type": "nodalSource", + "magnitudeFile": "predefinedExcitation.1.exc", + "elementIds": [ + 1 + ] + } + ], + "probes": [ + { + "name": "electric_field_movie_x", + "type": "movie", + "field": "electric", + "component": "x", + "elementIds": [2] + }, + { + "name": "magnetic_field_movie_y", + "type": "movie", + "field": "magnetic", + "component": "y", + "elementIds": [2] + }, + { + "name": "current_density_movie_z", + "type": "movie", + "field": "currentDensity", + "component": "z", + "elementIds": [2] + }, + { + "name": "electric_field_frequency_slice_x", + "type": "movie", + "field": "electric", + "component": "x", + "elementIds": [2], + "domain": { + "type": "frequency", + "initialFrequency": 1e6, + "finalFrequency": 1e9, + "numberOfFrequencies": 30, + "frequencySpacing": "logarithmic" + } + }, + { + "name": "magnetic_field_frequency_slice_y", + "type": "movie", + "field": "magnetic", + "component": "y", + "elementIds": [2], + "domain": { + "type": "frequency", + "initialFrequency": 1e6, + "finalFrequency": 1e9, + "numberOfFrequencies": 30, + "frequencySpacing": "logarithmic" + } + }, + { + "name": "current_density_frequency_slice_z", + "type": "movie", + "field": "currentDensity", + "component": "z", + "elementIds": [2], + "domain": { + "type": "frequency", + "initialFrequency": 1e6, + "finalFrequency": 1e9, + "numberOfFrequencies": 30, + "frequencySpacing": "logarithmic" + } + } + ] +} \ No newline at end of file diff --git a/testData/input_examples/probes/time_movie_over_cube.fdtd.json b/testData/input_examples/probes/time_movie_over_cube.fdtd.json index 663f1512..771039e4 100644 --- a/testData/input_examples/probes/time_movie_over_cube.fdtd.json +++ b/testData/input_examples/probes/time_movie_over_cube.fdtd.json @@ -48,7 +48,7 @@ ] ] ] - }, + } ] }, "materials": [ From d2104f0dd88c1310e8653c3ead157bdec5a58885 Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Mon, 6 Jul 2026 15:31:24 +0200 Subject: [PATCH 03/38] FDTD | ENV | #409 | Allow usage of isolated IA on containers --- .devcontainer/Dockerfile | 1 - .devcontainer/devcontainer-lock.json | 14 ++++ .devcontainer/devcontainer.json | 90 +++++++++++---------- .devcontainer/notes.md | 12 --- .devcontainer/setup-python.sh | 6 ++ .dockerignore | 26 +++++- .vscode/launch.dev.json | 74 +++++++++++++++++ CMakeLists.txt | 3 + CMakePresets.json | 53 +++++++++++- Dockerfile | 115 ++++++++++++++++++++++++--- docker-compose.yml | 100 ++++++++++++++++++++++- scripts/devcontainer-post-start.sh | 48 +++++++++++ simulations/SEMBA_FDTD_temp.log | 21 +++++ test/pyWrapper/utils.py | 20 ++++- 14 files changed, 507 insertions(+), 76 deletions(-) delete mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer-lock.json delete mode 100644 .devcontainer/notes.md create mode 100755 .devcontainer/setup-python.sh create mode 100644 .vscode/launch.dev.json create mode 100755 scripts/devcontainer-post-start.sh create mode 100644 simulations/SEMBA_FDTD_temp.log diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 6c632061..00000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM intel/oneapi-hpckit \ No newline at end of file diff --git a/.devcontainer/devcontainer-lock.json b/.devcontainer/devcontainer-lock.json new file mode 100644 index 00000000..0500829a --- /dev/null +++ b/.devcontainer/devcontainer-lock.json @@ -0,0 +1,14 @@ +{ + "features": { + "ghcr.io/devcontainers/features/python:1": { + "version": "1.8.0", + "resolved": "ghcr.io/devcontainers/features/python@sha256:fbcad6955caeecc5ad3f7886baf652e25cba5225a6c4c2287c536de2e5607511", + "integrity": "sha256:fbcad6955caeecc5ad3f7886baf652e25cba5225a6c4c2287c536de2e5607511" + }, + "ghcr.io/msclock/features/vcpkg:2": { + "version": "2.0.0", + "resolved": "ghcr.io/msclock/features/vcpkg@sha256:bcb75d475252af1f9ef742860387cb15e059f57041748abdd02030cd1a181471", + "integrity": "sha256:bcb75d475252af1f9ef742860387cb15e059f57041748abdd02030cd1a181471" + } + } +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index bed4a83e..075c5643 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,46 +1,48 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/cpp { - "name": "OpenSEMBA dev. framework", - "build": { - "dockerfile": "Dockerfile" - }, - "features": { - "ghcr.io/msclock/features/vcpkg:2": {}, - "ghcr.io/devcontainers/features/python:1": {} - }, - - // Features to add to the dev container. More info: https://containers.dev/features. - // "features": {}, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Use 'postCreateCommand' to run commands after the container is created. - "postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", - - // Configure tool-specific properties. - "customizations": { - "codespaces": { - "repositories": { - "lmdiazangulo/json-fortran": { "permissions": "read-all" }, - "opensemba/fhash": { "permissions": "read-all" }, - "reference-lapack/lapack": { "permissions": "read-all" }, - "opensemba/ngtest": {"permissions": "read-all" }, - "google/googletest": { "permissions": "read-all" } - } - }, - "vscode": { - "extensions": [ - "ms-toolsai.jupyter", - "fortran-lang.linter-gfortran", - "ms-vscode.cmake-tools", - "ms-python.autopep8", - "matepek.vscode-catch2-test-adapter" - ] - } - } - - // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "root" + "name": "semba-fdtd dev", + "dockerComposeFile": [ + "../docker-compose.yml" + ], + "service": "dev", + "workspaceFolder": "/home/developer/workspaces/fdtd", + "remoteUser": "developer", + "containerUser": "developer", + "overrideCommand": false, + "features": { + "ghcr.io/msclock/features/vcpkg:2": {}, + "ghcr.io/devcontainers/features/python:1": {} + }, + "remoteEnv": { + "HOME": "/home/developer", + "XDG_CONFIG_HOME": "/home/developer/.config", + "XDG_DATA_HOME": "/home/developer/.local/share", + "OPENAI_API_KEY": "${localEnv:OPENAI_API_KEY}" + }, + "postCreateCommand": ".devcontainer/setup-python.sh", + "postStartCommand": "bash scripts/devcontainer-post-start.sh", + "customizations": { + "codespaces": { + "repositories": { + "lmdiazangulo/json-fortran": { "permissions": "read-all" }, + "opensemba/fhash": { "permissions": "read-all" }, + "reference-lapack/lapack": { "permissions": "read-all" }, + "opensemba/ngtest": { "permissions": "read-all" }, + "google/googletest": { "permissions": "read-all" } + } + }, + "vscode": { + "extensions": [ + "fortran-lang.linter-gfortran", + "ms-vscode.cmake-tools", + "ms-python.python", + "eamodio.gitlens" + ], + "settings": { + "cmake.buildDirectory": "${workspaceFolder}/build-dev", + "cmake.useCMakePresets": "always", + "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", + "terminal.integrated.defaultProfile.linux": "bash" + } + } + } } diff --git a/.devcontainer/notes.md b/.devcontainer/notes.md deleted file mode 100644 index 26d157f4..00000000 --- a/.devcontainer/notes.md +++ /dev/null @@ -1,12 +0,0 @@ - -``` -git submodule init -git submodule --recursive -``` - -Install python packages -``` -python3 -m venv ~/py_envs -source ~/py_envs/bin/activate -python3 -m pip install -r requirements.txt -``` \ No newline at end of file diff --git a/.devcontainer/setup-python.sh b/.devcontainer/setup-python.sh new file mode 100755 index 00000000..5912f178 --- /dev/null +++ b/.devcontainer/setup-python.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -euo pipefail + +python3 -m venv .venv +.venv/bin/python -m pip install --upgrade pip +.venv/bin/python -m pip install -r requirements.txt diff --git a/.dockerignore b/.dockerignore index be16480f..5924ac63 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,10 @@ .git build/ +build-*/ .venv/ +.devcontainer/ +.vscode/ +.github/ __pycache__/ *.pyc *.pyo @@ -9,4 +13,24 @@ __pycache__/ dist/ *.o *.mod -# Keep precompiled_libraries and external/ submodule contents + +# Runtime/development bind mounts do not need to be copied into image layers. +simulations/ + +# Linux Docker builds only use the GNU LAPACK bundle. +precompiled_libraries/** +!precompiled_libraries/ +!precompiled_libraries/linux-gcc/ +!precompiled_libraries/linux-gcc/** + +# The top-level build only consumes selected external sources. +external/lapack/ +external/ngspice/examples/ +external/ngspice/tests/ +external/ngspice/visualc/ +external/ngspice/man/ +external/ngspice/doc/ +external/ngspice/.git/ +external/googletest/.git/ +external/json-fortran/.git/ +external/fhash/.git/ diff --git a/.vscode/launch.dev.json b/.vscode/launch.dev.json new file mode 100644 index 00000000..28d56134 --- /dev/null +++ b/.vscode/launch.dev.json @@ -0,0 +1,74 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug semba-fdtd (dbg)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build-dbg/bin/semba-fdtd", + "args": ["${input:inputFile}"], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "CMake: build Debug no-MPI" + }, + { + "name": "Debug semba-fdtd (dbg-mpi)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build-dbg-mpi/bin/semba-fdtd", + "args": ["${input:inputFile}"], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + }, + { + "name": "Debug fdtd_tests (dbg)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build-dbg/bin/fdtd_tests", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "CMake: build Debug no-MPI" + }, + { + "name": "Attach to process", + "type": "cppdbg", + "request": "attach", + "program": "${workspaceFolder}/build-dbg/bin/semba-fdtd", + "processId": "${command:pickProcess}", + "MIMode": "gdb" + } + ], + "inputs": [ + { + "id": "inputFile", + "type": "promptString", + "description": "Path to .fdtd.json input file", + "default": "testData/input_examples/sphere.fdtd.json" + } + ] +} diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c65d14a..36714a85 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,9 @@ if (CMAKE_SYSTEM_NAME MATCHES "Linux") if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") message(STATUS "Using GNU flags") + set(CMAKE_C_STANDARD 17) + set(CMAKE_C_STANDARD_REQUIRED ON) + set(CMAKE_C_EXTENSIONS ON) set(CMAKE_CXX_FLAGS "-fopenmp") set(CMAKE_Fortran_FLAGS "-fopenmp -ffree-form -ffree-line-length-none -fdec -fallow-argument-mismatch") diff --git a/CMakePresets.json b/CMakePresets.json index 3f068ff0..f61d693e 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -6,7 +6,8 @@ "generator": "Ninja", "binaryDir": "build-rls/", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "SEMBA_FDTD_ENABLE_MPI": "OFF" } }, { @@ -17,6 +18,22 @@ "CMAKE_BUILD_TYPE": "Debug" } }, + { + "name": "rls-mpi", + "inherits": "rls", + "binaryDir": "build-rls-mpi/", + "cacheVariables": { + "SEMBA_FDTD_ENABLE_MPI": "ON" + } + }, + { + "name": "dbg-mpi", + "inherits": "dbg", + "binaryDir": "build-dbg-mpi/", + "cacheVariables": { + "SEMBA_FDTD_ENABLE_MPI": "ON" + } + }, { "name": "dbg-nomtln", "inherits": "dbg", @@ -58,5 +75,39 @@ "SEMBA_FDTD_ENABLE_MTLN": "OFF" } } + ], + "buildPresets": [ + { + "name": "rls", + "configurePreset": "rls" + }, + { + "name": "dbg", + "configurePreset": "dbg" + }, + { + "name": "rls-mpi", + "configurePreset": "rls-mpi" + }, + { + "name": "dbg-mpi", + "configurePreset": "dbg-mpi" + }, + { + "name": "rls-nomtln", + "configurePreset": "rls-nomtln" + }, + { + "name": "dbg-nomtln", + "configurePreset": "dbg-nomtln" + }, + { + "name": "intel-rls", + "configurePreset": "intel-rls" + }, + { + "name": "intel-rls-nomtln", + "configurePreset": "intel-rls-nomtln" + } ] } diff --git a/Dockerfile b/Dockerfile index cf0830e4..66316a46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,31 +1,58 @@ -# ─── Stage 1: Builder ───────────────────────────────────────────────────────── -FROM ubuntu:22.04@sha256:eb29ed27b0821dca09c2e28b39135e185fc1302036427d5f4d70a41ce8fd7659 AS builder +# syntax=docker/dockerfile:1.7 + +# ─── Base ───────────────────────────────────────────────────────────────────── +FROM ubuntu:26.04@sha256:b7f48194d4d8b763a478a621cdc81c27be222ba2206ca3ca6bc42b49685f3d9e AS base ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && apt-get install -y \ + locales \ gfortran \ g++ \ cmake \ make \ + ninja-build \ libhdf5-dev \ libopenmpi-dev \ python3 \ python3-pip \ + python3-venv \ gdb \ gdbserver \ + && locale-gen en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* +ENV LANG=en_US.UTF-8 \ + LANGUAGE=en_US:en \ + LC_ALL=en_US.UTF-8 + +# ─── Stage 1: Builder ───────────────────────────────────────────────────────── +FROM base AS builder + WORKDIR /src COPY . . -# Install Python test/wrapper dependencies -RUN python3 -m pip install --no-cache-dir -r requirements.txt - # Build (MPI off by default; override at build time with --build-arg ENABLE_MPI=ON) ARG ENABLE_MPI=OFF ARG ENABLE_MTLN=ON ARG BUILD_TYPE=Release +ARG ENABLE_TEST=OFF + +RUN cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DSEMBA_FDTD_ENABLE_MPI=${ENABLE_MPI} \ + -DSEMBA_FDTD_ENABLE_HDF=ON \ + -DSEMBA_FDTD_ENABLE_MTLN=${ENABLE_MTLN} \ + -DSEMBA_FDTD_ENABLE_SMBJSON=ON \ + -DSEMBA_FDTD_ENABLE_TEST=${ENABLE_TEST} \ + && cmake --build build -j$(nproc) \ + && cp build/bin/semba-fdtd /tmp/semba-fdtd \ + && if [ "${BUILD_TYPE}" = "Release" ]; then strip /tmp/semba-fdtd; fi + +# ─── Stage 1b: Test Builder ─────────────────────────────────────────────────── +FROM builder AS test-builder RUN cmake -S . -B build \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ @@ -36,22 +63,84 @@ RUN cmake -S . -B build \ -DSEMBA_FDTD_ENABLE_TEST=ON \ && cmake --build build -j$(nproc) -# ─── Stage 2: Runtime ───────────────────────────────────────────────────────── +# Install Python test/wrapper dependencies only for images that run tests. +RUN python3 -m venv /opt/fdtd-venv \ + && /opt/fdtd-venv/bin/python -m pip install --upgrade pip \ + && /opt/fdtd-venv/bin/python -m pip install --no-cache-dir -r requirements.txt + +ENV PATH=/opt/fdtd-venv/bin:${PATH} + +# ─── Stage 2: Development Tools ──────────────────────────────────────────────── +FROM base AS dev-tools + +USER root + +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && apt-get install -y \ + git \ + gh \ + openssh-client \ + nodejs \ + npm \ + sudo \ + && rm -rf /var/lib/apt/lists/* + +RUN --mount=type=cache,target=/root/.npm \ + npm install -g opencode-ai + +RUN --mount=type=cache,target=/root/.cache/pip \ + python3 -m pip install --break-system-packages fortls fprettify + +# ─── Stage 2b: Development User ──────────────────────────────────────────────── +FROM dev-tools AS dev + +ARG USERNAME=developer +ARG USER_UID=1000 +ARG USER_GID=1000 + +ENV USERNAME=${USERNAME} \ + USER_UID=${USER_UID} \ + USER_GID=${USER_GID} + +RUN userdel --remove ubuntu 2>/dev/null || true \ + && groupdel ubuntu 2>/dev/null || true \ + && groupadd --gid ${USER_GID} ${USERNAME} \ + && useradd --uid ${USER_UID} --gid ${USER_GID} -m -s /bin/bash ${USERNAME} \ + && mkdir -p /home/${USERNAME}/.config \ + && mkdir -p /home/${USERNAME}/.ssh \ + && mkdir -p /home/${USERNAME}/.local/share/opencode \ + && chmod 700 /home/${USERNAME}/.ssh \ + && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.config \ + && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.ssh \ + && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.local \ + && usermod -aG sudo ${USERNAME} \ + && echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/${USERNAME} \ + && chmod 0440 /etc/sudoers.d/${USERNAME} + +USER ${USERNAME} +WORKDIR /home/${USERNAME}/workspaces/fdtd + +# ─── Stage 3: Runtime ───────────────────────────────────────────────────────── # Minimal image with only the shared libraries the binary needs at runtime. -# HDF5, LAPACK, BLAS, and ngspice are all statically linked on Linux, -# so only the Fortran/OpenMP runtimes and HDF5 transitive deps are required. -FROM ubuntu:22.04@sha256:eb29ed27b0821dca09c2e28b39135e185fc1302036427d5f4d70a41ce8fd7659 AS runtime +# HDF5, LAPACK, BLAS, and ngspice are all statically linked on Linux. +# Keep OpenMPI runtime libraries available for MPI-enabled image builds. +FROM ubuntu:26.04@sha256:b7f48194d4d8b763a478a621cdc81c27be222ba2206ca3ca6bc42b49685f3d9e AS runtime ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && apt-get install -y \ libgfortran5 \ libgomp1 \ + libcurl4t64 \ zlib1g \ - libaec2 \ + libaec0 \ + libsz2 \ && rm -rf /var/lib/apt/lists/* -COPY --from=builder /src/build/bin/semba-fdtd /usr/local/bin/semba-fdtd +COPY --from=builder /tmp/semba-fdtd /usr/local/bin/semba-fdtd WORKDIR /work diff --git a/docker-compose.yml b/docker-compose.yml index b9fd2ffa..b456a9a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,6 +9,43 @@ services: - ./simulations:/work working_dir: /work + dev: + image: fdtd-dev:latest + build: + context: . + target: dev + environment: + HOME: /home/developer + XDG_CONFIG_HOME: /home/developer/.config + XDG_DATA_HOME: /home/developer/.local/share + volumes: + - type: bind + source: . + target: /home/developer/workspaces/fdtd + - type: bind + source: ${HOME}/.gitconfig + target: /home/developer/.gitconfig + - type: bind + source: ${HOME}/.ssh + target: /home/developer/.ssh + read_only: true + - type: bind + source: ${HOME}/.config/gh + target: /home/developer/.config/gh + - type: bind + source: ${HOME}/.config/opencode + target: /home/developer/.config/opencode + - type: bind + source: ${HOME}/.local/share/opencode + target: /home/developer/.local/share/opencode + - type: bind + source: ./build-dev + target: /home/developer/workspaces/fdtd/build-dev + - type: bind + source: ./build-dev-mpi + target: /home/developer/workspaces/fdtd/build-dev-mpi + working_dir: /home/developer/workspaces/fdtd + tty: true # Debug a simulation with gdbserver (connect from VSCode with launch.json) # Usage: docker compose run --rm -p 2345:2345 debug case.fdtd.json debug: @@ -25,11 +62,11 @@ services: working_dir: /work entrypoint: ["gdbserver", ":2345", "/src/build/bin/semba-fdtd", "-i"] - # Build the project and run all tests + # Build the project and run non-MPI tests test: build: context: . - target: builder + target: test-builder args: BUILD_TYPE: Release ENABLE_MPI: "OFF" @@ -38,6 +75,63 @@ services: SEMBA_FDTD_ENABLE_MPI: "OFF" SEMBA_FDTD_ENABLE_MTLN: "ON" SEMBA_FDTD_ENABLE_HDF: "ON" + SEMBA_EXE: /src/build/bin/semba-fdtd working_dir: /src command: > - sh -c "build/bin/fdtd_tests && python3 -m pytest test/ --durations=20" + sh -c "build/bin/fdtd_tests && python3 -m pytest test/ -m 'not mpi' --durations=20" + + # Build with MPI enabled and run MPI integration tests + test-mpi: + build: + context: . + target: test-builder + args: + BUILD_TYPE: Release + ENABLE_MPI: "ON" + ENABLE_MTLN: "ON" + environment: + SEMBA_FDTD_ENABLE_MPI: "ON" + SEMBA_FDTD_ENABLE_MTLN: "ON" + SEMBA_FDTD_ENABLE_HDF: "ON" + SEMBA_EXE: /src/build/bin/semba-fdtd + OMPI_ALLOW_RUN_AS_ROOT: "1" + OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: "1" + working_dir: /src + command: > + sh -c "build/bin/fdtd_tests && python3 -m pytest test/ -m mpi --durations=20" + + # Interactive shell in the non-MPI test image + shell: + build: + context: . + target: test-builder + args: + BUILD_TYPE: Debug + ENABLE_MPI: "OFF" + ENABLE_MTLN: "ON" + environment: + SEMBA_FDTD_ENABLE_MPI: "OFF" + SEMBA_FDTD_ENABLE_MTLN: "ON" + SEMBA_FDTD_ENABLE_HDF: "ON" + SEMBA_EXE: /src/build/bin/semba-fdtd + working_dir: /src + entrypoint: ["bash"] + + # Interactive shell in the MPI-enabled test image + shell-mpi: + build: + context: . + target: test-builder + args: + BUILD_TYPE: Debug + ENABLE_MPI: "ON" + ENABLE_MTLN: "ON" + environment: + SEMBA_FDTD_ENABLE_MPI: "ON" + SEMBA_FDTD_ENABLE_MTLN: "ON" + SEMBA_FDTD_ENABLE_HDF: "ON" + SEMBA_EXE: /src/build/bin/semba-fdtd + OMPI_ALLOW_RUN_AS_ROOT: "1" + OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: "1" + working_dir: /src + entrypoint: ["bash"] diff --git a/scripts/devcontainer-post-start.sh b/scripts/devcontainer-post-start.sh new file mode 100755 index 00000000..db494d5d --- /dev/null +++ b/scripts/devcontainer-post-start.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +set -u + +expected_home="/home/developer" + +warn() { + printf 'devcontainer warning: %s\n' "$*" >&2 +} + +if [ "$(id -un)" != "developer" ]; then + warn "running as $(id -un), expected developer" +fi + +if [ "${HOME:-}" != "$expected_home" ]; then + warn "HOME is ${HOME:-unset}, expected $expected_home" +fi + +if [ "${XDG_CONFIG_HOME:-}" != "$expected_home/.config" ]; then + warn "XDG_CONFIG_HOME is ${XDG_CONFIG_HOME:-unset}, expected $expected_home/.config" +fi + +if [ "${XDG_DATA_HOME:-}" != "$expected_home/.local/share" ]; then + warn "XDG_DATA_HOME is ${XDG_DATA_HOME:-unset}, expected $expected_home/.local/share" +fi + +if ! command -v opencode >/dev/null 2>&1; then + warn "opencode is not available in PATH" +fi + +if command -v git >/dev/null 2>&1; then + git config --global --add safe.directory /home/developer/workspaces/fdtd >/dev/null 2>&1 || \ + warn "could not add workspace to git safe.directory" +fi + +if [ ! -d "$expected_home/.config/opencode" ]; then + warn "$expected_home/.config/opencode is not mounted" +fi + +if [ ! -d "$expected_home/.local/share/opencode" ]; then + warn "$expected_home/.local/share/opencode is not mounted" +fi + +if [ ! -f "$expected_home/.local/share/opencode/auth.json" ]; then + warn "OpenCode provider auth is missing at $expected_home/.local/share/opencode/auth.json" + warn "run opencode /connect once on the host or in this container if providers are unavailable" +fi + +exit 0 diff --git a/simulations/SEMBA_FDTD_temp.log b/simulations/SEMBA_FDTD_temp.log new file mode 100644 index 00000000..9c32d64c --- /dev/null +++ b/simulations/SEMBA_FDTD_temp.log @@ -0,0 +1,21 @@ +========================= +semba-fdtd +========================= +__________________________________________ +Compilation date: Jul 7 2026 10:24:21 +Compiler Id: GNU 15.2.0 +git commit: UNKNOWN +cmake build type: Release +cmake compilation flags: -fopenmp -ffree-form -ffree-line-length-none -fdec -fallow-argument-mismatch -Ofast +__________________________________________ +__________________________________________ +All rights reserved by the University of Granada (Spain) +Contact person: Luis D. Angulo + +__________________________________________ +Compiled WITH .h5 HDF support +Compiled WITH MTLN support +Compiled WITH SMBJSON support +__________________________________________ +Launched on 07/07/2026 10:26 +( 1/ 1) ERROR: The input file was not found semba-fdtd.nfde diff --git a/test/pyWrapper/utils.py b/test/pyWrapper/utils.py index 5b2612cf..d454745a 100644 --- a/test/pyWrapper/utils.py +++ b/test/pyWrapper/utils.py @@ -1,4 +1,5 @@ from src_pyWrapper.pyWrapper import * +import os import shutil import glob import re @@ -32,6 +33,23 @@ reason="MPI is not available", ) +def _default_semba_exe(): + exe_name = 'semba-fdtd.exe' if platform == "win32" else 'semba-fdtd' + build_dirs = ['build'] + + if os.getenv("SEMBA_FDTD_ENABLE_MPI") == "ON": + build_dirs.extend(['build-rls-mpi', 'build-dbg-mpi']) + else: + build_dirs.extend(['build-rls', 'build-dbg']) + + for build_dir in build_dirs: + candidate = os.path.join(os.getcwd(), build_dir, 'bin', exe_name) + if os.path.isfile(candidate): + return candidate + + return os.path.join(os.getcwd(), 'build', 'bin', exe_name) + + # Use of absolute path to avoid conflicts when changing directory. if platform == "linux": SEMBA_EXE = os.path.join(os.getcwd(), 'build', 'bin', 'semba-fdtd') @@ -212,4 +230,4 @@ def corrcoef_on_common_time(t_ref, y_ref, t_cmp, y_cmp): t_common = t_ref[mask] y_ref_common = y_ref[mask] y_cmp_interp = np.interp(t_common, t_cmp, y_cmp) - return np.corrcoef(y_ref_common, y_cmp_interp)[0, 1] \ No newline at end of file + return np.corrcoef(y_ref_common, y_cmp_interp)[0, 1] From 33cc2288dfd19f151d2232b89588a834b463f0c1 Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Mon, 13 Jul 2026 06:35:49 +0000 Subject: [PATCH 04/38] FDTD | ENV | #409 | Include specific fortran skills --- .../fortran-module-readability/SKILL.md | 203 ++++++++++++++++++ .../fortran-performance-awareness/SKILL.md | 169 +++++++++++++++ .../fortran-refactor-cleanliness/SKILL.md | 179 +++++++++++++++ 3 files changed, 551 insertions(+) create mode 100644 .opencode/skills/fortran-module-readability/SKILL.md create mode 100644 .opencode/skills/fortran-performance-awareness/SKILL.md create mode 100644 .opencode/skills/fortran-refactor-cleanliness/SKILL.md diff --git a/.opencode/skills/fortran-module-readability/SKILL.md b/.opencode/skills/fortran-module-readability/SKILL.md new file mode 100644 index 00000000..164ca78d --- /dev/null +++ b/.opencode/skills/fortran-module-readability/SKILL.md @@ -0,0 +1,203 @@ +--- +name: fortran-module-readability +description: Use whenever creating, splitting, moving, or substantially restructuring Fortran modules in semba-fdtd. This is the right skill for .F90 module boundaries, public/private APIs, use/import lists, derived-type ownership, procedure ordering, CMake source placement, and naming. Prefer this skill for module-level design questions even if the user only says "clean up this module" or "add a new type"; combine it with fortran-performance-awareness when the module contains hot FDTD kernels, MPI/OpenMP paths, or large array operations. +--- + +# Fortran Module Readability + +Use this skill when writing a new Fortran module, moving code across modules, adding exported types or procedures, or substantially restructuring an existing module in this repository. +The goal is a module that has one clear purpose, a small public surface, readable internal organization, and dependencies that fit the existing `semba-fdtd` library layering. +For modules containing hot kernels, large array operations, MPI/OpenMP code, or repeated allocation paths, also use `fortran-performance-awareness`. + +## First Pass + +Before changing a module boundary, build enough context to avoid accidental API or dependency damage: + +1. Identify the module's current responsibility, public exports, and callers. +2. Check nearby modules in the same source directory for established naming, import, and visibility style. +3. Search for public type, component, procedure, and module-name references before renaming or moving anything. +4. Note optional preprocessor branches that may expose different dependencies from the local build. +5. Decide whether the task is module design, ordinary refactoring, performance work, or a mix; use the narrowest applicable change. + +## Core Principles + +Write modules as explicit boundaries: + +- Give each module one primary responsibility that can be stated in one sentence. +- Keep public APIs small, intentional, and stable. +- Prefer clear domain names over generic implementation names. +- Separate data definitions, parsing/conversion, numerical operations, and output concerns unless they are naturally part of the same abstraction. +- Avoid introducing new global state; pass data through arguments or owned derived-type components when practical. +- Keep changes local unless a broader module boundary change is explicitly requested. + +## Module Skeleton + +Prefer this structure for new or cleaned-up modules: + +```fortran +module example_module + use dependency_module, only: dependency_type, dependency_routine + + implicit none + + private + + + public :: example_type + public :: init_example + + + type :: example_type + ! Components here. + end type example_type + +contains + + subroutine init_example(example) + type(example_type), intent(out) :: example + + + end subroutine init_example + +end module example_module +``` + +Use existing local formatting when editing established files, but keep the same conceptual order when it does not create churn: + +1. `module` statement. +2. `use` statements. +3. `implicit none`. +4. default visibility, usually `private`. +5. explicit `public` declarations. +6. parameters, interfaces, and derived types. +7. `contains` procedures. +8. `end module module_name`. + +## Public API Design + +Default to a private module and explicit exports: + +- Use `private` near the top of the module unless the existing module style makes that too disruptive. +- Export only the types, constants, interfaces, and procedures intended for callers. +- Keep helper procedures private by default. +- Avoid exporting implementation details just because tests or nearby code can reach them; prefer testing through the real public behaviour. +- Avoid renaming public procedures or derived-type components that are already used broadly unless the task explicitly includes API cleanup. +- Preserve names that map to input formats, output labels, physics terms, or legacy NFDE/JSON concepts unless the user approves a compatibility-impacting change. + +Good public APIs read like a short capability list. If the public list is long, look for mixed responsibilities before adding more exports. + +When changing an existing public API, distinguish between three cases: + +- Internal-only exports with few callers can often be cleaned up in one small change after checking references. +- Input/output-facing names, serialized labels, and physics terms are compatibility-sensitive; preserve them unless the user asked for that change. +- Widely used interfaces should be changed only when the replacement makes callers clearer enough to justify the churn. + +## Dependency Hygiene + +Keep imports narrow and dependency direction clear: + +- Prefer `use module_name, only: symbol_a, symbol_b` for new modules and touched imports. +- Do not introduce circular dependencies. +- Respect the existing CMake library layering: lower-level type/report/parser/component code should not depend on higher-level solver, launcher, or output orchestration code. +- Keep optional-feature boundaries intact for `CompileWithMPI`, `CompileWithMTLN`, `CompileWithSMBJSON`, `CompileWithNewOutputModule`, `CompileWithReal8`, and similar preprocessor paths. +- Avoid a shared utility module unless there is a concrete repeated pattern across multiple callers. +- Prefer passing dependencies as arguments over reaching into unrelated modules for mutable state. + +When a new module needs symbols from several distant layers, pause and check whether the responsibility belongs somewhere else. + +## Derived Types + +Use derived types to express ownership and domain concepts clearly: + +- Name types after the domain object they represent, not just storage shape. +- Keep components cohesive; avoid derived types that become bags of unrelated solver, parser, and output state. +- Make allocation ownership obvious from initialization and finalization routines. +- Prefer type-bound procedures only when they clarify ownership or behaviour; do not add them mechanically. +- Keep pointer components only when aliasing or association is required. Prefer existing project patterns over changing ownership semantics. +- Document non-obvious invariants such as array bounds, coordinate ordering, field staggering, or MPI-local versus global indexing. + +If a derived type needs many setup steps, provide one clear initializer instead of requiring callers to know internal ordering. + +## Procedure Organization + +Write procedures that expose intent without hiding numerical behaviour: + +- Put the public, high-level procedures first when that matches the reading flow. +- Keep private helpers close to the public procedure that uses them when they are local to that concept. +- Use explicit `intent(in)`, `intent(out)`, or `intent(inout)` for arguments. +- Avoid long argument lists when a cohesive derived type already exists, but do not introduce a derived type just to reduce line length. +- Extract helpers for named concepts, not for every small block. +- Preserve loop order, update ordering, and array shape semantics in numerical code. +- Keep error handling and validation near the boundary where invalid data enters the module. + +A good procedure name should let a caller understand what happens without reading the body. A good body should still make the numerical or data-flow steps visible. + +## Naming And Comments + +Prefer names that match the repository's domain language: + +- Use established field, material, geometry, parser, output, MTLN, and boundary-condition terminology. +- Avoid overly broad names such as `manager`, `handler`, `processor`, or `data` unless that is already the local convention. +- Use consistent prefixes only when they help group related procedures or avoid ambiguity. +- Name boolean procedures and variables as predicates when practical, for example `is_valid`, `has_source`, or `uses_mpi`. +- Add comments for surprising constraints, physical assumptions, indexing conventions, preprocessor requirements, or file-format compatibility. +- Do not add comments that restate the code line-by-line. + +## File And Build Integration + +When adding a module: + +1. Place the file in the directory matching its layer and responsibility. +2. Add it to the correct CMake target or source list without changing unrelated target boundaries. +3. Confirm optional-feature guards still compile for relevant configurations. +4. Search for similarly named modules before creating a new one. +5. Prefer a small module over modifying a broad catch-all module, but do not fragment one concept across many files. + +When moving code between existing modules, update CMake only if the file list or target ownership changes. Avoid moving a source file into a higher-level library just to access a dependency; that often signals the responsibility belongs elsewhere. + +## Modularity Guardrails + +Avoid these patterns unless there is an explicit reason: + +- A module that mixes parsing, solver state updates, and output formatting. +- A new dependency from `src_conformal`, `src_json_parser`, `src_mtln`, or lower-level type code into `src_main_pub` orchestration code. +- A public helper module created for one caller. +- A module-level mutable variable used as hidden communication between procedures. +- A generic abstraction that erases important electromagnetic, indexing, or file-format meaning. +- A rewrite from procedural module style to object-oriented style just for style consistency. + +## Review Checklist + +Before finishing a new or restructured module, check: + +- The module purpose is clear from its name and public API. +- `implicit none` is present. +- Visibility is explicit, preferably `private` by default. +- Public exports are minimal and intentional. +- Imports use `only:` where practical. +- The module sits in the correct source directory and CMake layer. +- Derived types have clear ownership and initialization rules. +- Procedures have explicit argument intents. +- Numerical order, array bounds, precision kinds, and preprocessor branches are preserved. +- Comments explain constraints or intent, not obvious syntax. +- The module can be tested through public behaviour. + +## Verification + +For module-writing changes, verify with the narrowest practical command first: + +```bash +cmake --build build -j +``` + +When the change affects parser, output, MTLN, or solver behaviour, run the corresponding focused tests when available. If a build or test cannot be run because the local environment is not configured, state that clearly. + +## Final Response Expectations + +When reporting module changes, include: + +- The module files changed or added. +- The public API shape introduced or modified. +- The dependency or CMake integration point touched. +- Whether behaviour was intended to change. +- The build or tests run, including any skipped verification. diff --git a/.opencode/skills/fortran-performance-awareness/SKILL.md b/.opencode/skills/fortran-performance-awareness/SKILL.md new file mode 100644 index 00000000..ccca0e87 --- /dev/null +++ b/.opencode/skills/fortran-performance-awareness/SKILL.md @@ -0,0 +1,169 @@ +--- +name: fortran-performance-awareness +description: Use whenever writing, reviewing, diagnosing, or refactoring performance-sensitive Fortran in semba-fdtd. Trigger for FDTD time-step loops, field/material/boundary/wire/MTLN updates, array access patterns, allocation or temporary-array concerns, MPI/OpenMP communication, I/O cadence, profiling results, or any user request about speed, scaling, memory use, or "making this faster." Use this even for small-looking cleanups inside numerical kernels because preserving update order and array semantics matters more than cosmetic refactoring. +--- + +# Fortran Performance Awareness + +Use this skill when working on performance-sensitive Fortran code in this repository, including review and diagnosis tasks where no code may be edited. +The goal is efficient code that preserves numerical correctness, keeps the physics readable, and avoids premature or unmeasured rewrites. + +## First Pass + +Start by locating the performance risk before proposing changes: + +1. Determine whether the code is in a repeated time-step path, setup path, output path, parser path, or test-only path. +2. Identify loop bounds, array ranks, lower bounds, halo regions, and any OpenMP or MPI ownership assumptions. +3. Look for obvious repeated costs such as allocation, I/O, string formatting, polymorphic dispatch, map lookups, or large temporary arrays. +4. Separate proven bottlenecks from plausible risks. A structural cleanup can be useful, but do not report it as a measured speedup without measurement. +5. If the task is mostly module/API restructuring, also use `fortran-module-readability`; if it is a broad cleanup, also use `fortran-refactor-cleanliness`. + +## Core Principles + +Optimize deliberately: + +- Preserve numerical behaviour unless the task explicitly asks for a behaviour change. +- Prefer simple, predictable hot loops over clever abstractions. +- Keep performance-sensitive code readable enough to audit for physics and indexing correctness. +- Optimize the actual bottleneck when measurements or code structure make it clear. +- Avoid broad rewrites when a local change removes the cost. +- Treat MPI/OpenMP synchronization, allocation, and I/O as explicit performance costs. + +## Hot Path Priorities + +Pay special attention to code inside time-step loops, field-update kernels, material updates, boundary-condition application, MPI exchange paths, and output sampling. + +Prefer code that: + +- Avoids allocation and deallocation inside repeated update loops. +- Avoids repeated string operations, file operations, type conversions, and lookups in numerical kernels. +- Keeps loop bodies small and branch structure understandable. +- Reuses precomputed constants when they are truly invariant over the loop. +- Avoids unnecessary temporary arrays, especially large field-sized temporaries. +- Keeps I/O cadence intentional and outside kernels when possible. +- Keeps synchronization points minimal and tied to actual data dependencies. + +When code is not on a hot path, avoid adding complexity for hypothetical speed. A parser or one-time setup routine can often favor clarity unless it allocates field-sized data repeatedly or dominates large-case startup. + +## FDTD-Specific Guardrails + +Treat update order as part of correctness: + +- Do not reorder electric and magnetic field updates without understanding the time-stepping scheme. +- Do not reorder boundary-condition, material, wire, MTLN, source, or observation operations casually. +- Preserve Yee-grid staggering, coordinate indexing, lower bounds, and halo assumptions. +- Preserve dispersive and anisotropic material update sequencing. +- Preserve CPML, Mur, MPI halo exchange, and far-field sampling ordering. +- Treat output labels, sampling cadence, and serialized array layout as observable behaviour. + +When an optimization touches these areas, verify with tests or a representative case whenever feasible. + +## Fortran Efficiency Guidelines + +Avoid accidental costs common in Fortran: + +- Prefer contiguous memory access patterns in hot loops. +- Be careful with array slices passed to procedures; non-contiguous slices can create temporaries. +- Avoid whole-array expressions on large arrays when they obscure allocation or temporary creation in hot paths. +- Use explicit interfaces and argument `intent` so compilers can reason about calls. +- Avoid unnecessary `pointer` aliasing in numerical kernels. +- Prefer `allocatable` for owned storage in new code, but do not change existing pointer ownership semantics just for style. +- Preserve established kind choices such as `RKIND`, `RKIND_tiempo`, `SINGLE`, and integer kinds unless precision or portability is the task. +- Avoid converting scalar helper functions into calls inside deeply nested loops unless the compiler can inline them or the readability benefit is worth the cost. +- Keep frequently used scalar values local when that avoids repeated component dereferences in hot loops. +- Be cautious with assumed-shape dummy arguments and array expressions in helper procedures called from kernels; check whether they can introduce copying or inhibit compiler optimization. +- Keep data layout and loop nesting aligned with Fortran column-major storage when this does not conflict with stencil dependencies or established code style. + +Do not make code less obviously correct for a theoretical speedup. If an optimization relies on a non-obvious compiler or memory-layout assumption, document it briefly. + +## Loop And Array Changes + +Before changing loops over field arrays: + +1. Identify the array dimensions, lower bounds, and memory layout. +2. Check whether loop order is chosen for cache locality, stencil dependencies, MPI halos, or readability. +3. Confirm whether OpenMP directives, reductions, or private variables depend on the current structure. +4. Preserve boundary ranges and off-by-one behaviour exactly unless fixing a known bug. +5. Compare results after the change when feasible. + +Avoid combining loop-order changes with unrelated cleanup. They should be reviewable as performance-sensitive changes. + +When changing a loop for locality, vectorization, or OpenMP scheduling, state the intended performance property in the code review summary. This helps reviewers distinguish deliberate numerical-kernel work from incidental formatting. + +## Parallel Code + +For MPI and OpenMP paths: + +- Keep data-sharing attributes explicit and correct. +- Preserve reductions and their numerical implications. +- Avoid moving MPI communication across computation phases unless dependencies are fully understood. +- Avoid adding barriers, critical sections, or atomics unless they are required for correctness. +- Watch for false sharing when introducing per-thread scratch data. +- Keep thread-local scratch allocation outside repeated parallel regions when practical. +- Preserve deterministic output ordering where the code currently guarantees it. + +Parallel performance changes must not weaken correctness under configurations that are not active in the local build. + +## Allocation And Ownership + +Allocation changes are performance and correctness changes: + +- Allocate once at setup time when the size is known and reused across time steps. +- Deallocate at clear ownership boundaries. +- Avoid hidden reallocation from assignment to allocatable arrays in hot paths. +- Keep scratch arrays local only when their size is small or the routine is not hot. +- Avoid module-level scratch state unless there is a clear ownership and thread-safety story. +- Preserve pointer association and aliasing semantics when editing legacy structures. + +## Readability Balance + +Efficient code should still be maintainable: + +- Keep domain names visible in formulas and update steps. +- Prefer a clear local scalar or named coefficient over repeated dense expressions. +- Avoid abstractions that hide stencil shape, update ordering, or boundary handling. +- Add short comments for non-obvious performance constraints such as loop order, contiguous assumptions, or synchronization placement. +- Do not add comments that simply say code is faster. + +## Measurement And Verification + +Use the narrowest practical verification first: + +```bash +cmake --build build -j +``` + +Then run targeted tests for the touched area when available. For performance-focused changes, also compare a representative case runtime when practical, ideally with the same input, build type, MPI rank count, thread count, and output cadence. + +When reporting results, distinguish between: + +- Measured speedup or reduced runtime. +- Structural improvement likely to reduce overhead, such as removing allocation from a loop. +- Readability-neutral cleanup that only prepares for future optimization. + +Do not claim a performance improvement as measured unless it was actually measured. + +If measurement is not practical, report the change as a structural improvement, for example "moves allocation out of the time-step loop" or "preserves loop order while reducing repeated component lookups." + +## Review Checklist + +Before finishing performance-sensitive Fortran work, check: + +- Numerical behaviour is intended to remain unchanged, or the intended change is explicit. +- No unnecessary allocation, deallocation, I/O, string work, or large temporaries were added to hot paths. +- Array access and loop order are deliberate and preserve existing dependencies. +- MPI/OpenMP synchronization and data-sharing remain correct. +- Optional preprocessor branches remain valid. +- Public APIs were not expanded for performance helpers that only have one caller. +- Any non-obvious performance constraint is documented briefly. +- Verification or measurement is reported accurately. + +## Final Response Expectations + +When reporting performance-related changes, include: + +- The files and hot paths touched. +- The specific overhead avoided or performance property preserved. +- Whether behaviour was intended to change. +- The build, tests, or measurements run. +- Any performance claims that are unmeasured and should be treated as expectations rather than results. diff --git a/.opencode/skills/fortran-refactor-cleanliness/SKILL.md b/.opencode/skills/fortran-refactor-cleanliness/SKILL.md new file mode 100644 index 00000000..8b69cc48 --- /dev/null +++ b/.opencode/skills/fortran-refactor-cleanliness/SKILL.md @@ -0,0 +1,179 @@ +--- +name: fortran-refactor-cleanliness +description: Use whenever cleaning up, simplifying, renaming, reorganizing, or behaviour-preservingly refactoring Fortran FDTD code in semba-fdtd. Trigger for .F90 modules, solver loops, parser code, output code, CMake Fortran target changes, tests, dead-code cleanup, import cleanup, naming cleanup, and readability-only edits. Use this even when the user says "just tidy this" or "make it easier to read"; combine with fortran-performance-awareness for hot loops and with fortran-module-readability for module API or boundary changes. +--- + +# Fortran Refactor Cleanliness + +Use this skill when refactoring this repository's Fortran code, especially when the intended outcome is easier reading or maintenance rather than new behaviour. +The goal is cleaner, more readable code without changing numerical behaviour unless the user explicitly asks for a behavioural fix. +For performance-sensitive refactors in hot loops, MPI/OpenMP paths, allocation-heavy code, or numerical kernels, also use `fortran-performance-awareness`. + +## First Pass + +Before editing, classify the refactor so the diff stays reviewable: + +1. Name the single readability problem being fixed, such as duplicated local logic, unclear branching, misleading names, broad imports, or tangled setup steps. +2. Check whether the code is a hot numerical path, public module API, parser/output compatibility path, or optional-feature branch. +3. Search for callers before renaming procedures, types, components, public exports, files, or CMake source entries. +4. Decide the smallest behaviour-preserving change that solves the readability problem. +5. Keep feature work, bug fixes, formatting churn, and broad style normalization out of the same patch unless the user explicitly asked for them. + +## Project Context + +This project is `semba-fdtd`, a Finite-Difference Time-Domain electromagnetic solver written primarily in Fortran. +It contains legacy numerical kernels, newer typed modules, conditional compilation, MPI/OpenMP paths, optional HDF5 output, SMBJSON parsing, and MTLN/SPICE coupling. + +Key areas: + +- `src_main_pub/`: core solver, preprocessing, postprocessing, time stepping, geometry, main types. +- `src_json_parser/`: `.fdtd.json` parser and conversion helpers. +- `src_output/`: probe, VTK, XDMF, HDF5, and output utility code. +- `src_mtln/`: multiconductor transmission-line solver and ngspice integration. +- `src_conformal/`: conformal mapping and staircase reduction. +- `src_wires_pub/`: wire and thin-wire models. +- `test/`: Fortran/C++ unit tests and Python integration tests. + +The build is layered through CMake static libraries. +Respect the existing dependency direction and avoid introducing upward dependencies between lower-level libraries and higher-level solver/output code. + +## Refactoring Priorities + +Prefer small, behaviour-preserving changes: + +- Improve names when the domain meaning is clear from nearby code. +- Reduce duplicated local logic when a helper makes the numerical intent easier to read. +- Clarify long conditionals, `select case` blocks, and repeated string/coordinate formatting. +- Add `only:` to `use` statements when touching imports and when it does not create excessive churn. +- Tighten visibility with `private` and explicit `public` lists when working in already-structured modules. +- Add or improve `intent` declarations where missing and obvious. +- Replace magic literals only when their meaning is certain and the new name is local or already established. +- Remove dead local variables only after checking preprocessor branches and nearby compile options. +- Improve CMake source organization only when it directly follows from a file move, new module, or target-boundary cleanup. + +Avoid broad rewrites: + +- Do not redesign modules, data ownership, or library boundaries as part of a readability task. +- Do not change physics formulas, update ordering, time-step sequencing, boundary semantics, MPI exchange order, or output formats unless explicitly requested. +- Do not rename domain terms with historical or input-file significance without asking. +- Do not split every long routine mechanically; extract only natural concepts with clear names. +- Do not introduce compatibility shims or abstraction layers unless there is a concrete caller or persisted-data need. +- Do not normalize formatting across an entire file when the functional refactor touches only a small region; formatting-only churn hides semantic review. + +## Fortran-Specific Guardrails + +Treat numerical and memory semantics as part of behaviour: + +- Preserve `implicit none`. +- Preserve `kind` choices such as `RKIND`, `RKIND_tiempo`, `SINGLE`, and existing integer kinds unless the task is specifically about precision or portability. +- Preserve array rank, shape, lower bounds, allocation ownership, pointer association, and `contiguous` assumptions. +- Be careful when changing `pointer` to `allocatable` or vice versa; this can alter aliasing and ownership. +- Do not reorder loops over field arrays unless there is a measured performance or correctness reason. +- Preserve OpenMP and MPI assumptions around shared data, halo exchanges, reductions, and output ordering. +- Keep preprocessor branches such as `CompileWithMPI`, `CompileWithMTLN`, `CompileWithSMBJSON`, `CompileWithNewOutputModule`, and `CompileWithReal8` valid even if the local build uses only one configuration. +- Preserve file formats, exact labels, and serialized names used by JSON, VTK, XDMF, HDF5, probe `.dat` files, or legacy `.fdtd` inputs. + +## Workflow + +Before editing: + +1. Read the target module and enough neighbouring code to understand ownership and callers. +2. Search for procedure/type/module references before changing names, signatures, public exports, or file-level interfaces. +3. Identify relevant compile flags around the code, especially `#ifdef` blocks. +4. Choose one coherent refactor with a small reviewable diff. + +During editing: + +1. Keep the public interface stable unless changing it is the point of the task. +2. Prefer local changes over new global helpers. +3. Preserve surrounding formatting style unless the formatting itself harms readability. +4. Add comments only to explain non-obvious domain constraints, numerical assumptions, or compiler/preprocessor constraints. +5. Do not combine cleanup with unrelated feature work. +6. Preserve exact strings and ordering in user-visible output unless the task is explicitly about changing output. + +After editing: + +1. Build or at least compile the affected target when feasible. +2. Run the most targeted tests available. +3. State that no behavioural change is intended, or describe the exact intended behaviour change if there is one. +4. Mention any build/test coverage gaps caused by unavailable dependencies or disabled options. +5. Re-read the diff from a reviewer perspective and remove incidental churn that does not support the stated refactor. + +## Readability Checklist + +Use this checklist before finishing a refactor: + +- The code reads in the same order as the operation it performs. +- Names reflect domain meaning, not just type or storage. +- Conditionals have clear cases and meaningful default/error handling. +- Public module surface is no larger than necessary. +- Imports are understandable and preferably constrained with `only:` where practical. +- Local variables are declared near the routine where they are used and are not misleadingly reused. +- Comments explain why the code exists or why a surprising choice is necessary. +- The diff is small enough to review for numerical equivalence. +- The final response names the intended behaviour-preserving nature of the change. + +## Testing And Verification + +Useful build commands: + +```bash +cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug +cmake --build build -j +``` + +Unit tests: + +```bash +./build/bin/fdtd_tests +``` + +Python integration tests: + +```bash +pytest test/ --durations=20 +``` + +Marker-specific tests: + +```bash +pytest test/ -m mtln +pytest test/ -m hdf +pytest test/ -m mpi +``` + +Run the narrowest relevant command first. +For parser changes, prefer `test/smbjson` tests. +For output changes, prefer `test/output` and VTK/XDMF tests. +For MTLN changes, prefer `test/mtln` tests. +For solver loop changes, build and run the broad unit suite if feasible. + +## Good Refactor Examples + +Good changes: + +- Replace repeated coordinate string assembly in one module with a local helper that preserves exact output text. +- Extract a named local predicate from a long conditional when it is used multiple times in the same routine. +- Convert an unclear `if/elseif` chain to `select case` without changing defaults. +- Add `intent(in)`, `intent(out)`, or `intent(inout)` to arguments where usage is unambiguous. +- Split a long parser routine into parse, validate, and convert steps when those steps already exist conceptually. + +Risky changes that need explicit justification: + +- Changing loop order over `Ex`, `Ey`, `Ez`, `Hx`, `Hy`, or `Hz` arrays. +- Replacing pointer arrays with allocatables. +- Changing `real` or `integer` kinds. +- Renaming JSON labels, probe labels, field prefixes, or legacy NFDE terms. +- Removing preprocessor branches that are not active in the current build. +- Introducing generic abstractions across solver, parser, output, and MTLN code without a concrete repeated pattern. + +## Final Response Expectations + +When reporting a completed refactor, include: + +- The files changed. +- The readability improvement made. +- Whether behaviour was intended to change. +- The build or tests run, including failures or skipped verification. + +Keep the response concise and factual. From b6dc8c2cf9989d8ad9e38b7dfe9d33b7fae90215 Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Mon, 13 Jul 2026 07:23:02 +0000 Subject: [PATCH 05/38] FDTD | ENV | #409 | Paraview included on dev container tool --- Dockerfile | 1 + doc/docker.md | 14 ++++++++++++-- docker-compose.yml | 4 ++++ scripts/devcontainer-post-start.sh | 8 ++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 66316a46..a448b53b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -83,6 +83,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ openssh-client \ nodejs \ npm \ + paraview \ sudo \ && rm -rf /var/lib/apt/lists/* diff --git a/doc/docker.md b/doc/docker.md index 03baae93..03c0d44e 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -14,8 +14,8 @@ git submodule update --init --recursive | File | Description | |---|---| -| `Dockerfile` | Multi-stage build: `builder` (compilation + tests) and `runtime` (binary only) | -| `docker-compose.yml` | Services `solver` (run simulations) and `test` (build and test) | +| `Dockerfile` | Multi-stage build: `builder` (compilation + tests), `dev` (development container), and `runtime` (binary only) | +| `docker-compose.yml` | Services `solver` (run simulations), `dev` (development container), and `test` (build and test) | | `.dockerignore` | Excludes unnecessary files from the build context | --- @@ -29,6 +29,16 @@ docker compose build solver # runtime image for simulations `build` only constructs and saves the image to disk — it does not start any container. You only need to re-run it when the code changes. +### Development container tools + +The `dev` image target includes developer-only tools used from the dev container, including ParaView for inspecting generated VTK/XDMF/HDF5 outputs. ParaView is installed in the `dev-tools` stage only, so runtime and test images do not carry the extra GUI package dependencies. + +If `paraview` or `pvpython` is missing inside the dev container, rebuild the dev image: + +```bash +docker compose build dev +``` + ### Build arguments The build mode and optional features can be configured via `--build-arg`: diff --git a/docker-compose.yml b/docker-compose.yml index b456a9a0..a2db575f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,6 +35,10 @@ services: - type: bind source: ${HOME}/.config/opencode target: /home/developer/.config/opencode + - type: bind + source: ${HOME}/.agents + target: /home/developer/.agents + read_only: true - type: bind source: ${HOME}/.local/share/opencode target: /home/developer/.local/share/opencode diff --git a/scripts/devcontainer-post-start.sh b/scripts/devcontainer-post-start.sh index db494d5d..932985b5 100755 --- a/scripts/devcontainer-post-start.sh +++ b/scripts/devcontainer-post-start.sh @@ -27,6 +27,10 @@ if ! command -v opencode >/dev/null 2>&1; then warn "opencode is not available in PATH" fi +if ! command -v paraview >/dev/null 2>&1 && ! command -v pvpython >/dev/null 2>&1; then + warn "ParaView is not available in PATH; rebuild the dev container image" +fi + if command -v git >/dev/null 2>&1; then git config --global --add safe.directory /home/developer/workspaces/fdtd >/dev/null 2>&1 || \ warn "could not add workspace to git safe.directory" @@ -36,6 +40,10 @@ if [ ! -d "$expected_home/.config/opencode" ]; then warn "$expected_home/.config/opencode is not mounted" fi +if [ ! -d "$expected_home/.agents/skills" ]; then + warn "$expected_home/.agents/skills is not mounted" +fi + if [ ! -d "$expected_home/.local/share/opencode" ]; then warn "$expected_home/.local/share/opencode is not mounted" fi From 2070bacf256f301461e3373a8e628dee96acd2d8 Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Tue, 14 Jul 2026 12:13:21 +0000 Subject: [PATCH 06/38] FDTD | Tests | Fix probe output file units --- src_output/bulkProbeOutput.F90 | 2 +- src_output/frequencySliceProbeOutput.F90 | 2 +- src_output/movieProbeOutput.F90 | 2 +- src_output/pointProbeOutput.F90 | 5 ++--- test/output/test_output.F90 | 8 ++++---- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src_output/bulkProbeOutput.F90 b/src_output/bulkProbeOutput.F90 index d97626c8..9bede40b 100644 --- a/src_output/bulkProbeOutput.F90 +++ b/src_output/bulkProbeOutput.F90 @@ -163,7 +163,7 @@ subroutine flush_bulk_probe_output(this) return end if - open (unit=unit, file=this%filePathTime, status="old", action="write", position="append") + open (newunit=unit, file=this%filePathTime, status="old", action="write", position="append") do i = 1, this%nTime write (unit, fmt) this%timeStep(i), this%valueForTime(i) diff --git a/src_output/frequencySliceProbeOutput.F90 b/src_output/frequencySliceProbeOutput.F90 index 128c7598..784b2d7e 100644 --- a/src_output/frequencySliceProbeOutput.F90 +++ b/src_output/frequencySliceProbeOutput.F90 @@ -93,7 +93,7 @@ subroutine write_bin_file(this) type(frequency_slice_probe_output_t), intent(inout) :: this integer :: i, f, unit !We rewrite the binary as simulation continues - open (unit=unit, file=add_extension(this%filesPath, binaryExtension), & + open (newunit=unit, file=add_extension(this%filesPath, binaryExtension), & status='old', form='unformatted', action='write', access='stream') do f = 1, this%nFreq do i = 1, this%nPoints diff --git a/src_output/movieProbeOutput.F90 b/src_output/movieProbeOutput.F90 index b937eac2..6ffdee26 100644 --- a/src_output/movieProbeOutput.F90 +++ b/src_output/movieProbeOutput.F90 @@ -208,7 +208,7 @@ subroutine write_bin_file(this) type(movie_probe_output_t), intent(inout) :: this integer :: i, t, unit - open (unit=unit, file=add_extension(this%filesPath, binaryExtension), & + open (newunit=unit, file=add_extension(this%filesPath, binaryExtension), & status='old', form='unformatted', position='append', access='stream') do t = 1, this%nTime do i = 1, this%nPoints diff --git a/src_output/pointProbeOutput.F90 b/src_output/pointProbeOutput.F90 index 5dd4e815..5c3212c5 100644 --- a/src_output/pointProbeOutput.F90 +++ b/src_output/pointProbeOutput.F90 @@ -118,8 +118,7 @@ subroutine flush_time_domain(this) print *, "No data to write." return end if - - open (unit=unit, file=this%filePathTime, status="old", action="write", position="append") + open (newunit=unit, file=this%filePathTime, status="old", action="write", position="append") do i = 1, this%nTime write (unit, '(F12.6,1X,F12.6)') this%timeStep(i), this%valueForTime(i) @@ -142,7 +141,7 @@ subroutine flush_frequency_domain(this) print *, "No data to write." return end if - open (unit=unit, file=this%filePathFreq, status="replace", action="write") + open (newunit=unit, file=this%filePathFreq, status="replace", action="write") do i = 1, this%nFreq write (unit, '(F12.6,1X,F12.6,1X,F12.6)') this%frequencySlice(i), real(this%valueForFreq(i)), aimag(this%valueForFreq(i)) diff --git a/test/output/test_output.F90 b/test/output/test_output.F90 index 00ff2f87..a679a9b3 100644 --- a/test/output/test_output.F90 +++ b/test/output/test_output.F90 @@ -789,12 +789,12 @@ integer function test_flush_movie_probe() bind(c) result(err) !movieElectricXObservable outputs(2)%movieProbe%nTime = 1 outputs(2)%movieProbe%timeStep(1) = 0.5_RKIND_tiempo - outputs(2)%movieProbe%xValueForTime(1, :) = [0.1_RKIND, 0.2_RKIND, 0.3_RKIND, 0.4_RKIND] + outputs(2)%movieProbe%xValueForTime(1, :4) = [0.1_RKIND, 0.2_RKIND, 0.3_RKIND, 0.4_RKIND] !movieMagneticYObservable outputs(3)%movieProbe%nTime = 1 outputs(3)%movieProbe%timeStep(1) = 0.5_RKIND_tiempo - outputs(3)%movieProbe%yValueForTime(1, :) = [0.1_RKIND, 0.2_RKIND, 0.3_RKIND, 0.4_RKIND] + outputs(3)%movieProbe%yValueForTime(1, :4) = [0.1_RKIND, 0.2_RKIND, 0.3_RKIND, 0.4_RKIND] !--- Dummy second update --- !movieCurrentObservable @@ -807,12 +807,12 @@ integer function test_flush_movie_probe() bind(c) result(err) !movieElectricXObservable outputs(2)%movieProbe%nTime = 2 outputs(2)%movieProbe%timeStep(2) = 0.75_RKIND_tiempo - outputs(2)%movieProbe%xValueForTime(2, :) = [1.1_RKIND, 1.2_RKIND, 1.3_RKIND, 1.4_RKIND] + outputs(2)%movieProbe%xValueForTime(2, :4) = [1.1_RKIND, 1.2_RKIND, 1.3_RKIND, 1.4_RKIND] !movieMagneticYObservable outputs(3)%movieProbe%nTime = 2 outputs(3)%movieProbe%timeStep(2) = 0.75_RKIND_tiempo - outputs(3)%movieProbe%yValueForTime(2, :) = [1.1_RKIND, 1.2_RKIND, 1.3_RKIND, 1.4_RKIND] + outputs(3)%movieProbe%yValueForTime(2, :4) = [1.1_RKIND, 1.2_RKIND, 1.3_RKIND, 1.4_RKIND] call flush_outputs(dummysgg%tiempo, 1_SINGLE, dummyControl, fields, dummyBound, .false.) From 8a353dcdd4a15543d46931cc86d4bde977d94efa Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Tue, 14 Jul 2026 13:03:22 +0000 Subject: [PATCH 07/38] FDTD | ENV | #409 | simplify docker file --- Dockerfile | 137 ++++++++----------------- doc/docker.md | 243 ++++++++++----------------------------------- docker-compose.yml | 113 ++------------------- 3 files changed, 99 insertions(+), 394 deletions(-) diff --git a/Dockerfile b/Dockerfile index a448b53b..7cdb1c06 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1.7 -# ─── Base ───────────────────────────────────────────────────────────────────── -FROM ubuntu:26.04@sha256:b7f48194d4d8b763a478a621cdc81c27be222ba2206ca3ca6bc42b49685f3d9e AS base +# Keep shared build dependencies first so both environments reuse this layer. +FROM ubuntu:26.04@sha256:b7f48194d4d8b763a478a621cdc81c27be222ba2206ca3ca6bc42b49685f3d9e AS quality-base ENV DEBIAN_FRONTEND=noninteractive @@ -19,8 +19,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ python3 \ python3-pip \ python3-venv \ - gdb \ - gdbserver \ + paraview \ && locale-gen en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* @@ -28,50 +27,37 @@ ENV LANG=en_US.UTF-8 \ LANGUAGE=en_US:en \ LC_ALL=en_US.UTF-8 -# ─── Stage 1: Builder ───────────────────────────────────────────────────────── -FROM base AS builder - -WORKDIR /src -COPY . . - -# Build (MPI off by default; override at build time with --build-arg ENABLE_MPI=ON) -ARG ENABLE_MPI=OFF -ARG ENABLE_MTLN=ON -ARG BUILD_TYPE=Release -ARG ENABLE_TEST=OFF - -RUN cmake -S . -B build \ - -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ - -DSEMBA_FDTD_ENABLE_MPI=${ENABLE_MPI} \ - -DSEMBA_FDTD_ENABLE_HDF=ON \ - -DSEMBA_FDTD_ENABLE_MTLN=${ENABLE_MTLN} \ - -DSEMBA_FDTD_ENABLE_SMBJSON=ON \ - -DSEMBA_FDTD_ENABLE_TEST=${ENABLE_TEST} \ - && cmake --build build -j$(nproc) \ - && cp build/bin/semba-fdtd /tmp/semba-fdtd \ - && if [ "${BUILD_TYPE}" = "Release" ]; then strip /tmp/semba-fdtd; fi - -# ─── Stage 1b: Test Builder ─────────────────────────────────────────────────── -FROM builder AS test-builder - -RUN cmake -S . -B build \ - -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ - -DSEMBA_FDTD_ENABLE_MPI=${ENABLE_MPI} \ - -DSEMBA_FDTD_ENABLE_HDF=ON \ - -DSEMBA_FDTD_ENABLE_MTLN=${ENABLE_MTLN} \ - -DSEMBA_FDTD_ENABLE_SMBJSON=ON \ - -DSEMBA_FDTD_ENABLE_TEST=ON \ - && cmake --build build -j$(nproc) - -# Install Python test/wrapper dependencies only for images that run tests. -RUN python3 -m venv /opt/fdtd-venv \ - && /opt/fdtd-venv/bin/python -m pip install --upgrade pip \ - && /opt/fdtd-venv/bin/python -m pip install --no-cache-dir -r requirements.txt - -ENV PATH=/opt/fdtd-venv/bin:${PATH} - -# ─── Stage 2: Development Tools ──────────────────────────────────────────────── -FROM base AS dev-tools +ARG USERNAME=developer +ARG USER_UID=1000 +ARG USER_GID=1000 + +RUN set -eux; \ + existing_group="$(getent group ${USER_GID} | cut -d: -f1)"; \ + if [ -n "${existing_group}" ] && [ "${existing_group}" != "${USERNAME}" ] && ! getent group ${USERNAME} >/dev/null; then \ + groupmod -n ${USERNAME} ${existing_group}; \ + elif [ -z "${existing_group}" ]; then \ + groupadd --gid ${USER_GID} ${USERNAME}; \ + fi; \ + existing_user="$(getent passwd ${USER_UID} | cut -d: -f1)"; \ + if [ -n "${existing_user}" ] && [ "${existing_user}" != "${USERNAME}" ]; then \ + usermod -l ${USERNAME} -d /home/${USERNAME} -m ${existing_user}; \ + elif [ -z "${existing_user}" ]; then \ + useradd --uid ${USER_UID} --gid ${USER_GID} -m -s /bin/bash ${USERNAME}; \ + fi; \ + mkdir -p /home/${USERNAME}/workspaces/fdtd; \ + chown -R ${USER_UID}:${USER_GID} /home/${USERNAME}/workspaces + +# Minimal environment for compiling and running the project. +FROM quality-base AS quality + +ENV HOME=/home/${USERNAME} + +USER ${USERNAME} +WORKDIR /home/${USERNAME}/workspaces/fdtd + +# Full development environment. This target deliberately follows quality so its +# build reuses every compiler and ParaView layer. +FROM quality AS dev USER root @@ -83,7 +69,8 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ openssh-client \ nodejs \ npm \ - paraview \ + gdb \ + gdbserver \ sudo \ && rm -rf /var/lib/apt/lists/* @@ -93,56 +80,16 @@ RUN --mount=type=cache,target=/root/.npm \ RUN --mount=type=cache,target=/root/.cache/pip \ python3 -m pip install --break-system-packages fortls fprettify -# ─── Stage 2b: Development User ──────────────────────────────────────────────── -FROM dev-tools AS dev - -ARG USERNAME=developer -ARG USER_UID=1000 -ARG USER_GID=1000 - -ENV USERNAME=${USERNAME} \ - USER_UID=${USER_UID} \ - USER_GID=${USER_GID} - -RUN userdel --remove ubuntu 2>/dev/null || true \ - && groupdel ubuntu 2>/dev/null || true \ - && groupadd --gid ${USER_GID} ${USERNAME} \ - && useradd --uid ${USER_UID} --gid ${USER_GID} -m -s /bin/bash ${USERNAME} \ - && mkdir -p /home/${USERNAME}/.config \ - && mkdir -p /home/${USERNAME}/.ssh \ - && mkdir -p /home/${USERNAME}/.local/share/opencode \ +RUN mkdir -p /home/${USERNAME}/.config \ + /home/${USERNAME}/.ssh \ + /home/${USERNAME}/.local/share/opencode \ && chmod 700 /home/${USERNAME}/.ssh \ - && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.config \ - && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.ssh \ - && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.local \ + && chown -R ${USER_UID}:${USER_GID} /home/${USERNAME}/.config \ + /home/${USERNAME}/.ssh \ + /home/${USERNAME}/.local \ && usermod -aG sudo ${USERNAME} \ && echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/${USERNAME} \ && chmod 0440 /etc/sudoers.d/${USERNAME} USER ${USERNAME} WORKDIR /home/${USERNAME}/workspaces/fdtd - -# ─── Stage 3: Runtime ───────────────────────────────────────────────────────── -# Minimal image with only the shared libraries the binary needs at runtime. -# HDF5, LAPACK, BLAS, and ngspice are all statically linked on Linux. -# Keep OpenMPI runtime libraries available for MPI-enabled image builds. -FROM ubuntu:26.04@sha256:b7f48194d4d8b763a478a621cdc81c27be222ba2206ca3ca6bc42b49685f3d9e AS runtime - -ENV DEBIAN_FRONTEND=noninteractive - -RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ - --mount=type=cache,target=/var/lib/apt,sharing=locked \ - apt-get update && apt-get install -y \ - libgfortran5 \ - libgomp1 \ - libcurl4t64 \ - zlib1g \ - libaec0 \ - libsz2 \ - && rm -rf /var/lib/apt/lists/* - -COPY --from=builder /tmp/semba-fdtd /usr/local/bin/semba-fdtd - -WORKDIR /work - -ENTRYPOINT ["semba-fdtd", "-i"] diff --git a/doc/docker.md b/doc/docker.md index 03c0d44e..82eebeb0 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -1,255 +1,112 @@ # Docker -This document explains how to use Docker to build, test, and run semba-fdtd without installing any dependencies on your machine. +Docker provides two environments for working with semba-fdtd. +Both mount the repository at `/home/developer/workspaces/fdtd`, so build artefacts and simulation output are written to the host workspace. -## Prerequisite: initialize submodules +## Prerequisite -Submodules must be initialized on the host before building the image, as the build depends on them: +Initialise submodules before building an image: ```bash git submodule update --init --recursive ``` -## Included files +## Environments -| File | Description | -|---|---| -| `Dockerfile` | Multi-stage build: `builder` (compilation + tests), `dev` (development container), and `runtime` (binary only) | -| `docker-compose.yml` | Services `solver` (run simulations), `dev` (development container), and `test` (build and test) | -| `.dockerignore` | Excludes unnecessary files from the build context | - ---- - -## Building the images - -```bash -docker compose build test # image for tests -docker compose build solver # runtime image for simulations -``` - -`build` only constructs and saves the image to disk — it does not start any container. You only need to re-run it when the code changes. - -### Development container tools - -The `dev` image target includes developer-only tools used from the dev container, including ParaView for inspecting generated VTK/XDMF/HDF5 outputs. ParaView is installed in the `dev-tools` stage only, so runtime and test images do not carry the extra GUI package dependencies. - -If `paraview` or `pvpython` is missing inside the dev container, rebuild the dev image: - -```bash -docker compose build dev -``` - -### Build arguments - -The build mode and optional features can be configured via `--build-arg`: - -| Argument | Values | Default | +| Service | Purpose | Included tools | |---|---|---| -| `BUILD_TYPE` | `Release`, `Debug` | `Release` | -| `ENABLE_MPI` | `ON`, `OFF` | `OFF` | -| `ENABLE_MTLN` | `ON`, `OFF` | `ON` | +| `quality` | Compile, test, run examples, and inspect generated output | GNU C/C++/Fortran compilers, CMake, Ninja, MPI, HDF5, Python, and ParaView | +| `dev` | Interactive development and the Dev Container | Everything in `quality`, plus Git, GitHub CLI, SSH client, Node/npm, OpenCode, Fortran tools, and debuggers | -```bash -# Debug build -docker compose build --build-arg BUILD_TYPE=Debug test - -# Combining arguments -docker compose build \ - --build-arg BUILD_TYPE=Debug \ - --build-arg ENABLE_MPI=ON \ - --build-arg ENABLE_MTLN=OFF \ - test -``` +`quality` intentionally excludes developer-only tools. +Both environments include ParaView. -**Release** (`-Ofast`): optimized for speed, no debug information. -**Debug** (`-g -O0 -fcheck=all -fbacktrace`): no optimization, with runtime checks and backtraces on error — useful for diagnosing crashes. +## Build Images -### Base image digest - -The `Dockerfile` pins the base image using a SHA256 digest instead of just the tag: - -```dockerfile -FROM ubuntu:22.04@sha256:eb29ed27... AS builder -``` - -`ubuntu:22.04` is a mutable tag — Canonical can update it at any time. The digest identifies an exact, immutable image, so builds are fully reproducible regardless of when or where they run. - -The downside is that OS security patches are not picked up automatically. To update the digest: +Build `quality` first: ```bash -docker pull ubuntu:22.04 -docker inspect ubuntu:22.04 --format='{{index .RepoDigests 0}}' +docker compose build quality ``` -Then replace both occurrences of the digest in the `Dockerfile` (builder and runtime stages). - ---- - -## Running the tests +Build `dev` when its additional developer tools are required: ```bash -docker compose run --rm test +docker compose build dev ``` -This runs in sequence: -1. `build/bin/fdtd_tests` — unit tests (GoogleTest) -2. `python3 -m pytest test/ --durations=20` — Python integration tests - -To run only part of the test suite: +The `dev` target is built from `quality`. +Docker therefore reuses the compiler and ParaView layers when building `dev`. -```bash -# Unit tests only -docker compose run --rm test build/bin/fdtd_tests +The source tree is never copied into either image. +Editing source files, running examples, and creating build directories do not invalidate image layers or require an image rebuild. -# pytest with a specific marker -docker compose run --rm test python3 -m pytest test/ -m mtln -docker compose run --rm test python3 -m pytest test/ -m hdf -``` +## Compile With Quality -To open an interactive shell inside the container: +Run CMake presets from the mounted workspace: ```bash -docker compose run --rm --entrypoint bash test +docker compose run --rm quality cmake --preset rls +docker compose run --rm quality cmake --build --preset rls ``` ---- - -## Debugging a simulation - -This uses `gdbserver` inside the container and connects VSCode to it via the C/C++ extension. - -### Prerequisites - -- VSCode extension: **C/C++** (`ms-vscode.cpptools`) -- `gdb` installed on the host: - ```bash - sudo apt install gdb - ``` - -### Step 1 — Build the debug image +For an MPI build: ```bash -docker compose build debug +docker compose run --rm quality cmake --preset rls-mpi +docker compose run --rm quality cmake --build --preset rls-mpi ``` -### Step 2 — Extract the binary for local symbol loading +Build directories such as `build-rls/` and `build-rls-mpi/` remain in the repository after the container exits. -VSCode's GDB client needs a local copy of the binary to load debug symbols. Extract it from the image once after each build: +## Run Binaries And Examples -```bash -docker create --name tmp-debug fdtd-debug -docker cp tmp-debug:/src/build/bin/semba-fdtd ./build/bin/semba-fdtd -docker rm tmp-debug -``` - -### Step 3 — Start gdbserver - -Place your input files in `simulations/` and run: +Use the binary produced in the mounted build directory: ```bash -docker compose run --rm -p 2345:2345 debug case.fdtd.json +docker compose run --rm quality build-rls/bin/semba-fdtd -i path/to/case.fdtd.json ``` -The container starts and waits, printing something like: +Any output generated by the solver is available immediately in the corresponding host directory. -``` -Process /src/build/bin/semba-fdtd created; pid = 7 -Listening on port 2345 -``` - -### Step 4 — Connect from VSCode - -`.vscode/launch.json` is tracked in the repository and already contains the **Docker: attach gdbserver** configuration. - -Open the **Run and Debug** panel (`Ctrl+Shift+D`), select **Docker: attach gdbserver**, and press `F5`. VSCode connects, the simulation starts, and breakpoints work normally. - -```json -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Docker: attach gdbserver", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/bin/semba-fdtd", - "miDebuggerServerAddress": "localhost:2345", - "miDebuggerPath": "gdb", - "MIMode": "gdb", - "cwd": "${workspaceFolder}/simulations", - "sourceFileMap": { - "/src": "${workspaceFolder}" - }, - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - } - ] - } - ] -} -``` - -> The `sourceFileMap` maps `/src` (container path baked into debug info) to `${workspaceFolder}` on the host, so source files display correctly. - ---- - -## Running a simulation - -Place your input files in `simulations/` (created at the repo root) and run: +Open an interactive quality shell when repeatedly compiling or running examples: ```bash -docker compose run --rm solver case.fdtd.json +docker compose run --rm quality ``` -The `simulations/` directory is mounted at `/work` inside the container, which is the solver's working directory. - ---- - -## Managing images and containers - -### Where are images stored? - -Docker manages them internally (under `/var/lib/docker/` on Linux), not in a project folder. To inspect them: +ParaView is available in both environments: ```bash -docker images # list all saved images -docker image prune # remove unused images +docker compose run --rm quality paraview +docker compose run --rm dev paraview ``` -### Viewing active containers - -```bash -docker ps # currently running containers -docker ps -a # running + stopped containers -``` +## Run Tests -### Stopping and removing containers +Configure a build with tests, then run the required test commands: ```bash -docker stop # stops the container (does not remove it) -docker rm # removes it -docker rm -f # stop and remove in one step -docker container prune # remove all stopped containers +docker compose run --rm quality cmake --preset rls +docker compose run --rm quality cmake --build --preset rls +docker compose run --rm quality build-rls/bin/fdtd_tests ``` -The full ID is not required — the first 3–4 characters are enough: +Python integration tests require the project dependencies in a virtual environment: ```bash -docker stop a1b2 +docker compose run --rm quality python3 -m venv .venv +docker compose run --rm quality .venv/bin/python -m pip install -r requirements.txt +docker compose run --rm quality .venv/bin/python -m pytest test/ --durations=20 ``` -> With `--rm` (used in all `docker compose run` commands) the container is removed automatically when it finishes, so no manual cleanup is needed. - -### Does closing the terminal stop the container? +## Development Environment -- **Without `-d`** (normal mode, what we use): yes, closing the terminal stops the container because it is attached to it. -- **With `-d`** (detached mode): no, it keeps running in the background even after the terminal is closed. +Use `dev` for a full interactive shell: ```bash -# Run in the background -docker compose run -d --rm test +docker compose run --rm dev ``` -For tests it is better to omit `-d` so you can see the output in real time. +The Dev Container configuration also uses the `dev` service. +It mounts the host Git, SSH, GitHub CLI, and OpenCode configuration required by the development workflow. diff --git a/docker-compose.yml b/docker-compose.yml index a2db575f..365c0d27 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,23 +1,19 @@ services: - - # Run a simulation: docker compose run --rm solver path/to/case.fdtd.json - solver: + quality: build: context: . - target: runtime + target: quality volumes: - - ./simulations:/work - working_dir: /work + - type: bind + source: . + target: /home/developer/workspaces/fdtd + working_dir: /home/developer/workspaces/fdtd + tty: true dev: - image: fdtd-dev:latest build: context: . target: dev - environment: - HOME: /home/developer - XDG_CONFIG_HOME: /home/developer/.config - XDG_DATA_HOME: /home/developer/.local/share volumes: - type: bind source: . @@ -42,100 +38,5 @@ services: - type: bind source: ${HOME}/.local/share/opencode target: /home/developer/.local/share/opencode - - type: bind - source: ./build-dev - target: /home/developer/workspaces/fdtd/build-dev - - type: bind - source: ./build-dev-mpi - target: /home/developer/workspaces/fdtd/build-dev-mpi working_dir: /home/developer/workspaces/fdtd tty: true - # Debug a simulation with gdbserver (connect from VSCode with launch.json) - # Usage: docker compose run --rm -p 2345:2345 debug case.fdtd.json - debug: - build: - context: . - target: builder - args: - BUILD_TYPE: Debug - ENABLE_MTLN: "ON" - volumes: - - ./simulations:/work - ports: - - "2345:2345" - working_dir: /work - entrypoint: ["gdbserver", ":2345", "/src/build/bin/semba-fdtd", "-i"] - - # Build the project and run non-MPI tests - test: - build: - context: . - target: test-builder - args: - BUILD_TYPE: Release - ENABLE_MPI: "OFF" - ENABLE_MTLN: "ON" - environment: - SEMBA_FDTD_ENABLE_MPI: "OFF" - SEMBA_FDTD_ENABLE_MTLN: "ON" - SEMBA_FDTD_ENABLE_HDF: "ON" - SEMBA_EXE: /src/build/bin/semba-fdtd - working_dir: /src - command: > - sh -c "build/bin/fdtd_tests && python3 -m pytest test/ -m 'not mpi' --durations=20" - - # Build with MPI enabled and run MPI integration tests - test-mpi: - build: - context: . - target: test-builder - args: - BUILD_TYPE: Release - ENABLE_MPI: "ON" - ENABLE_MTLN: "ON" - environment: - SEMBA_FDTD_ENABLE_MPI: "ON" - SEMBA_FDTD_ENABLE_MTLN: "ON" - SEMBA_FDTD_ENABLE_HDF: "ON" - SEMBA_EXE: /src/build/bin/semba-fdtd - OMPI_ALLOW_RUN_AS_ROOT: "1" - OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: "1" - working_dir: /src - command: > - sh -c "build/bin/fdtd_tests && python3 -m pytest test/ -m mpi --durations=20" - - # Interactive shell in the non-MPI test image - shell: - build: - context: . - target: test-builder - args: - BUILD_TYPE: Debug - ENABLE_MPI: "OFF" - ENABLE_MTLN: "ON" - environment: - SEMBA_FDTD_ENABLE_MPI: "OFF" - SEMBA_FDTD_ENABLE_MTLN: "ON" - SEMBA_FDTD_ENABLE_HDF: "ON" - SEMBA_EXE: /src/build/bin/semba-fdtd - working_dir: /src - entrypoint: ["bash"] - - # Interactive shell in the MPI-enabled test image - shell-mpi: - build: - context: . - target: test-builder - args: - BUILD_TYPE: Debug - ENABLE_MPI: "ON" - ENABLE_MTLN: "ON" - environment: - SEMBA_FDTD_ENABLE_MPI: "ON" - SEMBA_FDTD_ENABLE_MTLN: "ON" - SEMBA_FDTD_ENABLE_HDF: "ON" - SEMBA_EXE: /src/build/bin/semba-fdtd - OMPI_ALLOW_RUN_AS_ROOT: "1" - OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: "1" - working_dir: /src - entrypoint: ["bash"] From f194b5eded9062af196abcc4462489ebe223803b Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Mon, 27 Jul 2026 12:53:40 +0000 Subject: [PATCH 08/38] FDTD | Fix | Import output allocation helpers --- .github/workflows/windows.yml | 5 ++++- src_mtln/dispersive.F90 | 3 +-- src_mtln/mtl.F90 | 2 +- src_mtln/mtl_bundle.F90 | 4 ++-- src_mtln/utils.F90 | 4 ++-- src_output/bulkProbeOutput.F90 | 1 + src_output/frequencySliceProbeOutput.F90 | 1 + src_output/movieProbeOutput.F90 | 2 ++ src_output/pointProbeOutput.F90 | 1 + src_output/volumicProbeUtils.F90 | 1 + src_output/wireProbeOutput.F90 | 1 + src_utils/directoryUtils.F90 | 4 ++-- test/mtln/test_math.F90 | 4 ++-- test/observation/test_observation_init.F90 | 9 +++++---- test/observation/test_observation_update.F90 | 9 +++++---- test/utils/fdetypes_tools.F90 | 1 + 16 files changed, 32 insertions(+), 20 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index dee927d4..dc4b4f37 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -25,6 +25,7 @@ jobs: mtln: ["ON", "OFF"] hdf: ["ON"] double-precision: ["ON", "OFF"] + new-output-module: ["ON"] fail-fast: false runs-on: ${{matrix.os}} @@ -65,13 +66,15 @@ jobs: -DSEMBA_FDTD_ENABLE_MPI=${{matrix.mpi}} \ -DSEMBA_FDTD_ENABLE_HDF=${{matrix.hdf}} \ -DSEMBA_FDTD_ENABLE_MTLN=${{matrix.mtln}} \ - -DSEMBA_FDTD_ENABLE_DOUBLE_PRECISION=${{matrix.double-precision}} + -DSEMBA_FDTD_ENABLE_DOUBLE_PRECISION=${{matrix.double-precision}} \ + -DSEMBA_FDTD_ENABLE_OUTPUT_MODULE=${{matrix.new-output-module}} cmake --build build -j - name: Run unit tests run: build/bin/fdtd_tests.exe - name: Run python tests (except codemodel) + if: matrix.new-output-module == 'OFF' env: SEMBA_FDTD_ENABLE_MPI: ${{ matrix.mpi }} SEMBA_FDTD_ENABLE_MTLN: ${{ matrix.mtln }} diff --git a/src_mtln/dispersive.F90 b/src_mtln/dispersive.F90 index 9aa790d5..a60b659f 100644 --- a/src_mtln/dispersive.F90 +++ b/src_mtln/dispersive.F90 @@ -1,5 +1,5 @@ module dispersive_m - use utils_m + use mtln_utils_m use rational_approximation_m use FDETYPES_m, only: RKIND, RKIND_TIEMPO implicit none @@ -288,4 +288,3 @@ subroutine addTransferImpedanceInConductors(this, conductor_1, conductor_2, conn end module dispersive_m - diff --git a/src_mtln/mtl.F90 b/src_mtln/mtl.F90 index d5792e25..ab504f15 100644 --- a/src_mtln/mtl.F90 +++ b/src_mtln/mtl.F90 @@ -1,7 +1,7 @@ module mtl_m ! use NFDETypes - use utils_m + use mtln_utils_m use dispersive_m, dispersive_lumped_t => lumped_t use mtln_types_m, only: segment_t, multipolar_expansion_t use multipolar_expansion_m, only: getCellCapacitanceOnBox, getCellInductanceOnBox diff --git a/src_mtln/mtl_bundle.F90 b/src_mtln/mtl_bundle.F90 index cce0acb6..76435567 100644 --- a/src_mtln/mtl_bundle.F90 +++ b/src_mtln/mtl_bundle.F90 @@ -1,6 +1,6 @@ module mtl_bundle_m - use utils_m + use mtln_utils_m use probes_m use generators_m use dispersive_m @@ -504,4 +504,4 @@ subroutine Comm_MPI_Fields(this) end subroutine #endif -end module mtl_bundle_m \ No newline at end of file +end module mtl_bundle_m diff --git a/src_mtln/utils.F90 b/src_mtln/utils.F90 index b17c8185..b695ac21 100644 --- a/src_mtln/utils.F90 +++ b/src_mtln/utils.F90 @@ -1,4 +1,4 @@ -module utils_m +module mtln_utils_m use iso_fortran_env, only: real64 use FDETYPES_m, only: RKIND @@ -113,4 +113,4 @@ function element_wise_invert(n, x) result(y) end function -end module utils_m +end module mtln_utils_m diff --git a/src_output/bulkProbeOutput.F90 b/src_output/bulkProbeOutput.F90 index 9bede40b..0aaa66a5 100644 --- a/src_output/bulkProbeOutput.F90 +++ b/src_output/bulkProbeOutput.F90 @@ -1,6 +1,7 @@ module bulkProbeOutput_m use FDETYPES_m use utils_m + use allocationUtils_m, only: alloc_and_init use outputTypes_m use outputUtils_m implicit none diff --git a/src_output/frequencySliceProbeOutput.F90 b/src_output/frequencySliceProbeOutput.F90 index 784b2d7e..6e9149b5 100644 --- a/src_output/frequencySliceProbeOutput.F90 +++ b/src_output/frequencySliceProbeOutput.F90 @@ -1,6 +1,7 @@ module frequencySliceProbeOutput_m use FDETYPES_m use utils_m + use allocationUtils_m, only: alloc_and_init use report_m use outputTypes_m use outputUtils_m diff --git a/src_output/movieProbeOutput.F90 b/src_output/movieProbeOutput.F90 index 6ffdee26..b34f6615 100644 --- a/src_output/movieProbeOutput.F90 +++ b/src_output/movieProbeOutput.F90 @@ -1,10 +1,12 @@ module movieProbeOutput_m use FDETYPES_m use utils_m + use allocationUtils_m, only: alloc_and_init use report_m use outputTypes_m use outputUtils_m use volumicProbeUtils_m + use directoryUtils_m, only: add_extension, get_last_component, join_path, create_folder, create_file_with_path use xdmfAPI_m implicit none private diff --git a/src_output/pointProbeOutput.F90 b/src_output/pointProbeOutput.F90 index 5c3212c5..b0bba27b 100644 --- a/src_output/pointProbeOutput.F90 +++ b/src_output/pointProbeOutput.F90 @@ -1,6 +1,7 @@ module pointProbeOutput_m use FDETYPES_m use utils_m + use allocationUtils_m, only: alloc_and_init use outputTypes_m use domain_m use outputUtils_m diff --git a/src_output/volumicProbeUtils.F90 b/src_output/volumicProbeUtils.F90 index fc024861..5eade9e3 100644 --- a/src_output/volumicProbeUtils.F90 +++ b/src_output/volumicProbeUtils.F90 @@ -1,6 +1,7 @@ module volumicProbeUtils_m use FDETYPES_m use utils_m + use allocationUtils_m, only: alloc_and_init use outputTypes_m use outputUtils_m implicit none diff --git a/src_output/wireProbeOutput.F90 b/src_output/wireProbeOutput.F90 index f8ef97d9..f98e2d26 100644 --- a/src_output/wireProbeOutput.F90 +++ b/src_output/wireProbeOutput.F90 @@ -1,6 +1,7 @@ module wireProbeOutput_m use FDETYPES_m use utils_m + use allocationUtils_m, only: alloc_and_init use report_m use outputTypes_m use outputUtils_m diff --git a/src_utils/directoryUtils.F90 b/src_utils/directoryUtils.F90 index a09a165c..4585cc68 100644 --- a/src_utils/directoryUtils.F90 +++ b/src_utils/directoryUtils.F90 @@ -132,7 +132,7 @@ subroutine create_folder(path, ios) return end if -#ifdef __WIN32__ +#ifdef _WIN32 call execute_command_line("mkdir """//trim(path)//"""", exitstat=ios) #else call execute_command_line("mkdir -p "//trim(path), exitstat=ios) @@ -151,7 +151,7 @@ subroutine remove_folder(path, ios) return end if -#ifdef __WIN32__ +#ifdef _WIN32 call execute_command_line("rmdir /S /Q """//trim(path)//"""", exitstat=ios) #else call execute_command_line("rm -rf "//trim(path), exitstat=ios) diff --git a/test/mtln/test_math.F90 b/test/mtln/test_math.F90 index 94bbaeae..749966ee 100644 --- a/test/mtln/test_math.F90 +++ b/test/mtln/test_math.F90 @@ -1,5 +1,5 @@ integer function test_math_eigvals() bind(C) result(error_cnt) - use utils_m + use mtln_utils_m use mtln_testingTools_mod use iso_fortran_env, only: real64 @@ -63,4 +63,4 @@ integer function test_math_matmul_broadcast() bind(C) result(error_cnt) error_cnt = error_cnt +1 end if -end function \ No newline at end of file +end function diff --git a/test/observation/test_observation_init.F90 b/test/observation/test_observation_init.F90 index 517afd31..c2cae805 100644 --- a/test/observation/test_observation_init.F90 +++ b/test/observation/test_observation_init.F90 @@ -2,7 +2,7 @@ integer function test_init_time_movie_observation() bind(C) result(err) use FDETYPES_m use FDETYPES_TOOLS use Observa_m - use observation_testingTools + use observation_testingTools, only: create_base_sgg, get_temp_dir type(SGGFDTDINFO_t) :: sgg type(media_matrices_t) :: media @@ -22,7 +22,8 @@ integer function test_init_time_movie_observation() bind(C) result(err) sgg = create_base_sgg() call set_sgg_data(sgg) - media = create_media(sgg%Alloc) + media = create_geometry_media_from_sggAlloc(sgg%Alloc) + media%sggMtag = 0 tag_numbers = create_tag_list(sgg%Alloc) ThereAreObservation = .false. @@ -36,7 +37,7 @@ integer function test_init_time_movie_observation() bind(C) result(err) facesNF2FF = create_facesNF2FF(.false., .false., .false., .false., .false., .false.) control = create_control_flags(0, 0, 3, 10, trim(get_temp_dir())//'/entryRoot', "wireflavour",& - .false., .false., .false., .false., .false.,& + .false., .false., .false., .false., .false., .false.,& facesNF2FF) call InitObservation(sgg, media, tag_numbers, & @@ -127,4 +128,4 @@ function create_time_movie_observable(XI,YI,ZI,XE,YE,ZE) result(observable) observable%What = iMEC end function create_time_movie_observable -end function test_init_time_movie_observation \ No newline at end of file +end function test_init_time_movie_observation diff --git a/test/observation/test_observation_update.F90 b/test/observation/test_observation_update.F90 index 75e5c042..3ae15a12 100644 --- a/test/observation/test_observation_update.F90 +++ b/test/observation/test_observation_update.F90 @@ -2,7 +2,7 @@ integer function test_update_time_movie_observation() bind(C) result(err) use FDETYPES_m use FDETYPES_TOOLS use Observa_m - use observation_testingTools + use observation_testingTools, only: create_base_sgg, dummyFields_t, get_temp_dir type(SGGFDTDINFO_t) :: sgg type(media_matrices_t) :: media @@ -24,7 +24,8 @@ integer function test_update_time_movie_observation() bind(C) result(err) sgg = create_base_sgg() call set_sgg_data(sgg) - media = create_media(sgg%Alloc) + media = create_geometry_media_from_sggAlloc(sgg%Alloc) + media%sggMtag = 0 tag_numbers = create_tag_list(sgg%Alloc) ThereAreObservation = .false. @@ -38,7 +39,7 @@ integer function test_update_time_movie_observation() bind(C) result(err) facesNF2FF = create_facesNF2FF(.false., .false., .false., .false., .false., .false.) control = create_control_flags(0, 0, 3, 10, trim(get_temp_dir())//'/entryRoot', "wireflavour",& - .false., .false., .false., .false., .false.,& + .false., .false., .false., .false., .false., .false.,& facesNF2FF) call InitObservation(sgg, media, tag_numbers, & @@ -112,4 +113,4 @@ function create_time_movie_observable(XI,YI,ZI,XE,YE,ZE) result(observable) observable%What = iMEC end function create_time_movie_observable -end function test_update_time_movie_observation \ No newline at end of file +end function test_update_time_movie_observation diff --git a/test/utils/fdetypes_tools.F90 b/test/utils/fdetypes_tools.F90 index 489350fb..82d3cf43 100644 --- a/test/utils/fdetypes_tools.F90 +++ b/test/utils/fdetypes_tools.F90 @@ -1,6 +1,7 @@ module FDETYPES_TOOLS use FDETYPES_m use utils_m + use allocationUtils_m, only: alloc_and_init use NFDETypes_m implicit none private From 1ff65f0ab792d19fa5c3352b1d03578280a0dc4a Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Tue, 28 Jul 2026 10:35:25 +0000 Subject: [PATCH 09/38] FDTD | ENV | Unify build directory and add Intel container --- .devcontainer/devcontainer.json | 4 +- .vscode/launch.dev.json | 8 ++-- CLAUDE.md | 5 +-- CMakePresets.json | 16 ++++---- Dockerfile | 62 ++++++++++++++++++++++++++++++ doc/development.md | 24 ++++++++---- doc/docker.md | 57 ++++++++++++++++++++++----- docker-compose.yml | 19 +++++++++ docker/intel-quality-entrypoint.sh | 10 +++++ test/pyWrapper/utils.py | 22 ++--------- 10 files changed, 176 insertions(+), 51 deletions(-) create mode 100644 docker/intel-quality-entrypoint.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 075c5643..883e1ac6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -35,10 +35,10 @@ "fortran-lang.linter-gfortran", "ms-vscode.cmake-tools", "ms-python.python", - "eamodio.gitlens" + "mhutchie.git-graph" ], "settings": { - "cmake.buildDirectory": "${workspaceFolder}/build-dev", + "cmake.buildDirectory": "${workspaceFolder}/build", "cmake.useCMakePresets": "always", "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "terminal.integrated.defaultProfile.linux": "bash" diff --git a/.vscode/launch.dev.json b/.vscode/launch.dev.json index 28d56134..b542eab7 100644 --- a/.vscode/launch.dev.json +++ b/.vscode/launch.dev.json @@ -5,7 +5,7 @@ "name": "Debug semba-fdtd (dbg)", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/build-dbg/bin/semba-fdtd", + "program": "${workspaceFolder}/build/bin/semba-fdtd", "args": ["${input:inputFile}"], "stopAtEntry": false, "cwd": "${workspaceFolder}", @@ -23,7 +23,7 @@ "name": "Debug semba-fdtd (dbg-mpi)", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/build-dbg-mpi/bin/semba-fdtd", + "program": "${workspaceFolder}/build/bin/semba-fdtd", "args": ["${input:inputFile}"], "stopAtEntry": false, "cwd": "${workspaceFolder}", @@ -40,7 +40,7 @@ "name": "Debug fdtd_tests (dbg)", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/build-dbg/bin/fdtd_tests", + "program": "${workspaceFolder}/build/bin/fdtd_tests", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", @@ -58,7 +58,7 @@ "name": "Attach to process", "type": "cppdbg", "request": "attach", - "program": "${workspaceFolder}/build-dbg/bin/semba-fdtd", + "program": "${workspaceFolder}/build/bin/semba-fdtd", "processId": "${command:pickProcess}", "MIMode": "gdb" } diff --git a/CLAUDE.md b/CLAUDE.md index 254fa4d5..136d88fe 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,13 +10,12 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co **First time setup (required):** ```bash -git submodule init -git submodule update +git submodule update --init --recursive ``` **Configure and build:** ```bash -cmake -S . -B build -DCMAKE_BUILD_TYPE=Release +cmake --fresh --preset rls cmake --build build -j ``` diff --git a/CMakePresets.json b/CMakePresets.json index f61d693e..e8586aaa 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -4,7 +4,7 @@ { "name": "rls", "generator": "Ninja", - "binaryDir": "build-rls/", + "binaryDir": "build/", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "SEMBA_FDTD_ENABLE_MPI": "OFF" @@ -13,7 +13,7 @@ { "name": "dbg", "inherits": "rls", - "binaryDir": "build-dbg/", + "binaryDir": "build/", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } @@ -21,7 +21,7 @@ { "name": "rls-mpi", "inherits": "rls", - "binaryDir": "build-rls-mpi/", + "binaryDir": "build/", "cacheVariables": { "SEMBA_FDTD_ENABLE_MPI": "ON" } @@ -29,7 +29,7 @@ { "name": "dbg-mpi", "inherits": "dbg", - "binaryDir": "build-dbg-mpi/", + "binaryDir": "build/", "cacheVariables": { "SEMBA_FDTD_ENABLE_MPI": "ON" } @@ -37,7 +37,7 @@ { "name": "dbg-nomtln", "inherits": "dbg", - "binaryDir": "build-dbg-nomtln/", + "binaryDir": "build/", "cacheVariables": { "SEMBA_FDTD_ENABLE_MTLN": "OFF" } @@ -45,7 +45,7 @@ { "name": "rls-nomtln", "inherits": "rls", - "binaryDir": "build-rls-nomtln/", + "binaryDir": "build/", "cacheVariables": { "SEMBA_FDTD_ENABLE_MTLN": "OFF" } @@ -53,7 +53,7 @@ { "name": "intel-rls", "generator": "Ninja", - "binaryDir": "build-intel-rls/", + "binaryDir": "build/", "environment": { "I_MPI_ROOT": "/opt/intel/oneapi/mpi/latest", "FC": "mpiifx", @@ -70,7 +70,7 @@ { "name": "intel-rls-nomtln", "inherits": "intel-rls", - "binaryDir": "build-intel-rls-nomtln/", + "binaryDir": "build/", "cacheVariables": { "SEMBA_FDTD_ENABLE_MTLN": "OFF" } diff --git a/Dockerfile b/Dockerfile index 7cdb1c06..e36f70bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,11 @@ # Keep shared build dependencies first so both environments reuse this layer. FROM ubuntu:26.04@sha256:b7f48194d4d8b763a478a621cdc81c27be222ba2206ca3ca6bc42b49685f3d9e AS quality-base +# Prevent package installation from prompting during image builds. ENV DEBIAN_FRONTEND=noninteractive +# Cache apt metadata and packages between BuildKit builds without retaining them +# in the final image layer. RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && apt-get install -y \ @@ -23,14 +26,19 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ && locale-gen en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* +# Use a UTF-8 locale consistently for compiler, test, and terminal output. ENV LANG=en_US.UTF-8 \ LANGUAGE=en_US:en \ LC_ALL=en_US.UTF-8 +# These can be overridden to match the host user and avoid bind-mount ownership +# mismatches when running through Docker Compose. ARG USERNAME=developer ARG USER_UID=1000 ARG USER_GID=1000 +# Reuse a pre-existing UID/GID where Ubuntu provides one, otherwise create the +# requested account. RUN set -eux; \ existing_group="$(getent group ${USER_GID} | cut -d: -f1)"; \ if [ -n "${existing_group}" ] && [ "${existing_group}" != "${USERNAME}" ] && ! getent group ${USERNAME} >/dev/null; then \ @@ -61,6 +69,7 @@ FROM quality AS dev USER root +# Development-only tools: version control, debugging, and the OpenCode CLI. RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && apt-get install -y \ @@ -74,12 +83,14 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ sudo \ && rm -rf /var/lib/apt/lists/* +# Preserve package-manager caches across BuildKit builds. RUN --mount=type=cache,target=/root/.npm \ npm install -g opencode-ai RUN --mount=type=cache,target=/root/.cache/pip \ python3 -m pip install --break-system-packages fortls fprettify +# Prepare mount points and grant passwordless sudo for interactive development. RUN mkdir -p /home/${USERNAME}/.config \ /home/${USERNAME}/.ssh \ /home/${USERNAME}/.local/share/opencode \ @@ -93,3 +104,54 @@ RUN mkdir -p /home/${USERNAME}/.config \ USER ${USERNAME} WORKDIR /home/${USERNAME}/workspaces/fdtd + +# Intel oneAPI 2025.0 ships the compilers, Intel MPI, and matching runtime +# libraries as a tested toolkit rather than relying on Intel's APT repository. +FROM intel/oneapi-hpckit:2025.0.0-0-devel-ubuntu24.04 AS intel-quality + +USER root + +ENV DEBIAN_FRONTEND=noninteractive + +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && apt-get install -y \ + locales \ + cmake \ + make \ + ninja-build \ + && locale-gen en_US.UTF-8 \ + && rm -rf /var/lib/apt/lists/* + +ENV LANG=en_US.UTF-8 \ + LANGUAGE=en_US:en \ + LC_ALL=en_US.UTF-8 + +ARG USERNAME=developer +ARG USER_UID=1000 +ARG USER_GID=1000 + +RUN set -eux; \ + existing_group="$(getent group ${USER_GID} | cut -d: -f1)"; \ + if [ -n "${existing_group}" ] && [ "${existing_group}" != "${USERNAME}" ] && ! getent group ${USERNAME} >/dev/null; then \ + groupmod -n ${USERNAME} ${existing_group}; \ + elif [ -z "${existing_group}" ]; then \ + groupadd --gid ${USER_GID} ${USERNAME}; \ + fi; \ + existing_user="$(getent passwd ${USER_UID} | cut -d: -f1)"; \ + if [ -n "${existing_user}" ] && [ "${existing_user}" != "${USERNAME}" ]; then \ + usermod -l ${USERNAME} -d /home/${USERNAME} -m ${existing_user}; \ + elif [ -z "${existing_user}" ]; then \ + useradd --uid ${USER_UID} --gid ${USER_GID} -m -s /bin/bash ${USERNAME}; \ + fi; \ + mkdir -p /home/${USERNAME}/workspaces/fdtd; \ + chown -R ${USER_UID}:${USER_GID} /home/${USERNAME}/workspaces + +COPY docker/intel-quality-entrypoint.sh /usr/local/bin/intel-quality-entrypoint +RUN chmod 0755 /usr/local/bin/intel-quality-entrypoint + +USER ${USERNAME} +WORKDIR /home/${USERNAME}/workspaces/fdtd + +ENTRYPOINT ["/usr/local/bin/intel-quality-entrypoint"] +CMD ["bash", "-l"] diff --git a/doc/development.md b/doc/development.md index a4dd8aa4..1457b820 100644 --- a/doc/development.md +++ b/doc/development.md @@ -8,7 +8,13 @@ In windows, you need to install [intel oneapi runtime libraries](https://www.int ## GNU/Linux Compilation -It is important to point out the repository has dependencies which are available as submodules. It is necessary to run `git submodule init` and `git submodule update` from the root folder before running any `cmake` or `build` commands. +The repository has dependencies available as submodules. Before running CMake, initialise them from the repository root: + +```shell +git submodule update --init --recursive +``` + +All local configurations use `build/`. Run CMake with `--fresh` whenever changing compiler, build type, or feature options so the previous cache is discarded. If you use intel oneapi compiler, make sure to run @@ -93,8 +99,13 @@ navigate to the `/fdtd/` folder that has been created, this folder will be refer ### Prerequisites This compilation process will use the already available precompiled libraries included with the project, thus it's not required to build them manually. -This repository has dependencies that are available as submodules. It is necessary to run `git submodule init` and `git submodule update` from the root folder before running any `cmake` or `build` commands. -In the .gitmodules file, the submodules use the SSH remote URL by default. If not using a SSH-key in the computer where the following process will be performed, the remote addresses for each submodule must be individually changed to their HTTPS alternative. +This repository has dependencies available as submodules. Initialise them from the root folder before running CMake: + +```shell +git submodule update --init --recursive +``` + +The default submodule URLs use HTTPS. This software requires [Windows BaseKit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and [Windows HPCKit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/hpc-toolkit-download.html). Install these packages with all their features selected. @@ -113,7 +124,7 @@ This will load the OneAPI environment for x64. Navigate to the fdtd root folder, choose between "Debug"/"Release" for `-DCMAKE_BUILD_TYPE`, and "ON"/"OFF" for `-DSEMBA_FDTD_ENABLE_MPI`, for example, a Release version with MPI Support would be: ```shell -cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DSEMBA_FDTD_ENABLE_MPI=ON +cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DSEMBA_FDTD_ENABLE_MPI=ON --fresh ``` Then, @@ -260,8 +271,7 @@ cd This project has submodule dependencies remember to initiate an update the ```bash -git submodule init -git submodule update +git submodule update --init --recursive ``` #### Step 2: Install Python Requirements @@ -392,4 +402,4 @@ Run the following command as super user: ``` echo 0| sudo tee /proc/sys/kernel/yama/ptrace_scope ``` -([source](https://github.com/Microsoft/MIEngine/wiki/Troubleshoot-attaching-to-processes-using-GDB)) \ No newline at end of file +([source](https://github.com/Microsoft/MIEngine/wiki/Troubleshoot-attaching-to-processes-using-GDB)) diff --git a/doc/docker.md b/doc/docker.md index 82eebeb0..cd943c33 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -1,7 +1,9 @@ # Docker -Docker provides two environments for working with semba-fdtd. -Both mount the repository at `/home/developer/workspaces/fdtd`, so build artefacts and simulation output are written to the host workspace. +Docker provides three environments for working with semba-fdtd. +All environments mount the repository at `/home/developer/workspaces/fdtd`, so build artefacts and simulation output are written to the host workspace. +All presets use the same `build/` directory. +Run CMake with `--fresh` whenever switching preset so the previous compiler and configuration cache is discarded. ## Prerequisite @@ -16,10 +18,12 @@ git submodule update --init --recursive | Service | Purpose | Included tools | |---|---|---| | `quality` | Compile, test, run examples, and inspect generated output | GNU C/C++/Fortran compilers, CMake, Ninja, MPI, HDF5, Python, and ParaView | +| `intel-quality` | Validate Intel oneAPI compiler and Intel MPI builds | Intel oneAPI HPCKit, Intel MPI, CMake, Ninja, and the Intel HDF5 runtime | | `dev` | Interactive development and the Dev Container | Everything in `quality`, plus Git, GitHub CLI, SSH client, Node/npm, OpenCode, Fortran tools, and debuggers | `quality` intentionally excludes developer-only tools. -Both environments include ParaView. +`quality` and `dev` include ParaView. +`intel-quality` is for Intel-specific compilation checks; it is not the Python test environment or the Dev Container. ## Build Images @@ -35,6 +39,12 @@ Build `dev` when its additional developer tools are required: docker compose build dev ``` +Build the Intel oneAPI validation environment when checking Intel-specific configurations: + +```bash +docker compose build intel-quality +``` + The `dev` target is built from `quality`. Docker therefore reuses the compiler and ParaView layers when building `dev`. @@ -46,25 +56,54 @@ Editing source files, running examples, and creating build directories do not in Run CMake presets from the mounted workspace: ```bash -docker compose run --rm quality cmake --preset rls +docker compose run --rm quality cmake --fresh --preset rls docker compose run --rm quality cmake --build --preset rls ``` For an MPI build: ```bash -docker compose run --rm quality cmake --preset rls-mpi +docker compose run --rm quality cmake --fresh --preset rls-mpi docker compose run --rm quality cmake --build --preset rls-mpi ``` -Build directories such as `build-rls/` and `build-rls-mpi/` remain in the repository after the container exits. +The active build remains in `build/` after the container exits. + +## Compile With Intel oneAPI + +`intel-quality` initialises Intel oneAPI and Intel MPI automatically. +It also selects the bundled Intel HDF5 runtime, so no manual environment setup is required. + +Use the Intel Release preset to validate the MPI, MTLN, and double-precision configuration: + +```bash +docker compose run --rm intel-quality cmake --fresh --preset intel-rls +docker compose run --rm intel-quality cmake --build --preset intel-rls +docker compose run --rm intel-quality build/bin/fdtd_tests +``` + +For the Intel configuration without MTLN: + +```bash +docker compose run --rm intel-quality cmake --fresh --preset intel-rls-nomtln +docker compose run --rm intel-quality cmake --build --preset intel-rls-nomtln +docker compose run --rm intel-quality build/bin/fdtd_tests +``` + +Open a shell for repeated Intel build checks: + +```bash +docker compose run --rm intel-quality +``` + +A terminal inside the container should appear. ## Run Binaries And Examples Use the binary produced in the mounted build directory: ```bash -docker compose run --rm quality build-rls/bin/semba-fdtd -i path/to/case.fdtd.json +docker compose run --rm quality build/bin/semba-fdtd -i path/to/case.fdtd.json ``` Any output generated by the solver is available immediately in the corresponding host directory. @@ -87,9 +126,9 @@ docker compose run --rm dev paraview Configure a build with tests, then run the required test commands: ```bash -docker compose run --rm quality cmake --preset rls +docker compose run --rm quality cmake --fresh --preset rls docker compose run --rm quality cmake --build --preset rls -docker compose run --rm quality build-rls/bin/fdtd_tests +docker compose run --rm quality build/bin/fdtd_tests ``` Python integration tests require the project dependencies in a virtual environment: diff --git a/docker-compose.yml b/docker-compose.yml index 365c0d27..5e523211 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,15 +1,31 @@ services: + # Lightweight image for compiling and testing the solver. quality: build: context: . target: quality volumes: + # Work directly against the checked-out source tree. - type: bind source: . target: /home/developer/workspaces/fdtd working_dir: /home/developer/workspaces/fdtd tty: true + # Intel oneAPI compiler and Intel MPI environment for manual quality builds. + intel-quality: + build: + context: . + target: intel-quality + volumes: + - type: bind + source: . + target: /home/developer/workspaces/fdtd + working_dir: /home/developer/workspaces/fdtd + stdin_open: true + tty: true + + # Interactive development image with source-control and OpenCode tooling. dev: build: context: . @@ -18,6 +34,7 @@ services: - type: bind source: . target: /home/developer/workspaces/fdtd + # Use the host Git identity and SSH keys for authenticated Git operations. - type: bind source: ${HOME}/.gitconfig target: /home/developer/.gitconfig @@ -28,6 +45,7 @@ services: - type: bind source: ${HOME}/.config/gh target: /home/developer/.config/gh + # Share local OpenCode configuration and agent resources with the container. - type: bind source: ${HOME}/.config/opencode target: /home/developer/.config/opencode @@ -35,6 +53,7 @@ services: source: ${HOME}/.agents target: /home/developer/.agents read_only: true + # Keep OpenCode's local data available between disposable containers. - type: bind source: ${HOME}/.local/share/opencode target: /home/developer/.local/share/opencode diff --git a/docker/intel-quality-entrypoint.sh b/docker/intel-quality-entrypoint.sh new file mode 100644 index 00000000..83e03aeb --- /dev/null +++ b/docker/intel-quality-entrypoint.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e + +# Initialise compiler and Intel MPI paths for every interactive container. +source /opt/intel/oneapi/setvars.sh --force >/dev/null + +export HDF5_ROOT="${HDF5_ROOT:-/home/developer/workspaces/fdtd/precompiled_libraries/linux-intel/hdf5}" +export LD_LIBRARY_PATH="${HDF5_ROOT}/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}" + +exec "$@" diff --git a/test/pyWrapper/utils.py b/test/pyWrapper/utils.py index d454745a..2a9fc216 100644 --- a/test/pyWrapper/utils.py +++ b/test/pyWrapper/utils.py @@ -35,26 +35,12 @@ def _default_semba_exe(): exe_name = 'semba-fdtd.exe' if platform == "win32" else 'semba-fdtd' - build_dirs = ['build'] + return os.path.abspath(os.getenv( + 'SEMBA_EXE', os.path.join(os.getcwd(), 'build', 'bin', exe_name))) - if os.getenv("SEMBA_FDTD_ENABLE_MPI") == "ON": - build_dirs.extend(['build-rls-mpi', 'build-dbg-mpi']) - else: - build_dirs.extend(['build-rls', 'build-dbg']) - for build_dir in build_dirs: - candidate = os.path.join(os.getcwd(), build_dir, 'bin', exe_name) - if os.path.isfile(candidate): - return candidate - - return os.path.join(os.getcwd(), 'build', 'bin', exe_name) - - -# Use of absolute path to avoid conflicts when changing directory. -if platform == "linux": - SEMBA_EXE = os.path.join(os.getcwd(), 'build', 'bin', 'semba-fdtd') -elif platform == "win32": - SEMBA_EXE = os.path.join(os.getcwd(), 'build', 'bin', 'semba-fdtd.exe') +# Use an absolute path to avoid conflicts when changing directory. +SEMBA_EXE = _default_semba_exe() NGSPICE_DLL = os.path.join( os.getcwd(), 'precompiled_libraries', 'windows-intel', 'ngspice', 'ngspice.dll') From 09509eeb090e3c09e73cbb91b8a769dc80ffc4bc Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Tue, 28 Jul 2026 14:18:23 +0000 Subject: [PATCH 10/38] FDTD | ENV | Include debug mpi docs. Minor adjustments for mpi debug tools --- .devcontainer/devcontainer.json | 1 + .gitignore | 4 +- .vscode/extensions.dev.json | 36 +++++ .vscode/launch.dev.json | 228 ++++++++++++++++++++++++-- .vscode/settings.dev.json | 25 +++ .vscode/tasks.dev.json | 133 +++++++++++++++ .vscode/tasks.json | 133 +++++++++++++++ doc/development.md | 277 ++++++++++++++++++++++++++++---- doc/docker.md | 11 ++ doc/fdtdjson.md | 20 +++ doc/mtln.md | 11 +- scripts/debug-mpi-gdbserver.sh | 239 +++++++++++++++++++++++++++ 12 files changed, 1068 insertions(+), 50 deletions(-) create mode 100644 .vscode/extensions.dev.json create mode 100644 .vscode/settings.dev.json create mode 100644 .vscode/tasks.dev.json create mode 100644 .vscode/tasks.json create mode 100755 scripts/debug-mpi-gdbserver.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 883e1ac6..012b6c98 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -34,6 +34,7 @@ "extensions": [ "fortran-lang.linter-gfortran", "ms-vscode.cmake-tools", + "ms-vscode.cpptools", "ms-python.python", "mhutchie.git-graph" ], diff --git a/.gitignore b/.gitignore index 2086ba67..12a28b40 100755 --- a/.gitignore +++ b/.gitignore @@ -50,7 +50,6 @@ Testing/ /SEMBA_FDTD_temp.log .vscode/launch.json .vscode/settings.json -.vscode/tasks.json */*.bak ./*.bak .vscode/ltex.dictionary.en-US.txt @@ -76,4 +75,5 @@ git_info.txt .venv/build2/ build2/ -.venv/ \ No newline at end of file +.venv/ +specs/changes/* \ No newline at end of file diff --git a/.vscode/extensions.dev.json b/.vscode/extensions.dev.json new file mode 100644 index 00000000..a24ec6e9 --- /dev/null +++ b/.vscode/extensions.dev.json @@ -0,0 +1,36 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. + // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp + + // List of extensions which should be recommended for users of this workspace. + "recommendations": [ + // Fortran language support and linting + "fortran-lang.linter-gfortran", + + // CMake support + "ms-vscode.cmake-tools", + "twxs.cmake", + + // C++ tools (used alongside Fortran in this project) + "ms-vscode.cpptools", + "ms-vscode.cpp-devtools", + + // Testing + "matepek.vscode-catch2-test-adapter", + "fredericbonnet.cmake-test-adapter", + "ms-python.python", + + // Git + "mhutchie.git-graph", + "github.vscode-pull-request-github", + + // GitHub Copilot + "github.copilot", + "github.copilot-chat", + "ms-toolsai.jupyter" + ], + // List of extensions recommended by VS Code that should not be recommended for users of this workspace. + "unwantedRecommendations": [ + + ] +} \ No newline at end of file diff --git a/.vscode/launch.dev.json b/.vscode/launch.dev.json index b542eab7..21455a9e 100644 --- a/.vscode/launch.dev.json +++ b/.vscode/launch.dev.json @@ -6,9 +6,9 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/bin/semba-fdtd", - "args": ["${input:inputFile}"], + "args": ["-i", "${config:semba-fdtd.debug.inputFile}"], "stopAtEntry": false, - "cwd": "${workspaceFolder}", + "cwd": "${workspaceFolder}/${config:semba-fdtd.debug.inputCwd}", "MIMode": "gdb", "setupCommands": [ { @@ -17,18 +17,100 @@ "ignoreFailures": true } ], - "preLaunchTask": "CMake: build Debug no-MPI" + "miDebuggerPath": "/usr/bin/gdb" }, { - "name": "Debug semba-fdtd (dbg-mpi)", + "name": "MPI: debug solver rank 0 (2 ranks)", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/bin/semba-fdtd", - "args": ["${input:inputFile}"], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}/${config:semba-fdtd.debug.inputCwd}", "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb", + "miDebuggerServerAddress": "localhost:20000", + "debugServerPath": "${workspaceFolder}/scripts/debug-mpi-gdbserver.sh", + "debugServerArgs": "--workdir ${workspaceFolder}/${config:semba-fdtd.debug.inputCwd} --foreground-debug-rank 0 2 ${workspaceFolder}/build/bin/semba-fdtd -i ${config:semba-fdtd.debug.inputFile}", + "serverStarted": "Listening on port 20000", + "filterStdout": true, + "filterStderr": true, + "serverLaunchTimeout": 30000, + "presentation": { + "order": 2 + }, "setupCommands": [ + { + "description": "Use local shared libraries", + "text": "set sysroot /", + "ignoreFailures": true + }, + { + "description": "Enable pretty printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + }, + { + "name": "MPI all ranks: rank 0", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/semba-fdtd", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}/${config:semba-fdtd.debug.inputCwd}", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb", + "miDebuggerServerAddress": "localhost:20000", + "debugServerPath": "${workspaceFolder}/scripts/debug-mpi-gdbserver.sh", + "debugServerArgs": "--workdir ${workspaceFolder}/${config:semba-fdtd.debug.inputCwd} --foreground-all 2 ${workspaceFolder}/build/bin/semba-fdtd -i ${config:semba-fdtd.debug.inputFile}", + "serverStarted": "Listening on port 20000", + "filterStdout": true, + "filterStderr": true, + "serverLaunchTimeout": 30000, + "presentation": { + "hidden": true + }, + "setupCommands": [ + { + "description": "Use local shared libraries", + "text": "set sysroot /", + "ignoreFailures": true + }, + { + "description": "Enable pretty printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + }, + { + "name": "MPI all ranks: rank 1", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/semba-fdtd", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}/${config:semba-fdtd.debug.inputCwd}", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb", + "miDebuggerServerAddress": "localhost:20001", + "debugServerPath": "${workspaceFolder}/scripts/debug-mpi-gdbserver.sh", + "debugServerArgs": "--wait-for-port 20001", + "serverStarted": "MPI gdbserver ready on port 20001", + "filterStdout": true, + "filterStderr": true, + "serverLaunchTimeout": 30000, + "presentation": { + "hidden": true + }, + "setupCommands": [ + { + "description": "Use local shared libraries", + "text": "set sysroot /", + "ignoreFailures": true + }, { "description": "Enable pretty printing for gdb", "text": "-enable-pretty-printing", @@ -52,7 +134,103 @@ "ignoreFailures": true } ], - "preLaunchTask": "CMake: build Debug no-MPI" + "miDebuggerPath": "/usr/bin/gdb" + }, + { + "name": "Debug fdtd_tests filter (dbg)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/fdtd_tests", + "args": ["--gtest_filter=${input:gtestFilter}"], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb" + }, + { + "name": "Debug fdtd_tests (dbg-mpi)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/fdtd_tests", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb" + }, + { + "name": "Debug fdtd_tests filter (dbg-mpi)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/fdtd_tests", + "args": ["--gtest_filter=${input:gtestFilter}"], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb" + }, + { + "name": "Debug MPI fdtd_tests rank 0", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/fdtd_tests", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb", + "miDebuggerServerAddress": "localhost:20000", + "presentation": { + "hidden": true + }, + "postDebugTask": "Debug: stop MPI gdbservers" + }, + { + "name": "Debug MPI fdtd_tests rank 1", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/fdtd_tests", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb", + "miDebuggerServerAddress": "localhost:20001", + "presentation": { + "hidden": true + } + }, + { + "name": "Debug pytest node (dbg)", + "type": "debugpy", + "request": "launch", + "module": "pytest", + "args": ["${input:pytestNode}", "-s"], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "justMyCode": false, + "env": { + "SEMBA_EXE": "${workspaceFolder}/build/bin/semba-fdtd", + "SEMBA_FDTD_ENABLE_MPI": "OFF", + "SEMBA_FDTD_ENABLE_MTLN": "ON", + "SEMBA_FDTD_ENABLE_HDF": "ON" + } + }, + { + "name": "Debug pytest node (dbg-mpi)", + "type": "debugpy", + "request": "launch", + "module": "pytest", + "args": ["${input:pytestNode}", "-s"], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "justMyCode": false, + "env": { + "SEMBA_EXE": "${workspaceFolder}/build/bin/semba-fdtd", + "SEMBA_FDTD_ENABLE_MPI": "ON", + "SEMBA_FDTD_ENABLE_MTLN": "ON", + "SEMBA_FDTD_ENABLE_HDF": "ON" + } }, { "name": "Attach to process", @@ -60,15 +238,41 @@ "request": "attach", "program": "${workspaceFolder}/build/bin/semba-fdtd", "processId": "${command:pickProcess}", - "MIMode": "gdb" + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/gdb" + } + ], + "compounds": [ + { + "name": "MPI: debug all ranks (2 ranks)", + "configurations": ["MPI all ranks: rank 0", "MPI all ranks: rank 1"], + "stopAll": true, + "presentation": { + "order": 1 + } + }, + { + "name": "MPI: debug fdtd_tests (2 ranks)", + "configurations": ["Debug MPI fdtd_tests rank 0", "Debug MPI fdtd_tests rank 1"], + "preLaunchTask": "Debug: prepare MPI fdtd_tests", + "stopAll": true, + "presentation": { + "order": 3 + } } ], "inputs": [ { - "id": "inputFile", + "id": "gtestFilter", + "type": "promptString", + "description": "GoogleTest filter", + "default": "*" + }, + { + "id": "pytestNode", "type": "promptString", - "description": "Path to .fdtd.json input file", - "default": "testData/input_examples/sphere.fdtd.json" + "description": "Pytest node or path", + "default": "test/pyWrapper/test_pyWrapper.py::test_fdtd_with_string_args" } ] } diff --git a/.vscode/settings.dev.json b/.vscode/settings.dev.json new file mode 100644 index 00000000..e5b27324 --- /dev/null +++ b/.vscode/settings.dev.json @@ -0,0 +1,25 @@ +{ + "semba-fdtd.debug.inputFile": "nodal-source-with-movie.fdtd.json", + "semba-fdtd.debug.inputCwd": "Testing", + "semba-fdtd.debug.mpiGtestFilter": "conformal.geometry_coord_position", + "fortran.fortls.path": "/usr/local/bin/fortls", + "fortran.fortls.notifyInit": true, + "fortran.fortls.disableAutoupdate": true, + "fortran.provide.hover": "Both", + "fortran.formatting.formatter": "fprettify", + "editor.tokenColorCustomizations": { + "textMateRules": [ + { + "scope": [ + "entity.name.function.fortran", + "entity.name.function.procedure.fortran", + "entity.name.function.subroutine.fortran" + ], + "settings": { + "foreground": "#DCDCAA", + "fontStyle": "bold" + } + } + ] + } +} diff --git a/.vscode/tasks.dev.json b/.vscode/tasks.dev.json new file mode 100644 index 00000000..14181551 --- /dev/null +++ b/.vscode/tasks.dev.json @@ -0,0 +1,133 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "CMake: configure Release no-MPI", + "type": "shell", + "command": "cmake --fresh --preset rls", + "problemMatcher": [] + }, + { + "label": "CMake: build Release no-MPI", + "type": "shell", + "command": "cmake --build --preset rls", + "dependsOn": ["CMake: configure Release no-MPI"], + "problemMatcher": [] + }, + { + "label": "CMake: configure Debug no-MPI", + "type": "shell", + "command": "cmake --fresh --preset dbg", + "problemMatcher": [] + }, + { + "label": "CMake: build Debug no-MPI", + "type": "shell", + "command": "cmake --build --preset dbg", + "dependsOn": ["CMake: configure Debug no-MPI"], + "problemMatcher": [] + }, + { + "label": "CMake: configure Debug MPI", + "type": "shell", + "command": "cmake --fresh --preset dbg-mpi", + "problemMatcher": [] + }, + { + "label": "CMake: build Debug MPI", + "type": "shell", + "command": "cmake --build --preset dbg-mpi", + "dependsOn": ["CMake: configure Debug MPI"], + "problemMatcher": [] + }, + { + "label": "Debug: prepare MPI fdtd_tests", + "type": "process", + "command": "${workspaceFolder}/scripts/debug-mpi-gdbserver.sh", + "args": [ + "2", + "${workspaceFolder}/build/bin/fdtd_tests", + "--gtest_filter=${config:semba-fdtd.debug.mpiGtestFilter}" + ], + "problemMatcher": [], + "presentation": { + "reveal": "always", + "panel": "dedicated", + "clear": true + } + }, + { + "label": "Debug: stop MPI gdbservers", + "type": "process", + "command": "${workspaceFolder}/scripts/debug-mpi-gdbserver.sh", + "args": ["--stop"], + "problemMatcher": [], + "presentation": { + "reveal": "never", + "panel": "dedicated" + } + }, + { + "label": "CMake: configure Debug no-MTLN", + "type": "shell", + "command": "cmake --fresh --preset dbg-nomtln", + "problemMatcher": [] + }, + { + "label": "CMake: build Debug no-MTLN", + "type": "shell", + "command": "cmake --build --preset dbg-nomtln", + "dependsOn": ["CMake: configure Debug no-MTLN"], + "problemMatcher": "$gcc" + }, + { + "label": "Lint: Fortitude (advisory)", + "type": "shell", + "command": "fortitude check --exit-zero", + "problemMatcher": [] + }, + { + "label": "CMake: configure Release MPI", + "type": "shell", + "command": "cmake --fresh --preset rls-mpi", + "problemMatcher": [] + }, + { + "label": "CMake: build Release MPI", + "type": "shell", + "command": "cmake --build --preset rls-mpi", + "dependsOn": ["CMake: configure Release MPI"], + "problemMatcher": [] + }, + { + "label": "Test: unit Release no-MPI", + "type": "shell", + "command": "build/bin/fdtd_tests", + "dependsOn": ["CMake: build Release no-MPI"], + "problemMatcher": [] + }, + { + "label": "Test: pytest Release no-MPI", + "type": "shell", + "command": "SEMBA_FDTD_ENABLE_MPI=OFF SEMBA_FDTD_ENABLE_MTLN=ON SEMBA_FDTD_ENABLE_HDF=ON SEMBA_EXE=build/bin/semba-fdtd .venv/bin/python -m pytest test/ -m 'not mpi' --durations=20", + "dependsOn": ["CMake: build Release no-MPI"], + "problemMatcher": [] + }, + { + "label": "Test: pytest Release MPI", + "type": "shell", + "command": "SEMBA_FDTD_ENABLE_MPI=ON SEMBA_FDTD_ENABLE_MTLN=ON SEMBA_FDTD_ENABLE_HDF=ON SEMBA_EXE=build/bin/semba-fdtd .venv/bin/python -m pytest test/ -m mpi --durations=20", + "dependsOn": ["CMake: build Release MPI"], + "problemMatcher": [] + }, + { + "label": "Test: all Release no-MPI", + "dependsOrder": "sequence", + "dependsOn": [ + "Test: unit Release no-MPI", + "Test: pytest Release no-MPI" + ], + "problemMatcher": [] + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..14181551 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,133 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "CMake: configure Release no-MPI", + "type": "shell", + "command": "cmake --fresh --preset rls", + "problemMatcher": [] + }, + { + "label": "CMake: build Release no-MPI", + "type": "shell", + "command": "cmake --build --preset rls", + "dependsOn": ["CMake: configure Release no-MPI"], + "problemMatcher": [] + }, + { + "label": "CMake: configure Debug no-MPI", + "type": "shell", + "command": "cmake --fresh --preset dbg", + "problemMatcher": [] + }, + { + "label": "CMake: build Debug no-MPI", + "type": "shell", + "command": "cmake --build --preset dbg", + "dependsOn": ["CMake: configure Debug no-MPI"], + "problemMatcher": [] + }, + { + "label": "CMake: configure Debug MPI", + "type": "shell", + "command": "cmake --fresh --preset dbg-mpi", + "problemMatcher": [] + }, + { + "label": "CMake: build Debug MPI", + "type": "shell", + "command": "cmake --build --preset dbg-mpi", + "dependsOn": ["CMake: configure Debug MPI"], + "problemMatcher": [] + }, + { + "label": "Debug: prepare MPI fdtd_tests", + "type": "process", + "command": "${workspaceFolder}/scripts/debug-mpi-gdbserver.sh", + "args": [ + "2", + "${workspaceFolder}/build/bin/fdtd_tests", + "--gtest_filter=${config:semba-fdtd.debug.mpiGtestFilter}" + ], + "problemMatcher": [], + "presentation": { + "reveal": "always", + "panel": "dedicated", + "clear": true + } + }, + { + "label": "Debug: stop MPI gdbservers", + "type": "process", + "command": "${workspaceFolder}/scripts/debug-mpi-gdbserver.sh", + "args": ["--stop"], + "problemMatcher": [], + "presentation": { + "reveal": "never", + "panel": "dedicated" + } + }, + { + "label": "CMake: configure Debug no-MTLN", + "type": "shell", + "command": "cmake --fresh --preset dbg-nomtln", + "problemMatcher": [] + }, + { + "label": "CMake: build Debug no-MTLN", + "type": "shell", + "command": "cmake --build --preset dbg-nomtln", + "dependsOn": ["CMake: configure Debug no-MTLN"], + "problemMatcher": "$gcc" + }, + { + "label": "Lint: Fortitude (advisory)", + "type": "shell", + "command": "fortitude check --exit-zero", + "problemMatcher": [] + }, + { + "label": "CMake: configure Release MPI", + "type": "shell", + "command": "cmake --fresh --preset rls-mpi", + "problemMatcher": [] + }, + { + "label": "CMake: build Release MPI", + "type": "shell", + "command": "cmake --build --preset rls-mpi", + "dependsOn": ["CMake: configure Release MPI"], + "problemMatcher": [] + }, + { + "label": "Test: unit Release no-MPI", + "type": "shell", + "command": "build/bin/fdtd_tests", + "dependsOn": ["CMake: build Release no-MPI"], + "problemMatcher": [] + }, + { + "label": "Test: pytest Release no-MPI", + "type": "shell", + "command": "SEMBA_FDTD_ENABLE_MPI=OFF SEMBA_FDTD_ENABLE_MTLN=ON SEMBA_FDTD_ENABLE_HDF=ON SEMBA_EXE=build/bin/semba-fdtd .venv/bin/python -m pytest test/ -m 'not mpi' --durations=20", + "dependsOn": ["CMake: build Release no-MPI"], + "problemMatcher": [] + }, + { + "label": "Test: pytest Release MPI", + "type": "shell", + "command": "SEMBA_FDTD_ENABLE_MPI=ON SEMBA_FDTD_ENABLE_MTLN=ON SEMBA_FDTD_ENABLE_HDF=ON SEMBA_EXE=build/bin/semba-fdtd .venv/bin/python -m pytest test/ -m mpi --durations=20", + "dependsOn": ["CMake: build Release MPI"], + "problemMatcher": [] + }, + { + "label": "Test: all Release no-MPI", + "dependsOrder": "sequence", + "dependsOn": [ + "Test: unit Release no-MPI", + "Test: pytest Release no-MPI" + ], + "problemMatcher": [] + } + ] +} diff --git a/doc/development.md b/doc/development.md index 1457b820..a99f9e72 100644 --- a/doc/development.md +++ b/doc/development.md @@ -1,5 +1,22 @@ # Compilation and debugging +## Contents + +- [Prebuilt binary releases](#running-from-prebuilt-binary-releases) +- [GNU/Linux compilation](#gnulinux-compilation) + - [Compilation options](#compilation-options) + - [HDF5 libraries](#hdf5-libraries) + - [MTLN and ngspice](#mtln-and-ngspice) + - [MPI](#mpi) +- [Windows (intelLLVM) compilation](#windows-intelllvm-compilation) + - [Prerequisites](#prerequisites) + - [Compilation process](#compilation-process) + - [Visual Studio debugging](#debugging-with-visual-studio) +- [WSL2 and Visual Studio Code setup](#wsl2--visual-studio-code--gfortran-setup-guide) +- [Debugging the project](#debugging-the-project) + - [MPI debugging](#debugging-with-mpi) + - [Troubleshooting](#troubleshooting) + ## Running from prebuilt binary releases Prebuilt binares are available at [releases](https://github.com/OpenSEMBA/fdtd/releases). @@ -351,55 +368,245 @@ An example of launch.json filke is given. This will use a file as argument when Now you are ready to work with the project. -### Debugging with MPI +### Debugging with MPI + +#### Overview + +GDB controls one process per debug session. +To debug an MPI job, each MPI rank is therefore started under its own +`gdbserver`, and VS Code creates one `cppdbg` session for each rank. + +The checked-in configuration supports a two-rank solver job: + +```text +VS Code: MPI: debug all ranks (2 ranks) + |-- GDB session: rank 0 -> localhost:20000 -> gdbserver -> MPI rank 0 + `-- GDB session: rank 1 -> localhost:20001 -> gdbserver -> MPI rank 1 +``` + +Both sessions are shown separately in the VS Code **Call Stack** panel. +Breakpoints are sent to both sessions, although rank-specific control flow can +mean that only one rank reaches a particular breakpoint. -gdb is a serial debugger, but can be attached to one of the parallel processes after they have started running. +#### Configuration files +| File | Responsibility | +|---|---| +| `.vscode/launch.dev.json` | Version-controlled template for debug configurations. | +| `.vscode/launch.json` | Active local configuration; ignored by Git. | +| `.vscode/settings.json` | Local input file, working directory, and test filter values. | +| `.vscode/tasks.json` | Build tasks and the MPI-safe `fdtd_tests` preparation task. | +| `scripts/debug-mpi-gdbserver.sh` | Starts MPI ranks under `gdbserver`, waits for ports, and cleans stale jobs. | -1. Modify the file launch.json to attach to a running process after launching the debugger: +Copy the version-controlled files template when initially configuring the +workspace, or when the template changes: + +```shell +cp .vscode/launch.dev.json .vscode/launch.json +``` + +Add the following project-specific values to the local +`.vscode/settings.json` file: ```json { - "version": "0.2.0", - "configurations": [ - { - "name": "(gdb) Attach", - "type": "cppdbg", - "request": "attach", - "processId": "${command:pickProcess}", - "program": "${workspaceFolder}/build/bin/semba-fdtd", - "MIMode": "gdb", - "miDebuggerPath": "/usr/bin/gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ] - } - ] + "semba-fdtd.debug.inputFile": "pw-in-box.fdtd.json", + "semba-fdtd.debug.inputCwd": "testData/cases/planewave", + "semba-fdtd.debug.mpiGtestFilter": "conformal.geometry_coord_position" } ``` -2. Use *mpirun* to execute semba-fdtd paralellized in 'np' processes: -``` -mpirun -np 2 build/bin/semba-fdtd -i input_file.fdtd.json -args +`inputFile` is relative to `inputCwd`. +Set `inputCwd` to the directory containing the JSON input and all files that +the JSON references with relative paths, such as excitation files. + +#### Build requirements + +Debug launches do not configure or rebuild the project automatically. +Build an MPI-enabled Debug executable before starting VS Code debugging: + +```shell +cmake --fresh --preset dbg-mpi +cmake --build --preset dbg-mpi -j ``` -3. Once mpirun is running, launch the debuuger. A selection box will ask which process to attach to. Type *semba-fdtd* and all mpirun processes running semba will display. Selecto which process the debugger should attach to +All CMake presets currently share `build/`. +Running a Release or non-MPI configure replaces the previous build +configuration, so rerun the commands above before MPI debugging when needed. + +#### Starting all ranks + +1. Open the VS Code **Run and Debug** view. +2. Select `MPI: debug all ranks (2 ranks)`. +3. Press F5. +4. Wait for both `MPI all ranks: rank 0` and + `MPI all ranks: rank 1` to appear in **Call Stack**. +5. Continue each session once after the initial entry stop. + +The two ranks must both be allowed to continue. +If one remains stopped before `MPI_Init` or another collective operation, the +other rank can appear blocked while it waits for that rank. + +`MPI: debug solver rank 0 (2 ranks)` is a simpler alternative. +It runs a two-rank MPI job but attaches GDB only to rank 0; +rank 1 runs normally. + +#### Startup sequence + +The all-rank configuration is a VS Code compound containing two hidden launch +configurations. +No `preLaunchTask` or problem matcher is used for the solver. +Instead, the C/C++ extension directly owns the helper processes through +`debugServerPath` and waits for readiness through `serverStarted`. + +The startup sequence is: + +1. The rank 0 launch configuration invokes + `scripts/debug-mpi-gdbserver.sh` with `--foreground-all 2`. +2. The script validates `--workdir`, changes to that directory, and executes + one `mpirun -np 2` job. +3. Each MPI process calculates its debugger port as + `20000 + OMPI_COMM_WORLD_RANK` and then executes `gdbserver`. +4. The rank 0 adapter waits for `Listening on port 20000` and connects its GDB. +5. The rank 1 launch configuration invokes the same script with + `--wait-for-port 20001` instead of starting a second MPI job. +6. The waiter checks `/proc/net/tcp` and `/proc/net/tcp6` without opening a + debugger connection. +7. When port 20001 is listening, the rank 1 adapter connects its own GDB. +8. The compound's `stopAll` option stops both sessions when either session is + terminated. + +It is important that rank 1 only waits for its port. +Starting `mpirun` from both hidden configurations would create two unrelated +MPI jobs rather than two debugger views of the same job. + +#### Port and rank mapping + +| MPI rank | `gdbserver` address | VS Code session | +|---:|---|---| +| 0 | `localhost:20000` | `MPI all ranks: rank 0` | +| 1 | `localhost:20001` | `MPI all ranks: rank 1` | + +The shell script supports more ranks, but the checked-in compound explicitly +defines two GDB sessions. +Supporting additional ranks requires another hidden launch configuration and +port waiter for each extra rank. + +#### Working directory + +The target process is launched by `gdbserver`, not directly by `cppdbg`. +Consequently, the `cwd` property alone does not reliably set the inferior's +working directory. + +The launch configuration passes the directory explicitly: + +```text +--workdir ${workspaceFolder}/${config:semba-fdtd.debug.inputCwd} +``` + +The script verifies that the directory exists and is writable, then changes to +it before starting `mpirun`. +This is required for relative JSON resources, output files, and solver control +files such as `running`, `pause`, `relaunch`, and `forcestop`. + +#### Script modes + +The helper script has the following modes: + +| Mode | Purpose | +|---|---| +| `--foreground-all ...` | Run every MPI rank under a separate `gdbserver`. | +| `--foreground-debug-rank ...` | Debug one rank and run the remaining ranks normally. | +| `--wait-for-port ` | Wait for another launch configuration's `gdbserver`. | +| `--debug-rank ...` | Detached preparation mode used by task-based workflows. | +| `--stop` | Stop a detached MPI debug job recorded by the script. | + +The `--foreground-*` modes are preferred for solver debugging because +`OpenDebugAD7` owns their lifetime directly. +This avoids races in which a background task exits before GDB connects. + +#### Debugging MPI unit tests + +The full `fdtd_tests` suite should normally be debugged as one process, even +when linked against an MPI-enabled build. +Several tests write fixed file names and are not safe to execute concurrently +on every rank. + +The `MPI: debug fdtd_tests (2 ranks)` compound is intended only for an +MPI-safe filtered test. +Set `semba-fdtd.debug.mpiGtestFilter` in `.vscode/settings.json` before using +that compound. #### Troubleshooting -1. After selecting the process the debugger should attach to, a new terminal opens with the message "Superuser access is required to attach to a process" +**GDB connection timeout** -Run the following command as super user: +Confirm that the selected configuration is +`MPI: debug all ranks (2 ranks)` and reload the VS Code window after changing +`launch.json`. +The solver configuration must use `debugServerPath`, `serverStarted`, and the +foreground script modes; it must not depend on a background `preLaunchTask`. + +Check for stale MPI or `gdbserver` processes before retrying: + +```shell +pgrep -af 'gdbserver|prterun|mpirun' +``` + +**Cannot create `running` or another relative file** + +Verify `semba-fdtd.debug.inputCwd` and confirm that the directory is writable. +The debug output prints `MPI working directory: ...` before `mpirun` starts. + +**A breakpoint is not reached** + +Confirm that the correct rank executes that code path and that the breakpoint +was installed before the one-time initialization code ran. +Also confirm that the active executable is an MPI-enabled Debug build. +A valid source breakpoint cannot force execution through a false runtime +condition. + +**Both sessions connect but the program does not advance** + +Select each rank in **Call Stack** and continue it. +One stopped rank can hold the other rank inside an MPI collective operation. + +**Warnings about unavailable system-library debug information** + +Messages about missing separate debug information for MPI or system libraries +are non-fatal when debugging project sources. +Install the corresponding system debug packages only when stepping inside those +libraries is required. + +#### Manual attach fallback + +The native compound is preferred, but GDB can also attach manually to an +already running process. +Start the MPI job in a terminal: + +```shell +mpirun -np 2 build/bin/semba-fdtd -i input_file.fdtd.json ``` -echo 0| sudo tee /proc/sys/kernel/yama/ptrace_scope + +Then use the `Attach to process` configuration and select one `semba-fdtd` +process. +This method provides one attached rank per debug session and does not perform +the automatic port coordination described above. + +If Linux blocks manual attachment because of `ptrace_scope`, temporarily relax +the restriction only on a trusted development machine: + +```shell +sudo sysctl kernel.yama.ptrace_scope=0 ``` -([source](https://github.com/Microsoft/MIEngine/wiki/Troubleshoot-attaching-to-processes-using-GDB)) + +Restore the normal restriction after debugging: + +```shell +sudo sysctl kernel.yama.ptrace_scope=1 +``` + +See the [MIEngine troubleshooting guide][miengine-troubleshooting] +for more information. + +[miengine-troubleshooting]: https://github.com/Microsoft/MIEngine/wiki/Troubleshoot-attaching-to-processes-using-GDB diff --git a/doc/docker.md b/doc/docker.md index cd943c33..2d48e519 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -5,6 +5,17 @@ All environments mount the repository at `/home/developer/workspaces/fdtd`, so b All presets use the same `build/` directory. Run CMake with `--fresh` whenever switching preset so the previous compiler and configuration cache is discarded. +## Contents + +- [Prerequisite](#prerequisite) +- [Environments](#environments) +- [Build images](#build-images) +- [Compile with quality](#compile-with-quality) +- [Compile with Intel oneAPI](#compile-with-intel-oneapi) +- [Run binaries and examples](#run-binaries-and-examples) +- [Run tests](#run-tests) +- [Development environment](#development-environment) + ## Prerequisite Initialise submodules before building an image: diff --git a/doc/fdtdjson.md b/doc/fdtdjson.md index dec86010..e8d7e8f1 100644 --- a/doc/fdtdjson.md +++ b/doc/fdtdjson.md @@ -5,6 +5,26 @@ Being in JSON, it can be easily navigated with most text editors, such as Visual There are also multiple tools to read and write them. This document assumes that you are familiar with the basic JSON notation, a brief explanation on this notation can be found [here](https://www.w3schools.com/js/js_json_syntax.asp). +## Contents + +- [Examples](#examples) +- [FDTD-JSON objects description](#fdtd-json-objects-description) + - [`general`, `background`, and `boundary`](#general) + - [`mesh`](#mesh) + - [`materials`](#materials) + - [`materialAssociations`](#materialassociations) + - [`probes`](#probes) + - [`sources`](#sources) +- [Material types](#bulk-materials) + - [`lumped` models](#lumped) + - [Wire and multiwire materials](#wire) + - [Terminals and connectors](#terminal) +- [Probe types](#probe-types) +- [Probe domains](#domain) +- [Source types](#planewave) + +## Examples + The following are examples of valid inputs: 1. An empty space illuminated by a plane wave: [planewave.fdtd.json](testData/input_examples/planewave.fdtd.json). The field at a point close to the center is recorded. diff --git a/doc/mtln.md b/doc/mtln.md index 57c71ee7..a1b2f879 100644 --- a/doc/mtln.md +++ b/doc/mtln.md @@ -5,6 +5,16 @@ bibliography: # The `mtln` solver module This module allows to solve networks of multiconductor transmission line bundles in the time domain. + +## Contents + +- [Multiconductor transmission lines](#multiconductor-transmission-lines) +- [Networks](#networks) +- [Bundles](#bundles) +- [Features](#features) + - [Coupling to NgSpice](#coupling-to-ngspice) + - [Dispersive elements](#dispersive-elements) + In the context of transmission line theory, a working definition of each of the terms above is: * A **multiconductor tranmission line** is tranmission line composed of more than one conductor (and the reference conductor), i.e a tranmssion line composed of 3 or more conductors, where one of them is taken as the reference. @@ -137,4 +147,3 @@ Dispersive elements are those whose properties depend on frequency. The solver w - diff --git a/scripts/debug-mpi-gdbserver.sh b/scripts/debug-mpi-gdbserver.sh new file mode 100755 index 00000000..1ef3a38f --- /dev/null +++ b/scripts/debug-mpi-gdbserver.sh @@ -0,0 +1,239 @@ +#!/usr/bin/env bash +set -euo pipefail + +state_dir="${TMPDIR:-/tmp}/semba-fdtd-mpi-gdbserver-${UID}" +pid_file="${state_dir}/pid" +log_file="${state_dir}/output.log" + +print_log() { + if [[ -f "$log_file" ]]; then + while IFS= read -r line; do + printf '%s\n' "$line" >&2 + done < "$log_file" + fi +} + +stop_job() { + local pid cmdline + + if [[ ! -f "$pid_file" ]]; then + return + fi + + IFS= read -r pid < "$pid_file" + if [[ "$pid" =~ ^[1-9][0-9]*$ ]] && kill -0 "$pid" 2>/dev/null; then + cmdline="$(tr '\0' ' ' < "/proc/${pid}/cmdline" 2>/dev/null || true)" + if [[ "$cmdline" != *mpirun* && "$cmdline" != *mpiexec* && "$cmdline" != *prterun* ]]; then + printf 'Refusing to stop unexpected process %s: %s\n' "$pid" "$cmdline" >&2 + return 1 + fi + + kill "$pid" 2>/dev/null || true + for _ in {1..30}; do + if ! kill -0 "$pid" 2>/dev/null; then + break + fi + sleep 0.1 + done + if kill -0 "$pid" 2>/dev/null; then + kill -KILL "$pid" 2>/dev/null || true + fi + fi + + rm -f "$pid_file" +} + +port_is_listening() { + local port_hex table slot local_address remote_address connection_state remainder + + printf -v port_hex '%04X' "$1" + for table in /proc/net/tcp /proc/net/tcp6; do + [[ -r "$table" ]] || continue + while read -r slot local_address remote_address connection_state remainder; do + if [[ "${local_address##*:}" == "$port_hex" && "$connection_state" == "0A" ]]; then + return 0 + fi + done < "$table" + done + return 1 +} + +mkdir -p "$state_dir" + +if [[ "${1:-}" == "--stop" ]]; then + stop_job + exit 0 +fi + +if [[ "${1:-}" == "--workdir" ]]; then + workdir="${2:-}" + if [[ ! -d "$workdir" ]]; then + printf 'MPI debug working directory does not exist: %s\n' "$workdir" >&2 + exit 2 + fi + if [[ ! -w "$workdir" ]]; then + printf 'MPI debug working directory is not writable: %s\n' "$workdir" >&2 + exit 2 + fi + cd "$workdir" + shift 2 +fi + +if [[ "${1:-}" == "--wait-for-port" ]]; then + port="${2:-}" + if ! [[ "$port" =~ ^[0-9]+$ ]] || ((port < 1 || port > 65535)); then + printf 'Invalid port: %s\n' "$port" >&2 + exit 2 + fi + + for _ in {1..300}; do + if port_is_listening "$port"; then + printf 'MPI gdbserver ready on port %s\n' "$port" + trap 'exit 0' INT TERM + while true; do + sleep 3600 + done + fi + sleep 0.1 + done + + printf 'Timed out waiting for MPI gdbserver on port %s.\n' "$port" >&2 + exit 1 +fi + +debug_rank="" +foreground=false +foreground_all=false +if [[ "${1:-}" == "--foreground-all" ]]; then + foreground_all=true + shift +elif [[ "${1:-}" == "--foreground-debug-rank" ]]; then + foreground=true + if [[ "$#" -lt 3 ]]; then + printf 'Missing rank after --foreground-debug-rank.\n' >&2 + exit 2 + fi + debug_rank="$2" + shift 2 +elif [[ "${1:-}" == "--debug-rank" ]]; then + if [[ "$#" -lt 3 ]]; then + printf 'Missing rank after --debug-rank.\n' >&2 + exit 2 + fi + debug_rank="$2" + shift 2 +fi + +if [ "$#" -lt 3 ]; then + printf 'Usage: %s [arguments ...]\n' "$0" >&2 + printf ' %s --workdir \n' "$0" >&2 + printf ' %s --debug-rank [arguments ...]\n' "$0" >&2 + printf ' %s --foreground-all [arguments ...]\n' "$0" >&2 + printf ' %s --foreground-debug-rank [arguments ...]\n' "$0" >&2 + printf ' %s --wait-for-port \n' "$0" >&2 + printf ' %s --stop\n' "$0" >&2 + exit 2 +fi + +ranks="$1" +program="$2" +shift 2 + +if ! [[ "$ranks" =~ ^[1-9][0-9]*$ ]]; then + printf 'The number of MPI ranks must be a positive integer: %s\n' "$ranks" >&2 + exit 2 +fi + +if [[ -n "$debug_rank" ]] && { + ! [[ "$debug_rank" =~ ^[0-9]+$ ]] || ((debug_rank >= ranks)); +}; then + printf 'The debug rank must be between 0 and %s: %s\n' "$((ranks - 1))" "$debug_rank" >&2 + exit 2 +fi + +if [[ ! -x "$program" ]]; then + printf 'MPI debug executable is missing or not executable: %s\n' "$program" >&2 + exit 2 +fi + +stop_job + +if [[ "$foreground_all" == true ]]; then + printf '%s\n' "$$" > "$pid_file" + printf 'MPI working directory: %s\n' "$PWD" + printf 'Starting %s MPI gdbserver ranks on ports 20000-%s\n' \ + "$ranks" "$((20000 + ranks - 1))" + exec mpirun --tag-output -np "$ranks" bash -c ' + port=$((20000 + OMPI_COMM_WORLD_RANK)) + exec gdbserver --no-disable-randomization --once ":${port}" "$@" + ' gdbserver-rank "$program" "$@" +fi + +if [[ "$foreground" == true ]]; then + printf '%s\n' "$$" > "$pid_file" + printf 'MPI working directory: %s\n' "$PWD" + printf 'Starting %s MPI ranks with rank %s under gdbserver on port 20000\n' \ + "$ranks" "$debug_rank" + exec mpirun --tag-output -np "$ranks" bash -c ' + debug_rank=$1 + shift + if [[ "$OMPI_COMM_WORLD_RANK" == "$debug_rank" ]]; then + exec gdbserver --no-disable-randomization --once :20000 "$@" + fi + exec "$@" + ' mpi-debug-rank "$debug_rank" "$program" "$@" +fi + +: > "$log_file" + +if [[ -n "$debug_rank" ]]; then + printf 'Starting %s MPI ranks with rank %s under gdbserver on port 20000\n' \ + "$ranks" "$debug_rank" + expected_servers=1 + nohup mpirun --tag-output -np "$ranks" bash -c ' + debug_rank=$1 + shift + if [[ "$OMPI_COMM_WORLD_RANK" == "$debug_rank" ]]; then + exec gdbserver --no-disable-randomization --once :20000 "$@" + fi + exec "$@" + ' mpi-debug-rank "$debug_rank" "$program" "$@" > "$log_file" 2>&1 < /dev/null & +else + printf 'Starting %s MPI gdbserver ranks on ports 20000-%s\n' \ + "$ranks" "$((20000 + ranks - 1))" + expected_servers="$ranks" + nohup mpirun --tag-output -np "$ranks" bash -c ' + port=$((20000 + OMPI_COMM_WORLD_RANK)) + exec gdbserver --no-disable-randomization --once ":${port}" "$@" + ' gdbserver-rank "$program" "$@" > "$log_file" 2>&1 < /dev/null & +fi +mpi_pid=$! +printf '%s\n' "$mpi_pid" > "$pid_file" + +for _ in {1..150}; do + ready=0 + while IFS= read -r line; do + if [[ "$line" == *"Listening on port "* ]]; then + ((ready += 1)) + fi + done < "$log_file" + + if ((ready >= expected_servers)); then + printf 'MPI gdbserver is ready.\n' + exit 0 + fi + + if ! kill -0 "$mpi_pid" 2>/dev/null; then + printf 'MPI gdbserver exited before all ranks were ready.\n' >&2 + print_log + rm -f "$pid_file" + exit 1 + fi + + sleep 0.1 +done + +printf 'Timed out waiting for all MPI gdbserver ranks.\n' >&2 +print_log +stop_job +exit 1 From 12626d11ded7c6bb3925a5e3b4a74136c8c356b2 Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Fri, 24 Jul 2026 06:28:37 +0000 Subject: [PATCH 11/38] FDTD | Spec | Define robust output layer --- .../contracts/output-metadata-schema.md | 31 +++++ specs/changes/robust-output-layer/plan.md | 118 ++++++++++++++++++ specs/changes/robust-output-layer/spec.md | 48 +++++++ specs/changes/robust-output-layer/tasks.md | 61 +++++++++ 4 files changed, 258 insertions(+) create mode 100644 specs/changes/robust-output-layer/contracts/output-metadata-schema.md create mode 100644 specs/changes/robust-output-layer/plan.md create mode 100644 specs/changes/robust-output-layer/spec.md create mode 100644 specs/changes/robust-output-layer/tasks.md diff --git a/specs/changes/robust-output-layer/contracts/output-metadata-schema.md b/specs/changes/robust-output-layer/contracts/output-metadata-schema.md new file mode 100644 index 00000000..3b1beabc --- /dev/null +++ b/specs/changes/robust-output-layer/contracts/output-metadata-schema.md @@ -0,0 +1,31 @@ +# Output Metadata Schema + +## Version + +Schema version `1` describes one probe output. + +## Required Fields + +Each descriptor identifies the schema version, probe identifier, sampled quantity, domain, lifecycle state, and artifacts. +Spatial probes also identify lower and upper bounds. +Each artifact identifies its kind, relative path, and whether it is required. + +Artifact paths are relative to the descriptor file. +Descriptors must not contain absolute paths. + +## Lifecycle + +An output is `declared` after its descriptor and required artifact set are known. +It is `active` while samples may be recorded. +It is `finalising` while required artifacts are being made durable. +It is `complete` only after every required artifact has been finalised. +It is `failed` when publication cannot complete. + +Failed descriptors retain diagnostic context and must not report completion. + +## Binary Artifacts + +Binary artifacts declare their byte order, numeric representation, record size, and complex-value representation. +Version `1` uses little-endian records. +Complex values are stored as adjacent real and imaginary values. +Consumers must reject unsupported schema versions or binary layouts. diff --git a/specs/changes/robust-output-layer/plan.md b/specs/changes/robust-output-layer/plan.md new file mode 100644 index 00000000..b446d706 --- /dev/null +++ b/specs/changes/robust-output-layer/plan.md @@ -0,0 +1,118 @@ +# Plan: Robust Output Layer + +## Architecture + +The bounded context is solver-result publication. +It begins when configured probes are initialised and ends when their artifacts and run manifest are finalised. +It does not change field sampling, numerical values, or input interpretation. + +The dependency direction is `infrastructure -> application -> domain`. +The domain layer defines output contracts, artifact descriptions, lifecycle states, and partition ownership rules without importing filesystem, distributed-execution, or visualisation-writer APIs. +The application layer coordinates probe lifecycle operations, selects one writer for scalar outputs, and invokes ports for artifact persistence and distributed aggregation. +The infrastructure layer adapts native filesystems, the external visualisation writer, and distributed communication to those application ports. + +`output_m` becomes the sole application entry point for output lifecycle coordination. +Existing probe-specific modules retain responsibility for collecting their physical samples, but delegate artifact publication and metadata updates to the application layer. +The legacy observation implementation is removed after equivalent new-layer coverage exists. + +Cross-context communication is limited to application-service calls and output lifecycle events. +No framework, filesystem, or distributed-execution type crosses into the domain layer. +No repositories are required because output publication is an append/finalise workflow rather than aggregate persistence. + +## Data Models + +`probe_output_t` is the aggregate for one configured probe output. +Its identity is the immutable probe identifier within a simulation run. +It owns the probe definition reference, artifact set, publication state, writer ownership, and, for volumetric data, the output partition. + +`output_artifact_t` is a value object. +It has structural equality over artifact kind, relative path, representation, byte layout, and required/optional status. +Artifact kinds include text result, binary result, visualisation metadata, visualisation heavy data, geometry result, and probe metadata. + +`probe_metadata_t` is the externally published representation of a `probe_output_t`. +It carries a schema version, probe identity, sampled quantity, bounds where applicable, domain, artifacts, precision and layout information, sample coverage, and lifecycle state. +Its artifact references must be relative to the probe metadata location. + +`output_partition_t` is a value object describing global bounds, local owned bounds, local shape, and zero-based global offset. +It has structural equality over all coordinates and shapes. +Its invariants are disjoint ownership between participants, complete coverage of the requested volume, and no duplicate shared boundary plane. + +`output_lifecycle_t` is a state value with the states declared, active, finalising, complete, and failed. +Only an active output may accept samples. +Only a complete output may advertise all required artifacts as complete. +A failed output must retain diagnostic context and must not advertise incomplete artifacts as complete. + +`run_output_manifest_t` is the aggregate for all probe outputs in one simulation run. +Its identity is the simulation run identifier. +It is published by the designated run writer only after every configured probe has reached a terminal state. + +## Interface Contracts + +The application layer exposes these use cases: + +- `declare_probe_output(probe_definition, execution_context) -> probe_output_t` +- `record_probe_sample(probe_output_t, sample_batch)` +- `flush_probe_output(probe_output_t)` +- `finalise_probe_output(probe_output_t)` +- `finalise_run_outputs(run_output_manifest_t)` + +The domain-facing ports are: + +- `artifact_store`: create, replace atomically, append, and inspect output artifacts using relative artifact identities. +- `metadata_publisher`: publish an initial descriptor and replace it with a later lifecycle state. +- `scalar_result_writer`: publish owner-selected scalar, wire, bulk, far-field, and geometry payloads. +- `volumetric_result_writer`: define a dataset, publish local or complete volume data, and finalise the visualisation artifact pair. +- `output_collective`: determine scalar ownership, create a probe participant group, exchange partition data, and aggregate data when collective publication is unavailable. + +The external visualisation library and native filesystem sit behind `volumetric_result_writer` and `artifact_store` respectively. +Distributed execution sits behind `output_collective`. +The application layer receives status values from each port and converts failures into contextual solver errors. + +The application emits `ProbeOutputDeclared`, `ProbeOutputFlushed`, `ProbeOutputFinalised`, and `ProbeOutputFailed` lifecycle events. +The run-manifest application service consumes terminal probe events and publishes the run manifest only when all declared probes are terminal. + +## Implementation Phases + +1. Output Contract Foundation — Define probe-output, artifact, metadata, lifecycle, and manifest models; establish the versioned metadata schema; specify required artifact sets per probe family; and add contract tests for empty, active, complete, and failed outputs. +2. Portable Artifact Infrastructure — Replace shell-dependent directory and file handling with native portable adapters; support nested paths and spaces; provide atomic metadata replacement; and make all path references relative and platform-neutral. +3. Lifecycle Coordinator and Scalar Ownership — Refactor `output_m` into the application coordinator; declare metadata for every probe during initialisation; select exactly one owner for scalar, wire, bulk, far-field, and geometry outputs; and publish their existing payloads through the common artifact contract. +4. Volumetric Serial Publication — Adapt movie and frequency probes to the external visualisation writer through the volumetric port; create the binary payload and complete visualisation pair for both domains; publish complex frequency data without discarding phase information; and correct the binary record contract. +5. Distributed Volumetric Publication — Apply the existing partition model to all volumetric components; use disjoint local regions for collective publication; make all participants execute lifecycle operations in the same order; and provide a root-aggregation publication mode when collective file publication is unavailable. +6. Run Discovery and Legacy Retirement — Publish an accurate root-owned run manifest from declared artifacts; remove the old observation dispatch path and obsolete direct writers; and preserve unrelated solver facilities only where they are outside the output bounded context. +7. Verification Matrix — Add unit and integration coverage for every probe family, zero-sample probes, nested and spaced paths, single-process execution, distributed collective execution, and distributed aggregation execution; validate artifact existence, metadata consistency, spatial coverage, and absence of duplicate boundary data. + +## Decisions & Rationale + +| Decision | Rationale | Alternatives Considered | +|----------|-----------|------------------------| +| Publish one versioned metadata descriptor per probe | Gives tools a stable, complete source of truth independent of naming conventions and preserves discovery for zero-sample probes | Per-run text list only; naming conventions only | +| Retain existing human-readable payloads for applicable probes | Preserves established user workflows while adding reliable machine discovery | Replace all payloads with one representation | +| Require binary and visualisation artifacts for volumetric probes | Meets volumetric portability and visualisation requirements without imposing binary payloads on scalar workflows | Binary payloads for every probe; visualisation artifacts for every probe | +| Give one owner responsibility for scalar artifacts | Prevents concurrent writes and matches the single logical result requirement | Rank-suffixed files; concurrent append operations | +| Use disjoint partition publication for volumetric artifacts | Avoids duplicate process-boundary samples and scales without reconstructing complete volumes on every participant | Full-volume reduction on every participant; independent per-rank visualisation files | +| Prefer collective publication with root aggregation fallback | Supports efficient capable environments while retaining correct results where collective publication is not available | Require collective publication; always aggregate to root | +| Isolate external writer, filesystem, and distributed execution behind ports | Protects output semantics from platform and library behaviour and preserves inward dependency direction | Call external APIs directly from probe modules | +| Retire the legacy output implementation after parity tests | Removes conflicting output semantics and eliminates a second unsupported distributed path | Maintain both implementations indefinitely | + +## Constraints & Risks + +The external visualisation writer requires all distributed participants to perform lifecycle calls in matching order. +The application coordinator must therefore make probe membership and finalisation decisions consistently across participants. + +Root aggregation is a correctness fallback, not the preferred large-volume path. +It can require root memory proportional to a complete requested volume and must report insufficient-resource failures clearly. + +Shared field planes have component-specific ownership rules. +Partition validation must cover every supported component and rank boundary before distributed publication is enabled. + +Portable binary artifacts require an explicit versioned layout, numeric representation, byte order, and complex-value convention in metadata. +The visualisation data pair remains the authoritative portable representation when a consumer cannot read the binary layout. + +Atomic replacement semantics and path handling differ by operating system. +The artifact-store adapter must define failure behaviour for partial finalisation and must never mark metadata complete before all required artifacts are durable. + +The current codebase contains direct output calls and legacy utilities outside the new dispatcher. +Retirement must be preceded by a dependency audit so that non-output snapshot or reporting capabilities are not unintentionally removed. + +No `FRAMEWORK.md` was found in the repository. +This plan nevertheless applies the supplied non-negotiable dependency rule and keeps external dependencies behind ports. diff --git a/specs/changes/robust-output-layer/spec.md b/specs/changes/robust-output-layer/spec.md new file mode 100644 index 00000000..8a3bc111 --- /dev/null +++ b/specs/changes/robust-output-layer/spec.md @@ -0,0 +1,48 @@ +# Spec: Robust Output Layer + +## Problem + +Simulation output is not consistently reliable across supported operating systems and execution modes. +Distributed runs can allow multiple workers to target the same artifact, which can leave incomplete or corrupted results. +Probe types also expose inconsistent artifact sets, so users and downstream tools cannot reliably discover, interpret, or validate generated results. + +## Goals + +- Ensure every configured probe has a complete, machine-readable description of its generated artifacts. +- Ensure distributed and single-process simulations produce one logically complete result for each configured probe. +- Ensure volumetric probes consistently provide both a portable binary payload and a visualisation-ready data pair. +- Preserve the existing human-readable outputs for probe types that provide them. +- Make output creation, replacement, and finalisation reliable on supported Windows and Linux environments. +- Ensure output artifacts remain discoverable when a probe records no samples. + +## Non-Goals + +- Changing the physical quantities, sampling cadence, or numerical values produced by probes. +- Adding new probe request types. +- Changing input-file semantics for existing simulations. +- Supporting operating systems outside the currently supported Windows and Linux environments. +- Providing a graphical result browser. + +## User Stories + +- As a simulation user, I want every requested probe to publish a machine-readable descriptor so that I can reliably discover its result files and interpret their contents. [P1] +- As a simulation user, I want a distributed run to produce the same logical probe results as an equivalent single-process run so that I can scale simulations without corrupting or duplicating output. [P1] +- As a visualisation user, I want every volumetric probe to publish a complete data and metadata pair so that I can open the result without reconstructing missing files. [P1] +- As an automation author, I want artifact metadata to identify the probe, sampled quantity, bounds, domain, representation, and completion state so that post-processing can validate results without relying on file-name conventions. [P1] +- As a simulation user, I want existing text-oriented probe results to remain available so that established manual and scripted workflows continue to work. [P2] +- As a cross-platform user, I want output paths containing nested directories or spaces to work consistently so that result location does not depend on the operating system. [P2] + +## Success Criteria + +- Each configured probe produces exactly one readable metadata descriptor before simulation output is finalised, including when it records zero samples. +- Each descriptor identifies its probe request, sampled quantity, spatial extent where applicable, sampling domain, generated artifacts, data representation, and whether output is complete. +- Each scalar, wire, bulk, far-field, and geometry probe retains its applicable human-readable result artifact and has a descriptor that references it. +- Each volumetric time-domain and frequency-domain probe produces a binary result artifact, a visualisation-ready metadata-and-heavy-data pair, and a descriptor that references all three. +- Equivalent single-process and distributed executions expose the same logical artifact set and sample coverage for every probe; no artifact contains duplicate ownership at a process boundary. +- A distributed execution creates no conflicting concurrent writes to a shared probe artifact. +- Output creation and finalisation succeed for nested output paths, including paths with spaces, on supported Windows and Linux environments. +- The output subsystem reports a contextual failure when an artifact cannot be created, written, or finalised; it does not silently leave an artifact declared complete when it is not. + +## Open Questions + +- None. diff --git a/specs/changes/robust-output-layer/tasks.md b/specs/changes/robust-output-layer/tasks.md new file mode 100644 index 00000000..c95c4145 --- /dev/null +++ b/specs/changes/robust-output-layer/tasks.md @@ -0,0 +1,61 @@ +# Tasks: Robust Output Layer + +## Phase 1: Setup & Foundations + +- [x] [T01] [US1] [US3] [US4] Define the versioned probe artifact, metadata, lifecycle, and binary-layout contracts, including explicit byte order, numeric representation, complex-value convention, and required artifacts per probe family in `src_output/outputTypes.F90`. +- [x] [T02] [US1] [US3] [US4] Add contract tests for declared, active, complete, failed, and zero-sample probe outputs in `test/output/test_output.F90` and register them in `test/output/CMakeLists.txt`. +- [x] [T03] [P] [US2] Extend component and rank-boundary ownership tests to prove disjoint complete volumetric coverage and zero-based offsets in `test/output/test_output_decomposition.F90`. +- [x] [T04] [P] [US2] Define serial-versus-distributed equivalence fixtures that compare artifact identities, coordinate coverage, sample counts, and duplicate boundary ownership in `test/output/test_output.F90`. +- [x] [T05] [US1] [US4] Document the metadata schema, relative-artifact-reference rule, lifecycle state transitions, and binary compatibility guarantees in `specs/changes/robust-output-layer/contracts/output-metadata-schema.md`. +- [ ] [T10] [US6] Replace shell-dependent folder and file operations with portable nested-directory creation and atomic replacement adapters in `src_utils/directoryUtils.F90`, `src_utils/CMakeLists.txt`, and `src_utils/filesystemAdapter.c`. + +## Phase 2: Domain & Application Layer + +- [x] [T06] [US1] [US2] [US4] Add probe-output lifecycle coordination, artifact declaration, terminal-state validation, and a root-owned run manifest model to `src_output/output.F90`. +- [x] [T07] [US2] Add per-probe participant selection and scalar writer ownership using the output contract rather than rank-derived file names in `src_output/output.F90` and `src_output/outputTypes.F90`. +- [x] [T08] [US2] Apply `build_output_partition` to every volumetric output request and retain each rank's global and local bounds in `src_output/output.F90` and `src_output/outputDecomposition.F90`. +- [ ] [T09] [US5] Route point, wire, bulk, far-field, and geometry probe publication through declared artifacts while preserving their existing human-readable payloads in `src_output/pointProbeOutput.F90`, `src_output/wireProbeOutput.F90`, `src_output/bulkProbeOutput.F90`, `src_output/farFieldProbeOutput.F90`, and `src_output/mapVTKOutput.F90`. + +## Phase 3: Infrastructure & Adapters + +- [ ] [T11] [US1] [US4] Implement initial and final machine-readable probe metadata publication, including relative artifact references and failure state, in `src_output/outputMetadata.F90` and add it to `src_output/CMakeLists.txt`. +- [ ] [T12] [US3] [US4] Implement the portable stream binary writer and metadata-backed layout validation in `src_output/outputBinary.F90`, `src_output/outputTypes.F90`, and `src_output/CMakeLists.txt`. +- [ ] [T13] [US3] Adapt the external visualisation writer behind a volumetric publication interface and link it into the output target in `src_output/outputVisualisation.F90`, `src_output/CMakeLists.txt`, and `external/CMakeLists.txt`. +- [ ] [T14] [US2] Implement the distributed output collective adapter for deterministic probe ownership, collective partition publication, and root aggregation fallback in `src_output/outputCollective.F90` and `src_output/CMakeLists.txt`. + +## Phase 4: Integration & Validation + +- [ ] [T15] [US3] Integrate the binary writer, visualisation adapter, and metadata lifecycle into time-domain volumetric probes in `src_output/movieProbeOutput.F90` and `src_output/output.F90`. +- [ ] [T16] [US3] Integrate the binary writer, visualisation adapter, and metadata lifecycle into frequency-domain volumetric probes, preserving complex values and correcting component record ordering, in `src_output/frequencySliceProbeOutput.F90` and `src_output/output.F90`. +- [ ] [T17] [US2] [US6] Integrate collective hyperslab publication and root aggregation fallback with the solver output lifecycle in `src_output/output.F90`, `src_output/movieProbeOutput.F90`, and `src_output/frequencySliceProbeOutput.F90`. +- [ ] [T18] [US1] [US2] [US4] Replace the stale per-rank output-request register with an artifact-derived root-owned run manifest in `src_output/output.F90` and remove obsolete registration handling from `src_main_pub/semba_fdtd.F90`. +- [ ] [T19] [US2] Retire the legacy observation dispatch and direct output writers only after the new path is covered, updating `CMakeLists.txt`, `src_main_pub/timestepping.F90`, `src_main_pub/observation.F90`, `src_main_pub/vtk.F90`, `src_main_pub/xdmf.F90`, and `src_main_pub/xdmf_h5.F90`. +- [ ] [T20] [US1] [US3] [US4] [US5] [US6] Add serial integration tests covering every probe family, zero-sample probes, nested paths, spaced paths, metadata descriptors, binary layout, and complete visualisation pairs in `test/output/test_output.F90`, `test/output/test_output_utils.F90`, `test/output/CMakeLists.txt`, and `external/xdmf-hdf5/test/verify_pairs.py`. +- [ ] [T21] [US2] Add distributed integration tests for collective and root-aggregation output modes, asserting serial equivalence and no duplicate interface data, in `test/output/test_output_mpi.F90`, `test/output/CMakeLists.txt`, and `CMakeLists.txt`. +- [ ] [T22] [US2] [US3] [US6] Add the output verification matrix to continuous integration for Linux single-process, Linux distributed collective, Linux distributed aggregation, and Windows single-process builds in `.github/workflows/ubuntu.yml` and `.github/workflows/windows.yml`. + +## Dependency Graph + +T01 → T02 → T06 → T07 → T09 → T18 → T19 → T20 → T22 + +T01 → T03 → T08 → T14 → T17 → T21 → T22 + +T01 → T04 → T21 + +T01 → T05 → T10 → T09 + +T10 → T11 → T18 + +T01 → T06 → T12 → T15 → T20 + +T01 → T06 → T13 → T15 + +T01 → T06 → T13 → T16 → T20 + +T14 → T17 + +## MVP Scope + +The deployable minimum slice is T01, T02, T05 through T07, T09 through T13, T15, T16, T18, and T20. +It establishes a serial-safe output lifecycle, one metadata descriptor per probe, retained human-readable scalar outputs, complete volumetric binary and visualisation artifacts, portable path handling, and serial validation. +T03, T04, T08, T14, T17, T19, T21, and T22 extend that slice to distributed parity, legacy retirement, and the full platform verification matrix. From 9c8d9008ed3a196859fad289729b61ce857f2d4c Mon Sep 17 00:00:00 2001 From: adrianarce-elemwave Date: Fri, 24 Jul 2026 06:28:37 +0000 Subject: [PATCH 12/38] FDTD | Feature | Add XDMF HDF5 library with parallel support --- .github/workflows/ubuntu.yml | 38 +- .github/workflows/windows.yml | 3 + CMakeLists.txt | 39 +- doc/development.md | 59 +- external/CMakeLists.txt | 6 +- external/xdmf-hdf5/CMakeLists.txt | 124 + external/xdmf-hdf5/LICENSE | 21 + external/xdmf-hdf5/README.md | 181 ++ .../cmake/CheckParallelHdf5Fortran.cmake | 40 + .../xdmf-hdf5/cmake/XDMFHdf5Config.cmake.in | 20 + external/xdmf-hdf5/examples/CMakeLists.txt | 12 + external/xdmf-hdf5/examples/basic_writer.F90 | 52 + .../xdmf-hdf5/examples/generated/README.md | 170 ++ .../examples/generated/curvilinear.h5 | Bin 0 -> 5064 bytes .../examples/generated/curvilinear.xdmf | 14 + .../xdmf-hdf5/examples/generated/mixed.h5 | Bin 0 -> 7336 bytes .../xdmf-hdf5/examples/generated/mixed.xdmf | 18 + .../examples/generated/time-series.h5 | Bin 0 -> 5022848 bytes .../examples/generated/time-series.xdmf | 768 +++++ .../xdmf-hdf5/examples/generated/uniform.h5 | Bin 0 -> 8968 bytes .../xdmf-hdf5/examples/generated/uniform.xdmf | 22 + .../examples/generated/unstructured.h5 | Bin 0 -> 53048 bytes .../examples/generated/unstructured.xdmf | 248 ++ .../xdmf-hdf5/examples/generated/volume.h5 | Bin 0 -> 83200 bytes .../xdmf-hdf5/examples/generated/volume.xdmf | 22 + external/xdmf-hdf5/src/xdmf_hdf5.F90 | 2590 +++++++++++++++++ external/xdmf-hdf5/src/xdmf_hdf5_backend.F90 | 1135 ++++++++ external/xdmf-hdf5/src/xdmf_model.F90 | 424 +++ external/xdmf-hdf5/src/xdmf_xml.F90 | 460 +++ external/xdmf-hdf5/test/CMakeLists.txt | 176 ++ external/xdmf-hdf5/test/create_directory.c | 47 + external/xdmf-hdf5/test/generate_cases.F90 | 811 ++++++ .../xdmf-hdf5/test/generate_parallel_case.F90 | 103 + external/xdmf-hdf5/test/verify_pairs.py | 352 +++ external/xdmf-hdf5/test/verify_paraview.py | 98 + set_precompiled_libraries.cmake | 34 +- src_main_pub/postprocess.F90 | 4 - src_main_pub/snapxdmf.F90 | 201 +- src_main_pub/xdmf_h5.F90 | 437 ++- src_output/CMakeLists.txt | 14 +- src_output/frequencySliceProbeOutput.F90 | 148 +- src_output/movieProbeOutput.F90 | 289 +- src_output/output.F90 | 1 + src_output/outputTypes.F90 | 14 + src_output/xdmfAPI.F90 | 561 ---- test/CMakeLists.txt | 2 - test/fdtd_tests.cpp | 1 - test/output/CMakeLists.txt | 18 - test/output/test_xdmfAPI.F90 | 286 -- test/output/xdmfAPI_tests.cpp | 1 - test/output/xdmfAPI_tests.h | 18 - 51 files changed, 8556 insertions(+), 1526 deletions(-) create mode 100644 external/xdmf-hdf5/CMakeLists.txt create mode 100644 external/xdmf-hdf5/LICENSE create mode 100644 external/xdmf-hdf5/README.md create mode 100644 external/xdmf-hdf5/cmake/CheckParallelHdf5Fortran.cmake create mode 100644 external/xdmf-hdf5/cmake/XDMFHdf5Config.cmake.in create mode 100644 external/xdmf-hdf5/examples/CMakeLists.txt create mode 100644 external/xdmf-hdf5/examples/basic_writer.F90 create mode 100644 external/xdmf-hdf5/examples/generated/README.md create mode 100644 external/xdmf-hdf5/examples/generated/curvilinear.h5 create mode 100644 external/xdmf-hdf5/examples/generated/curvilinear.xdmf create mode 100644 external/xdmf-hdf5/examples/generated/mixed.h5 create mode 100644 external/xdmf-hdf5/examples/generated/mixed.xdmf create mode 100644 external/xdmf-hdf5/examples/generated/time-series.h5 create mode 100644 external/xdmf-hdf5/examples/generated/time-series.xdmf create mode 100644 external/xdmf-hdf5/examples/generated/uniform.h5 create mode 100644 external/xdmf-hdf5/examples/generated/uniform.xdmf create mode 100644 external/xdmf-hdf5/examples/generated/unstructured.h5 create mode 100644 external/xdmf-hdf5/examples/generated/unstructured.xdmf create mode 100644 external/xdmf-hdf5/examples/generated/volume.h5 create mode 100644 external/xdmf-hdf5/examples/generated/volume.xdmf create mode 100644 external/xdmf-hdf5/src/xdmf_hdf5.F90 create mode 100644 external/xdmf-hdf5/src/xdmf_hdf5_backend.F90 create mode 100644 external/xdmf-hdf5/src/xdmf_model.F90 create mode 100644 external/xdmf-hdf5/src/xdmf_xml.F90 create mode 100644 external/xdmf-hdf5/test/CMakeLists.txt create mode 100644 external/xdmf-hdf5/test/create_directory.c create mode 100644 external/xdmf-hdf5/test/generate_cases.F90 create mode 100644 external/xdmf-hdf5/test/generate_parallel_case.F90 create mode 100644 external/xdmf-hdf5/test/verify_pairs.py create mode 100644 external/xdmf-hdf5/test/verify_paraview.py delete mode 100644 src_output/xdmfAPI.F90 delete mode 100644 test/output/test_xdmfAPI.F90 delete mode 100644 test/output/xdmfAPI_tests.cpp delete mode 100644 test/output/xdmfAPI_tests.h diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index e36a8674..58cc4f1d 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -71,7 +71,7 @@ jobs: if: matrix.compiler.name=='gcc' run: | sudo apt update - sudo apt install libhdf5-dev libopenmpi-dev + sudo apt install libhdf5-dev libhdf5-openmpi-dev libopenmpi-dev - name: Setup fortran compiler uses: fortran-lang/setup-fortran@v1 @@ -94,6 +94,9 @@ jobs: - name: Run unit tests run: build/bin/fdtd_tests + - name: Run CTest suites + run: ctest --test-dir build --output-on-failure + - name: Run python tests if: matrix.new-output-module=='OFF' env: @@ -101,6 +104,39 @@ jobs: SEMBA_FDTD_ENABLE_MTLN: ${{ matrix.mtln }} SEMBA_FDTD_ENABLE_HDF: ${{ matrix.hdf }} run: python -m pytest test/ --durations=20 + + parallel-hdf5-build: + runs-on: ubuntu-latest + name: ubuntu / gcc / parallel-hdf5 + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Install parallel HDF5 + run: | + sudo apt update + sudo apt install gfortran libhdf5-openmpi-dev libopenmpi-dev python3-h5py python3-numpy + + - name: Configure parallel HDF5 output + run: | + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DSEMBA_FDTD_ENABLE_MPI=ON \ + -DSEMBA_FDTD_ENABLE_HDF=ON \ + -DSEMBA_FDTD_ENABLE_OUTPUT_MODULE=ON \ + -DSEMBA_FDTD_ENABLE_MTLN=OFF \ + -DSEMBA_FDTD_ENABLE_TEST=OFF \ + -DXDMF_HDF5_BUILD_TESTING=ON \ + -DHDF5_ROOT=/usr/lib/x86_64-linux-gnu/hdf5/openmpi + + - name: Build parallel HDF5 output + run: cmake --build build -j + + - name: Test parallel HDF5 output + run: ctest --test-dir build --output-on-failure -R '^xdmf-hdf5-(generate|verify|mpi-generate|mpi-verify)$' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index dc4b4f37..244e2c9b 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -73,6 +73,9 @@ jobs: - name: Run unit tests run: build/bin/fdtd_tests.exe + - name: Run CTest suites + run: ctest --test-dir build --output-on-failure + - name: Run python tests (except codemodel) if: matrix.new-output-module == 'OFF' env: diff --git a/CMakeLists.txt b/CMakeLists.txt index 36714a85..ca66d9b6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,13 +12,17 @@ set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/mod) message(STATUS "Compiler Id is: ${CMAKE_Fortran_COMPILER_ID}") message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") -option(SEMBA_FDTD_ENABLE_MPI "Use MPI" OFF) -option(SEMBA_FDTD_ENABLE_HDF "Use HDF" ON) -option(SEMBA_FDTD_ENABLE_MTLN "Use MTLN" ON) +option(SEMBA_FDTD_ENABLE_MPI "Use MPI" OFF) +option(SEMBA_FDTD_ENABLE_HDF "Use HDF" ON) +option(SEMBA_FDTD_ENABLE_MTLN "Use MTLN" ON) option(SEMBA_FDTD_ENABLE_SMBJSON "Use smbjson" ON) option(SEMBA_FDTD_ENABLE_DOUBLE_PRECISION "Use double precision (CompileWithReal8)" OFF) -option(SEMBA_FDTD_ENABLE_TEST "Compile tests" ON) +option(SEMBA_FDTD_ENABLE_TEST "Compile tests" ON) + +if(SEMBA_FDTD_ENABLE_TEST OR XDMF_HDF5_BUILD_TESTING) + enable_testing() +endif() option(SEMBA_FDTD_ENABLE_INTEL_XHOST_OPTIMIZATION "When compiling in Release, enables the -xHost optimization flag (not supported in github actions)" OFF) option(SEMBA_FDTD_ENABLE_INTEL_IPO "When compiling in Release, enables the interprocedural optimization" OFF) @@ -29,8 +33,16 @@ option(SEMBA_FDTD_COMPONENTS_LIB "Compiles components library" ON) option(SEMBA_FDTD_OUTPUTS_LIB "Compiles outputs library" ON) option(SEMBA_FDTD_ENABLE_OUTPUT_MODULE "Use the new output module" ON) - -# Compilation defines. + +if(SEMBA_FDTD_ENABLE_MPI AND SEMBA_FDTD_ENABLE_HDF AND SEMBA_FDTD_ENABLE_OUTPUT_MODULE) + set(HDF5_PREFER_PARALLEL TRUE) +endif() + +if(SEMBA_FDTD_ENABLE_HDF) + set(XDMF_HDF5_ENABLE_MPI "${SEMBA_FDTD_ENABLE_MPI}") +endif() + +# Compilation defines. if(CMAKE_BUILD_TYPE MATCHES "Release" OR CMAKE_BUILD_TYPE MATCHES "release" ) add_definitions(-DCompileWithRelease) else() @@ -172,7 +184,10 @@ add_library(semba-reports "src_main_pub/errorreport.F90" "src_main_pub/snapxdmf.F90" ) -target_link_libraries(semba-reports semba-types ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES}) +target_link_libraries(semba-reports semba-types) +if(SEMBA_FDTD_ENABLE_HDF) + target_link_libraries(semba-reports XDMF::HDF5) +endif() if(SEMBA_FDTD_ENABLE_SMBJSON) add_subdirectory(src_json_parser) @@ -199,7 +214,6 @@ if (SEMBA_FDTD_ENABLE_OUTPUT_MODULE) add_subdirectory(src_output) set(OUTPUT_LIBRARIES fdtd-output) set(VTK_API_LIBRARIES vtkAPI) - set(XDMF_API_LIBRARIES xdmfAPI) endif() add_subdirectory(src_conformal) @@ -241,10 +255,10 @@ if(SEMBA_FDTD_OUTPUTS_LIB) "src_main_pub/xdmf.F90" "src_main_pub/xdmf_h5.F90" ) - target_link_libraries(semba-outputs - semba-components - ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES} - ${MPI_Fortran_LIBRARIES}) + target_link_libraries(semba-outputs + semba-components + XDMF::HDF5 + ${MPI_Fortran_LIBRARIES}) endif() if(SEMBA_FDTD_MAIN_LIB) @@ -278,7 +292,6 @@ if(SEMBA_FDTD_MAIN_LIB) fdtd-utils ${OUTPUT_LIBRARIES} ${VTK_API_LIBRARIES} - ${XDMF_API_LIBRARIES} ${SMBJSON_LIBRARIES} ${MTLN_LIBRARIES}) endif() diff --git a/doc/development.md b/doc/development.md index a99f9e72..80ff3955 100644 --- a/doc/development.md +++ b/doc/development.md @@ -46,24 +46,63 @@ If you use intel oneapi compiler, make sure to run #### HDF5 Libraries -HDF5 precompiled libraries for ubuntu are used by default (see [precompiled libraries cmake script](../set_precompiled_libraries.cmake)). +GNU builds use the system HDF5 installation by default. +Intel builds use the bundled serial HDF5 installation unless a different +installation is selected with `HDF5_ROOT` or `HDF5_DIR`. -You can compile HDF5 for your specific platform downloading the latest sources from this [link](https://www.hdfgroup.org/downloads/hdf5/source-code/). -Extract to a folder and build and install with the following commands +You can compile HDF5 for your platform by downloading the latest sources from +the [HDF5 website](https://www.hdfgroup.org/downloads/hdf5/source-code/). +Extract the archive, then build and install a serial version with: ```shell - cmake -S . -B build -DHDF5_BUILD_FORTRAN=ON -DHDF5_ENABLE_Z_LIB_SUPPORT=NO --fresh - cmake --build build -j - cmake --install build --prefix ~/hdf5-installed +cmake -S . -B build \ + -DHDF5_BUILD_FORTRAN=ON \ + -DHDF5_ENABLE_Z_LIB_SUPPORT=NO \ + --fresh +cmake --build build -j +cmake --install build --prefix ~/hdf5-installed ``` -A specific HDF5 library can be set with the option `-DHDF5_ROOT=`, e.g. +A specific HDF5 installation can be selected with +`-DHDF5_ROOT=`: ```shell - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DHDF5_ROOT=~/hdf5-installed -DHDF5_USE_STATIC_LIBRARIES=TRUE --fresh - cmake --build build -j +cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DHDF5_ROOT=~/hdf5-installed \ + -DHDF5_USE_STATIC_LIBRARIES=TRUE \ + --fresh +cmake --build build -j ``` +Parallel movie output requires HDF5 built with both MPI and Fortran support. +Configure HDF5 with MPI compiler wrappers and `HDF5_ENABLE_PARALLEL=ON`: + +```shell +CC=mpicc FC=mpifort cmake -S . -B build-hdf5-parallel \ + -DHDF5_BUILD_FORTRAN=ON \ + -DHDF5_ENABLE_PARALLEL=ON \ + -DHDF5_ENABLE_Z_LIB_SUPPORT=NO +cmake --build build-hdf5-parallel -j +cmake --install build-hdf5-parallel --prefix ~/hdf5-parallel +``` + +MPI builds automatically prefer parallel HDF5 when it is available. +Select the parallel HDF5 installation while enabling the normal MPI option: + +```shell +cmake -S . -B build-parallel \ + -DSEMBA_FDTD_ENABLE_MPI=ON \ + -DSEMBA_FDTD_ENABLE_HDF=ON \ + -DSEMBA_FDTD_ENABLE_OUTPUT_MODULE=ON \ + -DHDF5_ROOT=~/hdf5-parallel +``` + +If HDF5 reports parallel support, configuration verifies that its Fortran MPIO +interfaces compile and link with the selected MPI library. +MPI builds using serial HDF5 remain valid, but the parallel HDF5 movie backend +is not available in those builds. + #### MTLN and ngspice MTLN depends on `lapack` and `ngspice`. Precompiled versions are included for windows (intelLLVM) and ubuntu (intelLLVM and GNU). @@ -610,3 +649,5 @@ See the [MIEngine troubleshooting guide][miengine-troubleshooting] for more information. [miengine-troubleshooting]: https://github.com/Microsoft/MIEngine/wiki/Troubleshoot-attaching-to-processes-using-GDB + + diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 2e8751b2..13e0cfd0 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -25,4 +25,8 @@ if (SEMBA_FDTD_ENABLE_MTLN) target_compile_options(ngspice-spicelib PRIVATE "$<$,$,$>>:-Wno-invalid-specialization>") endif() # set(NGSPICE_LIB ngspice) -endif() \ No newline at end of file +endif() + +if (SEMBA_FDTD_ENABLE_HDF) + add_subdirectory("xdmf-hdf5/") +endif() diff --git a/external/xdmf-hdf5/CMakeLists.txt b/external/xdmf-hdf5/CMakeLists.txt new file mode 100644 index 00000000..3faad575 --- /dev/null +++ b/external/xdmf-hdf5/CMakeLists.txt @@ -0,0 +1,124 @@ +cmake_minimum_required(VERSION 3.15) + +project( + xdmf-hdf5 + VERSION 0.1.0 + LANGUAGES Fortran +) + +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) + +if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + set(_xdmf_hdf5_test_default ON) +else() + set(_xdmf_hdf5_test_default OFF) +endif() + +option( + XDMF_HDF5_BUILD_TESTING + "Build the XDMF/HDF5 conformance suite" + ${_xdmf_hdf5_test_default} +) + +find_package(HDF5 REQUIRED COMPONENTS Fortran) + +option( + XDMF_HDF5_ENABLE_MPI + "Build the external writer MPI API" + OFF +) + +set(XDMF_HDF5_MPI_ENABLED FALSE) +if(XDMF_HDF5_ENABLE_MPI) + find_package(MPI REQUIRED COMPONENTS Fortran) + set(XDMF_HDF5_MPI_ENABLED TRUE) +endif() + +set(XDMF_HDF5_PARALLEL_AVAILABLE FALSE) +if(XDMF_HDF5_MPI_ENABLED AND HDF5_IS_PARALLEL) + include("${CMAKE_CURRENT_LIST_DIR}/cmake/CheckParallelHdf5Fortran.cmake") + xdmf_check_parallel_hdf5_fortran(XDMF_HDF5_PARALLEL_AVAILABLE) +endif() + +add_library(xdmf_hdf5 + src/xdmf_model.F90 + src/xdmf_hdf5_backend.F90 + src/xdmf_xml.F90 + src/xdmf_hdf5.F90 +) +add_library(XDMF::HDF5 ALIAS xdmf_hdf5) + +set_target_properties(xdmf_hdf5 PROPERTIES + EXPORT_NAME HDF5 + Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/modules" + Fortran_STANDARD 2008 + Fortran_STANDARD_REQUIRED YES +) + +target_include_directories(xdmf_hdf5 + PUBLIC + $ + $ +) +if(NOT TARGET HDF5::HDF5) + add_library(HDF5::HDF5 INTERFACE IMPORTED) + set_target_properties(HDF5::HDF5 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${HDF5_Fortran_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${HDF5_Fortran_LIBRARIES}" + ) +endif() +target_link_libraries(xdmf_hdf5 PUBLIC HDF5::HDF5) +if(XDMF_HDF5_MPI_ENABLED) + target_link_libraries(xdmf_hdf5 PUBLIC MPI::MPI_Fortran) + target_compile_definitions(xdmf_hdf5 PRIVATE XDMF_HDF5_WITH_MPI) +endif() +if(XDMF_HDF5_PARALLEL_AVAILABLE) + target_compile_definitions(xdmf_hdf5 PRIVATE XDMF_HDF5_WITH_PARALLEL_HDF5) +endif() + +if(XDMF_HDF5_BUILD_TESTING) + enable_testing() + add_subdirectory(test) +endif() + +install( + TARGETS xdmf_hdf5 + EXPORT XDMFHdf5Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) +install( + DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/modules/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/xdmf-hdf5" + FILES_MATCHING PATTERN "*.mod" +) + +configure_package_config_file( + cmake/XDMFHdf5Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/XDMFHdf5Config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/XDMFHdf5" +) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/XDMFHdf5ConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +install( + EXPORT XDMFHdf5Targets + FILE XDMFHdf5Targets.cmake + NAMESPACE XDMF:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/XDMFHdf5" +) +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/XDMFHdf5Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/XDMFHdf5ConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/XDMFHdf5" +) +install( + FILES README.md LICENSE + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/doc/xdmf-hdf5" +) diff --git a/external/xdmf-hdf5/LICENSE b/external/xdmf-hdf5/LICENSE new file mode 100644 index 00000000..05d4874b --- /dev/null +++ b/external/xdmf-hdf5/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Elemwave + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/external/xdmf-hdf5/README.md b/external/xdmf-hdf5/README.md new file mode 100644 index 00000000..199e881b --- /dev/null +++ b/external/xdmf-hdf5/README.md @@ -0,0 +1,181 @@ +# XDMF/HDF5 + +`xdmf-hdf5` is a solver-independent Fortran library for producing +XDMF 3 metadata and its associated HDF5 heavy data. +It is developed in-tree initially, but has its own build, tests, package +metadata, and public API so it can later move to a separate repository. + +## Scope + +Version 0.1 provides: + +- Uniform, rectilinear, curvilinear, unstructured, and mixed grids. +- Linear and quadratic XDMF topologies. +- Static, temporal, frequency, and generic parameter collections. +- Scalar, vector, tensor, matrix, and identifier attributes. +- Node, edge, face, cell, and grid-centred data. +- `real32`, `real64`, `int32`, and `int64` heavy data. +- Explicit real/imaginary or magnitude/phase attributes for complex data. + +The library does not depend on solver types, OpenMP, or SMBJSON. +HDF5 identifiers and XML serialization are private implementation details. + +When CMake discovers an MPI-capable HDF5 Fortran installation, the library also +supports collective scalar-series hyperslab writes. +Set `XDMF_HDF5_ENABLE_MPI=ON` to enable the MPI API. +Collective HDF5 support is detected automatically in either build mode. + +## Standalone Build + +```sh +cmake -S . -B build -DXDMF_HDF5_BUILD_TESTING=ON +cmake --build build -j +ctest --test-dir build --output-on-failure +``` + +## Example Generator + +With `XDMF_HDF5_BUILD_TESTING=ON`, the build produces +`xdmf_hdf5_generate_cases` in the build's binary directory. +It generates the XDMF/HDF5 conformance examples: + +```sh +./build/bin/xdmf_hdf5_generate_cases [options] +``` + +The output directory is created when necessary. +The generator preserves existing files by default and rejects the invocation +before writing when one of its output pairs already exists. +Use `--replace` to explicitly replace the generator's named output pairs: + +```sh +./build/bin/xdmf_hdf5_generate_cases ./generated --replace +``` + +Available options are: + +```text +--examples Generate only the committed examples. +--help Print command usage and exit. +--replace Replace generated files that already exist. +``` + +Consumers link the exported target: + +```cmake +find_package(XDMFHdf5 CONFIG REQUIRED) +target_link_libraries(my_writer PRIVATE XDMF::HDF5) +``` + +## API Example + +The writer owns the pair and every HDF5 resource. +All operations return an `xdmf_status_t`; the library never prints or stops the +calling application. + +```fortran +use, intrinsic :: iso_fortran_env, only: int64, real64 +use xdmf_hdf5_m + +type(xdmf_writer_t) :: writer +type(xdmf_options_t) :: options +type(xdmf_status_t) :: status +type(xdmf_grid_id_t) :: grid +type(xdmf_attribute_id_t) :: pressure +real(real64) :: values(24) + +options%overwrite = .true. +options%series_kind = XDMF_SERIES_TIME + +call writer%create('result', options, status) +call writer%define_uniform_grid('volume', [2_int64, 3_int64, 4_int64], & + [0.0_real64, 0.0_real64, 0.0_real64], & + [1.0_real64, 1.0_real64, 1.0_real64], grid, status) +call writer%define_attribute(grid, 'pressure', XDMF_CENTER_NODE, & + XDMF_ATTRIBUTE_SCALAR, XDMF_NUMERIC_REAL64, .true., pressure, status) + +call writer%begin_step(0.0_real64, status) +call writer%write_attribute(pressure, values, status) +call writer%end_step(status) +call writer%close(status) +``` + +Applications should check `status%is_error()` after each operation. +`status%message()` contains contextual failure information. +`XDMF_ERROR_CONSISTENCY` means an HDF5 rollback or resource close could not be +confirmed; the writer must then be closed and not reused. + +`xdmf_writer_t` is a unique resource owner. +Do not assign or copy an open writer; pass it with `intent(inout)` and close it +explicitly before it leaves scope. + +## Collective HDF5 + +Collective output is available only when the library was built against parallel +HDF5 with a compatible MPI Fortran implementation. +All ranks must call writer creation, definitions, step operations, flush, and +close in the same order. +Only `root_rank` publishes the XDMF document. + +```fortran +options%overwrite = .true. +options%series_kind = XDMF_SERIES_TIME +options%collective_io = .true. +options%communicator = MPI_COMM_WORLD +options%root_rank = 0 + +call writer%create('result', options, status) +! Define the same grid and scalar series attribute on every rank. +call writer%begin_step(time, status) +call writer%write_attribute_hyperslab(field, local_values, & + local_offset, local_shape, status) +call writer%end_step(status) +``` + +`local_offset` is zero-based and `local_shape` is in Fortran I/J/K order. +They select a disjoint portion of the globally defined scalar attribute. +Ranks with no cells pass zero for every `local_shape` entry and an empty value +array; they still participate in the collective call. +Compression is intentionally unavailable in collective mode. + +## Data Conventions + +The Fortran API accepts connectivity with one-based node indices. +The writer validates and converts it to the zero-based indexing required by +XDMF 3. + +Attribute values are supplied as a rank-one array in Fortran column-major +order. +The expected shape is fixed when the attribute is defined and is validated on +every write. + +Structured dimensions are supplied in I/J/K order. +The generated HDF5 and XDMF metadata expose dimensions in K/J/I order, with +the series axis first and the component axis last where present. + +## Reader Compatibility + +The conformance suite checks all generated metadata and heavy data directly. +When `pvpython` is available, it also loads representative uniform, +curvilinear, unstructured, mixed, and temporal outputs through ParaView's +XDMF reader. + +Ready-to-open examples of those outputs are committed under +[`examples/generated`](examples/generated/README.md). +Keep each `.xdmf` file beside its corresponding `.h5` file when opening it in +ParaView. + +Some ParaView releases still use the legacy XDMF2 reader internally. +That reader ignores edge- and face-centred attributes and can fail on valid +higher-rank `Matrix` attributes. +Scalar, vector, tensor, topology, and temporal data remain independently +validated even when a reader lacks support for one XDMF feature. + +## Schema Stability + +Every HDF5 file carries `schema_name` and `schema_version` root attributes. +Version 1.0 stores immutable grid data under `/grids`, attribute values under +`/attributes`, and series coordinates under `/series/values`. +Display names are kept in XDMF metadata and never become HDF5 paths. + +Backward-incompatible storage changes require a new major schema version. diff --git a/external/xdmf-hdf5/cmake/CheckParallelHdf5Fortran.cmake b/external/xdmf-hdf5/cmake/CheckParallelHdf5Fortran.cmake new file mode 100644 index 00000000..68d0511e --- /dev/null +++ b/external/xdmf-hdf5/cmake/CheckParallelHdf5Fortran.cmake @@ -0,0 +1,40 @@ +include(CMakePushCheckState) +include(CheckFortranSourceCompiles) + +function(xdmf_check_parallel_hdf5_fortran result) + set(${result} FALSE PARENT_SCOPE) + + if(NOT HDF5_IS_PARALLEL) + return() + endif() + + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_INCLUDES + ${HDF5_Fortran_INCLUDE_DIRS} + ${MPI_Fortran_INCLUDE_DIRS} + ) + set(CMAKE_REQUIRED_LIBRARIES + ${HDF5_Fortran_LIBRARIES} + ${HDF5_LIBRARIES} + MPI::MPI_Fortran + ) + check_fortran_source_compiles([=[ +program parallel_hdf5_fortran_probe + use hdf5 + use mpi + implicit none + integer :: error + integer(HID_T) :: file_access_plist, transfer_plist + + call h5pcreate_f(H5P_FILE_ACCESS_F, file_access_plist, error) + call h5pset_fapl_mpio_f(file_access_plist, MPI_COMM_WORLD, MPI_INFO_NULL, error) + call h5pcreate_f(H5P_DATASET_XFER_F, transfer_plist, error) + call h5pset_dxpl_mpio_f(transfer_plist, H5FD_MPIO_COLLECTIVE_F, error) +end program parallel_hdf5_fortran_probe +]=] XDMF_PARALLEL_HDF5_FORTRAN_PROBE_WORKS SRC_EXT F90) + cmake_pop_check_state() + + if(XDMF_PARALLEL_HDF5_FORTRAN_PROBE_WORKS) + set(${result} TRUE PARENT_SCOPE) + endif() +endfunction() diff --git a/external/xdmf-hdf5/cmake/XDMFHdf5Config.cmake.in b/external/xdmf-hdf5/cmake/XDMFHdf5Config.cmake.in new file mode 100644 index 00000000..4e897d9d --- /dev/null +++ b/external/xdmf-hdf5/cmake/XDMFHdf5Config.cmake.in @@ -0,0 +1,20 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +find_dependency(HDF5 REQUIRED COMPONENTS Fortran) + +if(NOT TARGET HDF5::HDF5) + add_library(HDF5::HDF5 INTERFACE IMPORTED) + set_target_properties(HDF5::HDF5 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${HDF5_Fortran_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${HDF5_Fortran_LIBRARIES}" + ) +endif() + +if(@XDMF_HDF5_MPI_ENABLED@) + find_dependency(MPI REQUIRED COMPONENTS Fortran) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/XDMFHdf5Targets.cmake") + +check_required_components(XDMFHdf5) diff --git a/external/xdmf-hdf5/examples/CMakeLists.txt b/external/xdmf-hdf5/examples/CMakeLists.txt new file mode 100644 index 00000000..63528ca4 --- /dev/null +++ b/external/xdmf-hdf5/examples/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.15) + +project(xdmf-hdf5-example LANGUAGES Fortran) + +find_package(XDMFHdf5 CONFIG REQUIRED) + +add_executable(xdmf-hdf5-example basic_writer.F90) +target_link_libraries(xdmf-hdf5-example PRIVATE XDMF::HDF5) +set_target_properties(xdmf-hdf5-example PROPERTIES + Fortran_STANDARD 2008 + Fortran_STANDARD_REQUIRED YES +) diff --git a/external/xdmf-hdf5/examples/basic_writer.F90 b/external/xdmf-hdf5/examples/basic_writer.F90 new file mode 100644 index 00000000..a42b7e46 --- /dev/null +++ b/external/xdmf-hdf5/examples/basic_writer.F90 @@ -0,0 +1,52 @@ +program basic_writer + use, intrinsic :: iso_fortran_env, only: int64, real64 + use xdmf_hdf5_m + + implicit none + + type(xdmf_writer_t) :: writer + type(xdmf_options_t) :: options + type(xdmf_status_t) :: status + type(xdmf_grid_id_t) :: grid + type(xdmf_attribute_id_t) :: pressure + real(real64) :: values(24) + integer :: index + + options%overwrite = .true. + options%series_kind = XDMF_SERIES_TIME + call writer%create('example', options, status) + call check(status) + + call writer%define_uniform_grid('volume', & + [2_int64, 3_int64, 4_int64], & + [0.0_real64, 0.0_real64, 0.0_real64], & + [1.0_real64, 1.0_real64, 1.0_real64], grid, status) + call check(status) + call writer%define_attribute(grid, 'pressure', XDMF_CENTER_NODE, & + XDMF_ATTRIBUTE_SCALAR, XDMF_NUMERIC_REAL64, .true., pressure, status) + call check(status) + + do index = 1, size(values) + values(index) = real(index, real64) + end do + call writer%begin_step(0.0_real64, status) + call check(status) + call writer%write_attribute(pressure, values, status) + call check(status) + call writer%end_step(status) + call check(status) + call writer%close(status) + call check(status) + +contains + + subroutine check(result) + type(xdmf_status_t), intent(in) :: result + + if (result%is_error()) then + write(*, '(A)') result%message() + error stop 1 + end if + end subroutine check + +end program basic_writer diff --git a/external/xdmf-hdf5/examples/generated/README.md b/external/xdmf-hdf5/examples/generated/README.md new file mode 100644 index 00000000..d9f21fce --- /dev/null +++ b/external/xdmf-hdf5/examples/generated/README.md @@ -0,0 +1,170 @@ +# Generated XDMF/HDF5 Examples + +This directory contains representative output pairs generated by the +XDMF/HDF5 library and checked by its conformance tests. +Open an `.xdmf` file, not its `.h5` companion, and keep both files in the same +directory. + +## Start With Volume Rendering + +Use `volume.xdmf` for a warning-free introduction to volumetric data: + +1. Select **File > Open**, choose `volume.xdmf`, and select the XDMF reader if + ParaView asks which reader to use. +2. Click **Apply** in the Properties panel. +3. Set **Representation** to **Volume**. +4. Set **Coloring** to `electric-field-magnitude` and click **Rescale to Data + Range**. +5. Open the Color Map Editor and adjust **Scalar Opacity** so low values become + transparent. + +The field contains two smooth peaks. +Add a **Slice** filter to inspect its interior or a **Contour** filter with an +isovalue around `0.2` to display the peak regions as surfaces. + +## Explore Each Case + +### `volume.xdmf` + +This is the recommended volume-rendering example. +It is a static `21 x 21 x 21` uniform grid with the node-centred scalar +`electric-field-magnitude`. +Use **Volume**, **Slice**, and **Contour** representations. + +### `time-series.xdmf` + +This is the recommended animation example. +It contains a synthetic y-polarised electromagnetic pulse moving in the +x +direction through a `25 x 25 x 25` uniform grid over 20 normalized time steps. +The pulse is analytic demonstration data, not the result of an FDTD +simulation. + +For a scalar animation: + +1. Follow the temporary workaround below to create a `ResampleToImage` result. +2. Colour that result by `electric-field-magnitude` and choose **Volume**. +3. Click **Rescale to Data Range**, then edit the scalar opacity transfer + function to hide values near zero. +4. Set the animation mode to **Snap To TimeSteps** and press **Play**. +5. Apply a **Slice** normal to the z-axis for the clearest view of the carrier + oscillation moving through the Gaussian envelope. + +For a vector animation, apply **Glyph**, choose `electric-field` for +**Orientation Array**, and use its magnitude for **Scale Array**. +Reduce the glyph density before playing the animation; drawing all 15,625 +vectors at every frame is usually unnecessary. + +#### Temporary Volume-Rendering Workaround + +The current `time-series.xdmf` wraps every timestep in a spatial collection. +Some ParaView versions consequently select the synthetic `vtkCompositeIndex` +array when switching directly to volume rendering and report errors such as: + +```text +No scalars named "vtkCompositeIndex" found on input. +Could not find the requested vtkDataArray. +``` + +Until single-grid temporal output is flattened, use these steps: + +1. Start ParaView and select **File > Open**. +2. Open `time-series.xdmf`. + Do not open `time-series.h5` directly, and keep both files in this + directory. +3. If ParaView asks which reader to use, select **XDMF Reader**. +4. In the **Properties** panel, enable `electric-field-magnitude` under + **Point Arrays**. + Optionally enable `electric-field` as well, then click **Apply**. +5. In the **Pipeline Browser**, select the `time-series.xdmf` source. + If the Pipeline Browser or Properties panel is hidden, enable it under + **View > Panels**. +6. Select **Filters > Alphabetical > Extract Block**. +7. Select the new `ExtractBlock` entry in the Pipeline Browser. + In its **Properties** panel, expand the block tree, select + `travelling-wave-pulse`, and click **Apply**. +8. Hide the original `time-series.xdmf` source by clicking its eye icon in the + Pipeline Browser. +9. Select the `ExtractBlock` result and choose + **Filters > Alphabetical > Resample To Image**. +10. Select the new `ResampleToImage` entry, set **Sampling Dimensions** to + `25`, `25`, `25`, and click **Apply**. +11. Hide the `ExtractBlock` result with its eye icon so that only + `ResampleToImage` remains visible. +12. With `ResampleToImage` selected, open the toolbar colour dropdown, which + initially usually says **Solid Color**. + Under **Point Data**, select `electric-field-magnitude`. + Do not select `vtkCompositeIndex`. +13. Open the representation dropdown, which usually says **Surface**, and + select **Volume**. +14. Open the Color Map Editor and click **Rescale to Data Range**. + Edit **Scalar Opacity** so values near zero are transparent and higher + values remain visible. +15. Use the animation controls at the top of ParaView to play the series. + For discrete frames, open **View > Animation View** and set **Play Mode** + to **Snap To TimeSteps**. + +If **Volume** is unavailable, verify that `ResampleToImage`, rather than the +original source or `ExtractBlock`, is selected. +If the `vtkCompositeIndex` error persists, verify that the colour array is +`electric-field-magnitude` and that only `ResampleToImage` is visible. +Use the static `volume.xdmf` example to test volume rendering without these +extraction steps. + +### `uniform.xdmf` + +This is a two-dimensional uniform grid with the node-centred scalar +`temperature`. +Use **Surface** or **Surface With Edges**, colour by `temperature`, and apply +**Plot Over Line** to inspect interpolation across the grid. +It is not a volumetric dataset. + +### `curvilinear.xdmf` + +This is a two-dimensional curved surface without field attributes. +Use **Surface With Edges** or **Wireframe** to inspect its geometry. +It is not intended for scalar colouring or volume rendering. + +### `unstructured.xdmf` + +This is a conformance collection containing one example of every supported +unstructured topology, including high-order elements. +Use **Surface With Edges** and the multiblock controls to inspect individual +topologies. +This is not a visualisation showcase, and some ParaView versions emit warnings +for high-order topology names that their legacy XDMF reader does not support. + +### `mixed.xdmf` + +This is a conformance case combining vertices, lines, surfaces, a tetrahedron, +a polyhedron, and a high-order triangle in one mixed topology stream. +Use **Surface With Edges** to inspect what the installed reader supports. +Do not use it as a volume-rendering example. +Warnings about unsupported mixed or polyhedral cells can be reader limitations +rather than malformed XDMF/HDF5 data. + +## ParaView Warnings + +Warnings are expected only for the topology-focused `unstructured` and `mixed` +cases on ParaView releases that use the legacy XDMF2 reader internally. +The `volume`, `time-series`, `uniform`, and `curvilinear` cases are exercised +through ParaView in the automated test suite and should load without data +errors. + +If `volume.xdmf` or `time-series.xdmf` produces warnings: + +1. Confirm that the matching `.h5` file is beside the `.xdmf` file. +2. Open the `.xdmf` file rather than importing the `.h5` file directly. +3. Remove the old reader from the Pipeline Browser and reopen the file after + regenerating examples, because ParaView can cache HDF5 metadata. +4. Record the ParaView version and the first warning in **View > Output + Messages** when reporting the issue. + +To refresh the committed pairs after changing the writer, configure with tests +enabled and run: + +```sh +cmake --build build --target xdmf-hdf5-refresh-examples +``` + +Normal test runs generate temporary outputs in the build tree and do not +modify these committed files. diff --git a/external/xdmf-hdf5/examples/generated/curvilinear.h5 b/external/xdmf-hdf5/examples/generated/curvilinear.h5 new file mode 100644 index 0000000000000000000000000000000000000000..2ca434ea59d92ee19ee5745dd7e44126807467f2 GIT binary patch literal 5064 zcmeHLu}&L75S_IH9LNY87q)1)G7aP?B0&Kd$wn@cU~Fyuro5(e1@(cuy#3Q9~x znKC6MC57oz@)>lnd-Ep1N|q(CQrNeaZgys8XLsh_?9KYLm|q?pnHV9{9EUzoGVIFZ z5$!h365(Zh6CDM50{T0~9i=Uru`J|C*mvVBIEQ@gd!ayDQ|t@HFzpX=&lN#L`ziv( z!cxgNybiBFg5CmWU}>is{HSTBT(4Jyt%JI67~N`qH86d_smJ1u&lK=#<2pgJ;ao)t za`dmZ{nOtqZ&b>=ekf1teGTiLthb*3x;&+G?K4(P5br?I*vt8cezg|tRfx=dlOi&I zW?J-BD3g4W{ryEgJq+*yo$~2njP)GsCnEh70Xv_Pa6gN4R-&=vdESg>1cyZ#cq3i? zwvtyG*|OgC5E~Nv_uz@YNIEyT{Q(LM+4`0+VF zZNIBM5{}4?H%7od2PEHId@70HowOZ(?R<^!`_4f3`1E%8y|>Q$|ApVpQ4V+m z^;M@jtTfL0l6O7+x+3?i2-x_Qy66h{5%vAOpi+Nvf9XygrvBAev%sz7iH&2~M?_yo zK+z!A#t58}dtsafC|gOcsY2V!v!T6|JE{LUG0mlnLz!bNJD}f~u^fxV!UY^ufN^z^ zW)%;bOvdqsjq=>5?O)F~=vQi8W4OM5##JuWHPd}+sIh1qziYMTi5iP{tuxIV`ei|j LbC=Dg8P7cdyhgUn literal 0 HcmV?d00001 diff --git a/external/xdmf-hdf5/examples/generated/curvilinear.xdmf b/external/xdmf-hdf5/examples/generated/curvilinear.xdmf new file mode 100644 index 00000000..f1bef93b --- /dev/null +++ b/external/xdmf-hdf5/examples/generated/curvilinear.xdmf @@ -0,0 +1,14 @@ + + + + + + + + + curvilinear.h5:/grids/g0001/points + + + + + diff --git a/external/xdmf-hdf5/examples/generated/mixed.h5 b/external/xdmf-hdf5/examples/generated/mixed.h5 new file mode 100644 index 0000000000000000000000000000000000000000..cf16120f9234ebc1e467360021b69007bfeb5b36 GIT binary patch literal 7336 zcmeHLF>ljQ5WeTMC6rW6T80W3JTP~GEb=G^SPSu$6#NK;f! zhPYkGb^L%O;Gy4=ffD*v=&{EGr9B$mlE};A-!HJ>yU5?ZZZt?E;U84gv^T>e9|A`w zDgw>M^Oo6gTXwxH^rz&Ru(aI|KMXX}iQ|6w{!<(nMqh)VADS`pw94Y#dqwiq&g&Ab zC$@@8RMfvgcPH5Gyo)-!K_Xw&>$jYZxT37bk;#gHT~B4%{*s)th{krcT3yi$@~{cT z73rIouj)!?Hs(9I#g5?rOnBlalCBNDen@@;XXm>wxX)q-+>!97B>{{HF{gmpqkRt8 z@#AxVGM}qs5)QYGD@MRR2T*Um)D7ICo>~xGlV;_wU9T>GuNmkuH_yu7GwZy+sr=oV z?qKRb`}Jx(S<(G33w5;#T6Ng$NR0@Ss%ufuqQFX#@=AS?cc=xVfj zhgL5HFs-FV?|JO7C>>ux9WHXjPnpPlLA)57XHU8xiFW?d|7(Wx${Y6ghxad^5%H;2 zF2_0TXas(5jB@F*tp^X9wqObLpulDEkf-SsOoeha=sXr)K2r=)(4#JZ1D}P59Ivgg z1CI&dA9}3MmctIOp}=Duwm-=6J`2B)+xR?xw!OVRTMvJj2l|H)2(|rSeZV7*mYHK+ z1Y87M1Y87eI0EUulE3sR#V7ewSr4fBqG~i{-B58)RZ9@r{bTzsyEwt4Az{<~;{n6| G^ZgIFlf_{G literal 0 HcmV?d00001 diff --git a/external/xdmf-hdf5/examples/generated/mixed.xdmf b/external/xdmf-hdf5/examples/generated/mixed.xdmf new file mode 100644 index 00000000..28c12e37 --- /dev/null +++ b/external/xdmf-hdf5/examples/generated/mixed.xdmf @@ -0,0 +1,18 @@ + + + + + + + + mixed.h5:/grids/g0001/connectivity + + + + + mixed.h5:/grids/g0001/points + + + + + diff --git a/external/xdmf-hdf5/examples/generated/time-series.h5 b/external/xdmf-hdf5/examples/generated/time-series.h5 new file mode 100644 index 0000000000000000000000000000000000000000..0c308b1bf57caa13af1006557c12fa912f296f13 GIT binary patch literal 5022848 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 J&nPq)RYdeC;Q(9 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

>cJN= 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�!f4 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

V65ItQcat{@-R+fQM7Agh|zZ+F4!w=2?z*BYze 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 z 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%0D!G1iSL5i@<8{ zcV3J157NUkkDq%8tRnB~qRr~o`JGUje^I!qp`G0M{Xa#}&qKp3r_KTK9oFY}?Y}*RNDVin_r|1QVQ}mt0*`{%d z$|BA-jZ;MP3(;q*83EBO3C^tb#j1+cm$J`a3c zWBg&ePf$ns4UN0P_PN3Dy@@RRfO_+^`Lmy`-*m=WoIidM+C1R`AB$t0Ssd_@rtg9+ z#JAJD;WVEY%^NP1&r2w8_`kKEf#warPx6Kf@$EEkIL+s!6EYd&YV!A67*~-QYQXbx zniS)zvJZoCHGOjfycfT(5wNQ-xrK41Kj$0XufeSDuzg0>z<8+F$rpB5zup*EyJb%t zmEXdJ_u;V59MD7g!z;$Y_TSS7WA#Y2YIx3IwJ_8xmW;)?s?c#Q+H4TU@3l*tbqsw^ z_dW^x@3<;{8&t;;8dqg8U+IzgY6O|D3dwwRnao!!e__7bOy;W@WWI_a^VQSeG+%xH zA6^Gr3ao=|$vQaa53Ym1;$M|T{y}Yl{DVa*d{LSohsGC8 z5{NH)p_K7Oh5Yv46<_r4|6uXlE)@TYo*xwA83qgNZ!b`RXQ2Av6|%p*wECczfIdj~ zw+rcmmB{{fst*e7Zy!u}25$kLf$~=w0{qn@0scz8kms-Zs=!|{gulus{M8x4U-csV z)mXw`6$$WHFA0BDU4Xw@O8BeGrR1-?2!B=9yy%=?;6;lFFS?uXqUTlMMH`d>FZ!2n zFP^Vd;oBJj9jDrhpX)e11$3NtM8|1Bbetwc$I&{#>p0_xj&qslIQB%xDc^?IalDC+ zGmhvuFNls~E1=`FAUe)2qT}2mI*u99adrvlIDhrQ;&G*lKA2#$c4u*EHMOK#RiLFl zFKB@O=&*1P=wD9dMvBd~JcdlhwEyx0vo$hko) z(Y6Ae9cc5Bt=h1U^*o9`PAh7fs%&R!L3LmA=6ivtFpHc@;hmvx&bR+BUd_1^VuIVJWT`1UR9OZ|n2As)0^0%8TQ99<^57 zMPQY_wKeXQKZ}Gt`)x3=I$XUuo>ObzIn-ON9G{;n>F8Oszh$QwU{%*k6a8H{t~~6R zI0NW|H5V@dRz~AC0xNl+Jd}?=_83@c4?m5%US#rT75yETpluO;QE0Q_3r*N_+9jcn zP9u3;)%$A&U}AJ>1$d|I#m=w|#3{J<{gavplw)$tm5R9TtG^d@?ayohdyY;`jQK6k znkOsot$U>&`tqvBRP^_t_6*q6znV#OXKMl7S)zjO>_>EG>R)vyy0anCoz;l$TtIZ^ zLgHWT5b&?I65aW$Gp{>S|7w$f?%bK^&fSUb%nInvs_g5FA^ZBWx^Kf+4JP~gHj?ws z)oQlEd!+mNR*-#tVzRHVGTGO6ob2nnM)vg$CHwm3lk?8Qysu(h^$O3xxVlaD_1z@< z`c9Jb&bl)y?^lkiCZ6{&uHLxwXW^fceSQCH@noI|#M$0W;%xt0@np&(kI8D1-{JHp9o-JIEP2LXVssu%GM< z#vGp8uRipM#NbQN8amB&MfpDAQLsC&3c>gI`fhVPr}L`wsMmf^B-WkR8~L+clQsE0 zGluHr(BFjbeH9c2i?7gE3gXJDF?f=%?#Xozv*e%H)bXSs|_nAqTY}o zb=c_|r-0SfH)?3}t~r;nCSDq3hW_?@*aWuFxrtFEt{RQsUX{dE6N=w{jKoz7AaT`} zlDKLqB(7R0iL3T2@!Q*xxN1e@9DN{(s}>^=SIvgRRnsJK)oA?ohP^86QI3atCnsZE z`Bq+ran*n48DP6*_j!yfKZiXSS8_`$yrZ41Cu970x-Z2$9c^8J>*I%Sz<9XYN*fyA z@StZXzuS5q#?k^UOW5Lfn{e-oiki50N5!H8%D#9eMBq7Rk2isx*hT|u^xbdfXmgk$ zza}Oh?1TQk(;NU>{YDjF74u;xu-cHh0$4fCzJ&5V>#hJRt0u|7O7YDe_1>K{6PTFP z3PC%~zZBv6j8lC4is%nI=x_gkw6ot37HM?7!ox7+qDyRawkee=^_1WfJ#;&Q~<< z$MWAaUuir3@2-Px0_$KmvJU3{!FBLY`d9M={3|!&Ulj`YSINKNU-cC5uhcg2{*|u^ z{?)Je?a3tn;JK|4m>VNh@Y|~i`0X_R;IUHX9~AQ2Gl}1B_X~de-~Yklxm_sl5{)ma z3eP~}s!^U{6X6-?`9aDv$bRAcAdRa=&ks_b;aB3Sslqd8X!GX>DSt)JP5cUfMbAx8 z{;IU+CdyhL>{CkqN)=wTo&YcUYFOFwqIC!_dXey=HB{h5r~f8iG>Y(|fBE*}`AQYO z-Bduw2_`zuPyrpshv+y@h>nvjpyQk&I?hF+jt3DI#*5*_CT(Qyii zj&q0TI8BL;^SqQgPFf_fd$X2au+(HH;n3&0_C zS6c*ob;3?yr3kMNEj3`96lKyY@!F!>=YPJf3MV=n?9& zYcd#I&EiSx(YCF-6Vc{Em)fw6)@P!RAC`(!mH1~Jssl`nrCWj3+`R)~N4&Uw0Y$%{RH&;P-t|*{8A0@hTd!jp=2`~dx7)Ly9CZVPbcS{*OK$jPsw@bAc6DF zs>J>9ByqOiY~tf=N02z%Z%Lf(ktELc6B1|pFp0ArOyX>(kvQASNSy6GB+hmwiLhv80 zKS8HK0QNjIip>xy=ibDXCol(|)s0P7UbnO{->d%}+1Xbr5)Cr1J+#peCM$~jF_tZYNjp7K~bJo@F~`6ucR zLA@1?BY{csG(HB!^2fE&=J2@}(Z_o|B*4mLB%cqu$MdbgXI9K0*zwo0aIc@61@3L^ zUJuue_MJstb3OXQ-qgP-*2G&w`=QOX9r;)dgYPW`KCRT3!w#r309dWscM@2QOfCRc z+Ld{2@y6UHz^au+4b(N}b`b2P?N0)$DxdgqvO?4xZ8rAML?3g`dBA?N&WTmNmxQfZ zz$gC&pG)-Hobo8IAKwf1jf>8}>fJy!JZG!Z64Yzz?FOuNLeqOQ!$ z{jifV)q%;pb9{dJPN%2gy0K+5^s!d_YS@VjXQPiEw<|*vOb$<0C~-4>VukWkt_H#$ zV=xC;t!B;foW1q;q23Oa`B*@n?Gn)DLp@ditAft?=zGxlC$LpHkE2RH`qJj}qWS36 zNIowbpJ6@8=cP(~2BCcPzmm_3=A-{Ru8K#iD&wlG=c_v^%vVx@`D%#3d=*CKtA+ye zRY)1kSDXK(b^uPcOSp!vM|3-Ao>Rp1#)o6n2#S3>dn){%I9l)s85@%l>3UzOXypDQVg zczvqyS2SLq5Pvm^#OwPNUQ|!uJPzeW>3N*e@}j?T9%nB(kMp~D(Z76q@qDEU-ySQV z<3tJQI0K1}<4bfL&8NJMvyA9CxJ{5@kJMuzuh7d_R!wJ;0i{xbi{KquAD`^iM{!Jf`{+h%u4 zM4Rutss;OevrP2yW>fw=Z|>+iz~tslKKAS**+Aenb~b;Wr9lf`v$h^o7tgdAc?Nae z`PLWqSy%oX#PhFxz=t2NV~4&p{1ga$mg_HrO?BrkM0fsQp06~MdENO>&R6ujvnx68 zEVNJN5;^buEBj=wk$p0Y$v&BrD(sUv|C{#7n340&`Q*H_6FKip_sP&W+u0<}worTq zSAqBpG|o1S&tOdAGiZ|d3?oT=h6^Mz?(@4S=b1rW;bJe1@Ga3gsE?vT6y&q-c@S|l&Pd6E~vn&bt@ zCV2r~le_>0BrgEX?>vFz1yCiwGtCQ7*7@i&ep5dBD1m(R`50vKG7QLProgFNS?V-vj0KEIvYCFnqcNc36}8D1SS37VOA{BT|*^$u-i)b0is? zP;Z^KGqENP(%gjhZ($ZDDeuiLe+hkev%Ug5*J~HBDrjQ_KjE5}3}w2kT>z|ff))WQ zzj`B3SFd~bVBdXRA8mWmT7otYN?(KPJKJiEFLwVnHb7(hXM%`tVeYv~7 z2g+A6-vK+tJ{(y2&FX;XY-oBD^^UgU_s%()-$0wawD}wX&r-C}U-^w{u<8DGJ>TDx zH@pcsNAF7Zw{Irr=$*(pdSh~qK8Kv6e@f2LPax;$mymPxzT_OeCpky|jGUv-C+Fx( zn;(bnZx`Z4O~`%*Te6?w2-(j-c~J@3&(N6cXUHP^8LF7``xyeseg+BI&)`jXQ3=`4 zFpKPGSW9@(Ph>yCR|^!$Mxv6-RSSJrFGHYR`)en<-C;CXBn{CztR!*q>u#MD;lbUd*k+K;<{UG z9PruvK@NM^GJfywxcYLmc}6XL^rawcJo>w7!X(&#$5rv0QDt2HTl3X&f%$5tzyzrE#e^4tIZ4;FuSO|DAukE7iw1U>-$9~9yl zDqfieE>xBLgOq2W`3Kci$Updu@C>TtACwZFp|tr2g?I*4@()t}>a75Ob&=$Wqx_XE z$rI-&5MPw?SHCO1sFwhLrAmC!7=iers_<98!i$dim(CATUNl?a{9u*}=Lc2cMQI$! zzkGY~e5Hy$D5T@eB|6R*0UhTZ(Q)#KjIIQ~S(c}aAf8$`#+BRbA=0UbwO&g(eS ziH_5Z=s2y2j-wzt&PSr-+$B2BXQJa=Bsz}0fR6K5A1oeMs_28}3Hs1d6E+7}7T>9+ z*4$$QIMUsBbMa3d%yEwnx0t-|v%sVBaXE?!1fW&fAFYT!-k+W<+=1LUiW{0o}Q$fbQIe=*|-b zbmuIhJNFgPos)^~97}ZPu`1}!Z*TItvnu-;ECtRxHzens`wEfj$L(kTdbEw2-ppAEj}Vot8$;RyR^HlM@V z=<;xIzZ*}q0(W{e{WAE>2ECWU?)|(R%3nF=23z#mDMh&!oY?Xmb)AU~fGrE`iFw|) zasb*qVmH5cCF$I5{NJtgNr1h4)Ha->kGo)iweOLRJ<4pU?TdfO)aP@7)mXEEsLQv` zb=dP~8=!5DANbseM+5kE?UY_S^l@i)JnX3aRlsV{>xSTyL*lP7N*qRa?1=I^TsFhb zxUw2pX-{^+bKF;Fp*=f$L<6g$a6XQ@MQ$v(aot-L(chJiE5okb`W3LUz1$yI)vh@g zSa}^yLiwEODZpy>=_uf{(A*H~^*HzbXq!c&*=Tb!_e;3mYGW|^IOEk9*cHWBQGVn{ zPhe$dS`YT9S1VBdapywVrc15?s|KBd@SF=a2CzkMo&c*6vv`hO;`$y~J)G!_{@xhw z3R`4o3SP9__m#jZZAu)limv?*iq5FxHsN_kNw`TehpmT<9rBpX%u#Z-Py(n z^TW(f9nj`uGx*%}daDqAY_mg~?@fM-er=EL1+46jiGkI--N%8?oXrb(d+0~pYrCi| z?%nc8g6q4^7oo2Cro0AMZcrOw)hTc;+CMsr&jGRR+7{qbt?xG2eHTvxRxPUC0#=Qs zYA7@4jRaVQ$H{?}&0AyC)v9|0?9pL2fz`NCU(x0pB(Vs_x{5cuv!YJ5ld=#t-AFS?!%@b0-(x=dtQ?7kw|< z^#JzYaaH^VR2f%gJzq^B^VK93=BrHt^Hp>y=c|)tFkd&c2+yELc!raNXJ|}#hHZpr$Rs>NV*#GwKH(V{!ZTzOp5d|p z&)`RRhWUhNI48g}Q2y$G0DomBz+V**{>q}1{8e+pUo9v6l>y{h^MfbI`9Z4V{M84G$JKw+2aVeZQgl(Mp^#$)5kOtEzdk}|5$v@)+kr6S+fOKEa%kuZl#en)7Hgmf!(-G zkL)#XFBT=)MT%-%=_zqOEtl5Nl8WPYkC6@3j+BkjwUafkZ7N^ADNp4jiV&?Zn_RrbK*r03k>xl=%io?ilKUP|m)B`iUEXD1 zxYTz+hV*TFV`+=oD;(xlvK5>3z2(q*RG!_|lq!~^d!Mw@ZeL{my5U&6uliH%)kj`) zIQGC-d~(<-ai8cm(!kc%vL}0+Ntjyh@>4BW$<^za$rC;qFtO)X$uAjCme+6PC;#-Q zhHRLFRCdB?wRDklWzn=(o5h=aI*Y>ddfVIenQS@ost)(SU%O`STc{8n z47w|>ZKff4Y7j3SbbYNXF?5aORsIpVM@0=rXIF@Pt)(CHalQugN|7y}H}|RB>)9L` zvulGa;jxCS;N(P6YOIdLNN%q+3y~M}XnCUjhjd^QVBtOvU7Q?jf#SE=(!z}96ifL2tvMl_u zrab3WFWIx$> z4_a=KspaX5H~1$>bY~40FM2xO!SdPwD~nho8@p-EZ9l(0V4r+H!y#vKGqL#o8Ob4e zp(G?fQg$L~iG0oue`%MG@k}L+LZ*p$A=A`A+vGe5vD;(Hsj;uDYv~GB0m`M zOg3XdKk=dVn$o=9o5iE9$2y$bwaRKtjGK)wJJ&9C;K?rDlD+#Vrr99l^_p^C9| z@B3`om6NIR2j%xmV_p|BuXBx9z4CjRq_@%RtC_~^#&#NP)!gcA-oOZXLf>QZ86S=1 z2kWmCyPvj|2DZN~KIxI~P~YQ#m4CFK&8f(Zwx4GiJ9L+tiB`@E5ic>fl(wAQR(k1b z1$o4%r}BG6`O;I}Yq6i5+j7sl$9TqEV7qFxV{^rg*h>Ay?7>>c<%6cbm(SeLPM$I* zMO@+1KxubxEy>Z#HAGQ*x2@J*jkIB7581kzD;yO1E}}h~V#T`+I!JrZ7%Q!yXDm;= zRfV~eSxM&I)RtZ6G?wkrw;X%)%xl)jbR4@hr4_s4wHy0oUV&WaQw`?C?Q!z9hi`~u z#xIcGU)V@8ppvDiZi6>guRY>znlHU>f9;jMok(VoQz#lu?7Rx*P8Zqt7 z4P~En+Oeyz__5;Z`s~LBT8h-3i`l(~?(8XhZ+6)3a!j-JW{mXkV)^&jk79StHB!x! ztYl$7mp{@ERo};hAKu3q@;<`;%li;><0|YI#?@nPTvhuo<4V=@&B?8elakU@8Z_ME!;YI z_J?&ajavt2|F91JiS_&+zr^)F_$9_Aeo1}KFFC;ZB_lb%WGd&EwB!7eNX{>*&G{wY zIKSi~=a-mpe#uPEFL5dHOTL!)CI6;>_4(FfQCungtJ(tol}@wBX31@aSzQ_BZ*8`| zg590=+V;VrQyji_sv&-5(^T9(@}Z>f-V@SM85!brHNMESD>aq-4?ZYcK4zCZVOvxA z+^{P0`nq-GNBhJ`7v8%lwYRpAPMI6wkf@^&@9})#YH zKRbJ`rS_>e-a4dA2@y*MZWjmK8YYb|aFxCK;4Ja)HA~)FvR&SNm80A-+?vt7wp~8v z@Dlk4HcZ~$&rG(dPB&TFfF06Sv4$d3mo%~N_A#QdW2f3LabIN_W9Mf5^2r>Vi%Y)P zRSeT~C^u+?D7a%K$=U=X$*uX>(yK#KWgZ)oCC-xy%IJ2@~A5-~(Y7M0UL%J~GI)Tid^Ys|NIn~)is{$F1YQve@ zcV;ryH!I2a;`ICesr6$*;&3N+-A6!HjpyWh9s8F!>Q<*kRU>m|gM%jQWWS zjCSH+d54-o@>35U$>w?X5Qk}flid6sDZb_u<6vmB*($zpj7`;bLAEy!XgS>4P(yU} zxv%*2mD_s|)g(;MYG1@J4)n(RYVCHicH#_H4KDPdIBEsoBoK)3=-Gm3y*y z;-@}Rht0F3Gha28PwiKeIo4EH_RvAWMtaU-O+2cy?HCQk%s#VOm-n4n#meDqpAjGA zJ>Jw~ZW;T^v-dt044HJ{;BKtOaHoLuOJ6mCRb2gx#jlwKs2RpuZAbaCs7@MpxXVSlQ zV}|O-%JX{FmyFOoD0PY*E9pIBnkZ{@TkDi>)orzJSlV@4vBRPBu|1;GYwJmjjrL2$ zL#|3g#liC6<1-ocYCbY1A&T8)eU%;mZUP&x;jWN=y2@Hb#k2k19${~u?9RM!TgZ%! zz9#S5*;Vqa<8!HX$<~-`Dhfu^z-;8 zKlo~tBr8~3w()hmB*i}%+pAVX?1qc)I8eMu33xb&H57{YWS4M-sPwEaTRXlid2@U9x^SaO+1JSwE(htRFVq z`a##h-P}6(eyyg%yMh1rI(V*R9b~z6u-Q-6!D(b2tX;AWW|MXBPps$v_$62Vi(fM0 zKlmm7oL^$b`6bslza*IROB^}B#Fz6+j&Od-Va_jU#`z^e{MGODuc*KKnB%W3IsU5c z5Byb)Qt($#IsQt*@mGNyf2GIqSCcvZioTEUoPXt_qJQPg`B(a!e>GAC|7y>?NK1!f z!>j}M`P*E~t6;x5RNLWg{i&k4>uX3BFKsHhUN=`-)A*z;!1|bEN%$9e;P9r5#i@gG zjkCL$fbtg1;73)MdmeR|tb`cZ?e3RkJpwIcb*@H;BBv=N3m!ierN_UsZ|qmoN^NYm zwXcDi?ZwPl_FvK#IA})ZiLQG2OTONTl(abLCd*vK$Ro0((l>j@GQla4jMo)Artp+0 zJEUtAQ^jmPlaaQZu@)K1bsD+IPo9sG1-;c3*ALq*F{tJ)-e5M;fpwX0m2bn^+}}Ic zwp!Y4`|#TN4hb&p#kKnsN#^v{k{V7sAamIgEkDa_l(t-#$wW)E*lr)fnUgWg*`ib} z_DsiI=AFqGCQ2`vad3W^ZPhz2%*McHziq?H z5{D;Aj-pppW5iW`U8LEkhfA;J)sY|SQ-M);FDKKOV8Pzy{G4@KYHY9DPg(tO9&G+t zmJRyWne}^hPoB$EWwtaNA@8;+OI)LyuhgxXv83}vGm+MSM%K<&g*KV#Rqg6L2z1ze zDnztY^j%!(+Zt(?%y_BA;<55k(>pUY$90e$dOx4Nz9pU&pK)P(w-75bI__rsRS0H3 zR*zzL-n3-aRPDt|Ht{%fj=!<$W$RB_amwRg3U9jW<9?)>p2<5T{)ti$fFY(papMeVhR z*ab`C6&DU$DEwz@DPB~qtC%)=E8`%$%vicMW1h`hFRAD1DEs`hP*VQTd(p0qr>srQ zf^FMW-f35uZXtU5#!l>(5iVKSRVI5F-b<$CuEUJ3@`btE?St&;9b<*-s9p*k*$dXF z#cf4Jac_k@(?&7e!bvelJ&S2Hqa5pTr#BP0@Px!**?8IePPL@#j19$#J%!e%s_n2< zGd*V)>D5kDx$Y`U)e-a3Wi=&Mjac#FhVsKMT@|0U1uDk+7%EN}>NxJT zTB_(!$wN_{tJl=4GOMxLl2wmb${g>kF8wq#T=rqElT>q92XTU4MVoqT?UE$P+DDc$D_G_<%!zT_-IRT9Z7x6R(pwSJFIbV1+E8)$O-;uu4}%qN zQpYNol=+IJ>ebknL+sfbZXrzXt>vXf;TvRgs@0a7kGS`7oWo^d z$@^&hllSrZC-37VH?G8`99K2Dab@zuxLWid#+54HM?3O;m~-Dp-IDL)68C)sao@+= zAHI+G-1lKlz7M6p`=7pZA%FJ__y6&P`~Nu3{eMt@_uLQvAAe%L`f=WU&&|7EewcSp zmdv{qxp_CAn|If9^R7EL?;3OSZXq}ChLy~_1>C&5kDGS~a`SFOZr&Zt&AWZMdADQ9 z`tgNZKP`Eg9Ol-K#$^5IT(W++a_h&|lJ(;pw|>0l){jfv`thw~{YWiYKOS@I z$MKT&BZON&eq0A%bL-&S^*>(+pK@jh!g-lr?a`wZlGpU#|LV#4_)6F9#_LlGwL$?-nB zINs+Z$NO~Pcpn>%_i0$d`}_(2>Sw%Ybrtl%{TweEPk7OCdAvUO4=*~8(+Ag-=z~A= z+yCLOLOK3w;}86mkl#L+`0YRAuYMd?O8@FM=U-L28!72f;$Ln11^;Skvp}nwpWE2X zt2WWL=wYF~`Ga>3Z}t0#>+Jh3*?haEv{Rc?vcxO9<;@WXEibVfy=o zvAJz(v5WFwGlSzRuvgtz$a797%ljX!C2zSeK>T5PW2x9AQ~W+O$Ki`{u^wgmgC5nJ z)1y8H^Lo@!qDSrf4| zcpp=Zb=K25x!VrPT4r~sS|i!9jko1tK1Y}V>krAiC%$Dr zuWqE6?XjPgWN%k^+Ba4VcvC^)r&UXl`C%g?8+w)*zOONJdgxk-zmZgST>40IFrMRI zmfp6WU=?M%LhrC$?_~YK%5!_BPRC57ezJzY$=oc$hI( zk-o8NXIEDAfD1~dN zy<*s`Mvg__q7)nV%~v$%{D|&%4cRxJT-aN)HZaTA=t;x+?UA)r8z{YN>M8#CjkVF! zt!NiyYQmkp*&w=eI7V#nriS$CzBt)E{nN7Ltrs&NEXJ|}c6rJtoL{Y&UT{ibqd!Dp z)U}JF$JWz|<7t}}--{9zVacu8NEaX0!1WBHUXGF0@V_g&o);($YQI9<@U**)dS7F^ zJ8fFn=O0NE_1J$*yxYc7>VNpGEJE>27QZ@*N$(uUHg6dqH%;BGh$;6>QU1h2g~m#6 z$A^!eDYo}Hs^}1XRq?*%DE5`t3f6ezbEargf9aYVn(}X2Tcq);phv`i-ufHzMHvwC5)ZEJXHS8EJM-jwua-;^(z#8D=&83 z+gH=^Sol@Ncg<%Cr_*!U6-gUey(5}z<(`wI$HQvK>$FOeep-1*e8F_K&F8yfyMXTf z>^pf~6Xh?yC+@%4MLIgDK;}5CqTH!*5;I#ZiuKg+sY=yJ`91DCzrcOxh9%#5I`^I5<-YU0lJDG}`_7+m-}#D?@4Ur-_|E^te5IUs zm3(_&j&IN6`1XJ1U1yGOk0_aUt8jd~k{6xA@$E_6y!#I?YG1;)-{p=p#Bv_A_LZ>}MFutsl*~{R|RrKf@tz{kXvGXRzY-GZ=9D89s3P8FIM& z3=FrQLAicJl)>T>9n|O6!Ga&w!PuXygT1(Q@E*4g&i=_dDC5?_=Oydl z6K);+6YKdue#wy%UF{z}@gH4HkN718oUZnO;}a)xx>|dVPZV){;zLeXlXJRS9;d4< z;&inD&M#TY>1vBPU9Bm{Cr;vYwWl1Pc$CxC0ytgmPxx0q+kX}CgMR*>_Fp~a_Fwsv z{a3Nv{;M0@{;Ld5KX1tGzxqc%7t#ln{4Ui87jXJuXo)_!gyVNJRMZFm`Txk|_^W^Z zKPZ1i|36gWufjS0Dp7#H`se$&{geGZ|F8bl&-VL-*6(HA<7yq-kvn8|cbFuHb59P6 z`m<(|g9*o^!z(?K7U-;#&zkMW*vwlfTfcq>JM?lc8)iM1y-(gsy+0I@UYPWPsu&J z-r3I-m=rKG8#*!Le`kuZymfvw6nU8h7+2M01%KKkkr!d-{sVLa$skq;!m!r@4iwb+!9g4A4 z(-h|hbYzEip3BbFy~NCMX({cil`mVlE?C-994aoCHQy%p3u{+>`w;styY7fi>lKJQ zn{<#48u&ui^o5puj!PP|tj}h4;?s@tgxMDrO*6F|9ik%?7B0b#<$G#7K5>1d5J|r( z64wNCvP`Q)3K(+*74k!;|l95iH?D{Z5=nw(s2x1VeA+^ zYA2g>_&R&Y(~fmAi zB-qQp=ysJSzvp~i_cyH7(HGnSr79V`nMk`H$SQ)TQ^W&GW+~ho5Y^$?CLqC*!x|Sh>!aKMowOdfxBP=coVN zb?3DYGqYy)-fPx+*7HnyYfw8puc|rHK2)oEUq>1;rmxgwzk~kD;0%Vt-O|a!o;Vwa zRqJbP`Xr_C&c!#ze@gZv$d;@jOObcpmJ%s$u1ORR`}?F1%M~@Lsv#z4FC- zwG!`DU?T68HS=RuJoBR*=0_T3e&{eib_(;OpxOMeG|yjQo|nKpAF0gqzL@9jFwcu% zp2uRIKUC(qn=;SO3G;js=DE8t&uy_@@pab^>+W2vyG~eln=0#WEY{tZSakzQ?*dURihVV%^<~b+;_m-BZf`F$ep{8|)vKv43>K z{t>0@AFbl5+pDEo&A`^P$E|G0_$!+al%0q%7r z;zV&Dj0NtMduEyclJYE zvIKF-Zq%Lq5tkfS>dqyBThc0Z=as-MZ2@kH)t!$3x5VnswurAR;Vio)0pC6?5q!Hj z4j>`?RbSw*+y(qqZ!7UvVxBtvPt*rJ5~vUI? zYXe=S0iU}W#^?eJbB~rY6e{Lm%y2xwQ1tO=!)(;S1|7<+cba9=->JG#ejAlptDYO8 zlaDsn_MX=~uoz=F)MF zx9h%xY1A(~GHI@F8m7(SYcCC4UPj94|4?4r{iwdmz(Z0#{WpVlR2gH3WP1(Mo`f0Y zf@O`@qcRwco%0#991hlNLeA+QE-$MucqK@?ZkPNjyr91z6 zi8OwAEnVi&#+r2;|HW4b8;#&$UGqM?#u_FZ?w>F@}B$Y@91_;qKc z@_J9*aLHQ}SWV+x;cW`nwW@-uqlFi$(}gb8beNDyw`owY)aJthsbDEjz1^p-hQRrq zWg6odXq%x&MQ*g z6;pJsmwat9yjKPAUX8+g6`9C;WzGC}Z6R(Sro`>75{cUrn&-nX&kHK^ycXtpLCkXr^Sle@ z`3z;A-%{qey)e&;L}`B-;{VcpeZ-F<*{_mi^j*2KCy9P92o<@-D-abhOKi5szhVv)FsSp0!@4;O{{z|LheOUe~KD^JbSg&d( zQdis6cdgU;hl5>?fAM#9&zMbpx=e1(l!g_Z-{f#=FYAWp-ohe?w(Pv*?3jc)yJgUH2kjgxQd|l!moe2I+=A&L&@2u}xR? z%O1^w2~(VR?x^hAa!*gy=he~br(IrZ()4Vs^ZxWf>ijyZd?!Vuet~|iLAN7Vp7!># z(e-RrlTU?Z#vJ|Un9jD&W@#jQ#kr#wT=|Uc! z)6B{`&AEKlTCUR<3{Ov{@%_(cU&1 z!*ZJZHwPQ94h}GlHs&%N9sbt%aatPFiu$t*ZXb3Sc5KdNI6il(&TVQ*`Qy+ty1HMk z+T=bGdme-FJnZp2dMnT44gB&A&!Zxq#~eHltrgFs1>UR6NqDaul=mtC?^RE{S7q^D z-NbuUE`j&Tn)wlo`SDtrAGI()PGWvMRpv*Tc;?4L%#RMj{IE37^JAW8#yr;u^SnLg zc@fO>Ysx%djCnpho_XHXY@XX z%s${`#wa+Mb->BkVn1hb$w{H_E*gDz(Pn*jS#Jwo5zZS>teM&F$+;wwvi+t%_k1X#h(U~OL!>mR&< z{=vEEA1r90f3UuV{y}SSum7g+PQ#+`d~W?^}&R`Yt8dl{JS=(`KyH1-K54>#}QxUiYLBGDDTqaCVXB6^2C6v66-`{J1>i3tJW61i-Up}agFpfCz)p)1mbYpnz1k;Mm-;DR{&lm@scxc?ZYlI=?u|Pw% z(ckr%U-!}-FOx}j-?Bm1{qPP=v*mM~Po!$$Iy&=sRsF5s)E{=H)ZTCDuDdfVot!^w zVR?6p%ld+!cN>D;cFLniJU6y~;$V7Pdb4qa-AYsQ3589c9qdfU&SW)}>lkF%7kJ39 zCRq`~p)9j?6=PlGfNi&QlkUZ6rg?2}o)j|1b#cY{s==mQn)kB{XisPI)@3VSRF1u1 zkaK1HrXPForlGmVH92=kMpM_-2Gg>3=Z*HE2TWmYjHWsp^O-VUDPwBBW~ZS_k;jHj zFO7!Iq3d;*qZ`RtJJ?Cz+o#hyzC7UkHuE%BQ{mOB5iun+#be58qgu?<`Q}u~S0*-; z>sQTa7X%9!p18%)6|Pa5`bPiA!6 z)5y^0-acL7s2+0rY}us#8*^(t#zZ-1J?Q6p{qQ=~_fcgv_qV%hzw`~%^~)#8UnaMZ zT|Q?u_!jzVi0<@J&N98Qsa(?*rV17QF-~&1Wja;3rRl;9XH%i?l}({B=MA+oq%uYy zYiUT|{)leytp2jkKRKmU#|qfwK9cf0^5A*&!1Gvv=aC)HV*{Q?eLRm$cpfeBJnG(%8xZ}NgWW{^62Jh84yjLBR_i7~Gs}^{#zTmw&p2&NZ)cN6o`EeKXBSM)U4=_K5 zVtzyj^CKtb#~ERMBs9-?e)p+ae)l2ryAP1xeXGp#j>zvW73Mk5@A7$Wi}i}Hy8}@- zIEuQ#2hR5)6FFM&L`9178vge2G|hPLY4Gp4FW@qwZWvsXND@?(6}4 ziHy4QK;TPQ-MPE6e~5MG+Q65H`(Pd5kf#EN9B76^UT20w4hIg|(mr@s*$2H99P&8e zkZrM_v$!Ny;58TwUW2a!ufb&S8jJ<6!AZm=F^Efo5to!iT+#@<22;Un&=~#Bwb6It zj(+Esh)ZI@Yry)Q`+?UW5WEI~;5D#Ce8u^Fe8GQ}BIj4v6nE|1a#-NMS`7ZH=ZHHq znektV{5}J~f3*etSB&4s1N>JP!GFd3&yRqgVR;hx8Cd^$Iq);|QurBI|M^Y}{0zK5 zs!;;{g9f2LiuVtWQ~C#4e^g@qgO>2Sje&2^1blmM1>bHb;CC6my`zF}=lI=(@a=ET zO>p`g5B{oQ0{APJc<@&YUsA>b{)*Q>REgl05~~l2xFz%YApbrum`MKWCBDxkv;5U# zv;0+83;8Q+_K&@YuQDePU;T~!V;A<1G#28k12-2tx7^Xqb?qH*Rfa5SHSJGi()N&t z>nh!}m#-u%D~D%^*0;WJ)X?PSA-Uq=Z^lX3S7Y4w8ZXq|V7fE1tf^hDjHcb&@|o@w zS#20s=)B=<@^S_b$3?mkIZg7k7teG9Pkzu?ic1C~F0q@^LRKR#nTfdM3F4A$h)Wz1 zmsCVtG8u8nX~ZQLt%yr}w>)#s8@1LoIK@d-qx!WqnJzch2KwyK_2|%AzF5UWwohNy z;8Q=Ru|mG=`bj;Fru%6;O#AC)HcicHSE0^F57UV{4NbK(bT_5_{?QQgrhxIq{;`I3 zs;9dCjeO-p51gfEA9UJ2COenL^TJ&_cfO~(-K~SB(>ZrwBaiD27aJ(&>M~6(c-vr@ zcDuN-_kg1Mmwz=feXTUjbfs89)0$mbE7UkL%_Q4(H#y?GJJO^#=4@Qvm`&qr7;q!G zq{|d2XKP+Xx>BjGc4KfFmsHOWxK{o4Sd}@ZyJq#u0b2iM=X8rrBjnWiXUckA6+`J> zWsJF^OX&lgTbfRO@H0K_UDWhyUd{^s6K0wk?CERzyQZh9O-N>ArxGe-uD3G{ho#g~ zbe*O0{^(j#3x_5)xesfehp+NHCgXWLgkKKedHCRY)K{KIedT#P!SnbK&-0jvc(+(Q z@vixM^&Ib&J>DxPyjNB5UU}iYI)nG>GTy7ghy3FgNo%#Zt+ zAMG(eA}~Mh3-iMZ^J9`QKdhPO{5$FhzN2`YxCe3KDtt#h6yiia&kG_>yePzpwpg#k zb=Mzw(KEn{J~6|KzDM0TEpQq8ffsEKyyzp~MUMfOF%os>YQT$jK;8K(a2YFr7rh9) zs6oMt9spi+Gw`AepUC!)vcT`A54+`d8Tj4SX87It3O;cs@Vn)K-_>CMa0EUv9q@_& z0KaQc@QG?=|0n`{;&27O8wUKYxDW0|pI0sPc`ZhtSA6?m1@w6hM4wj`?1SyF55_8e zUb4{Vbyn%~ny&PDok5?ME%tL3moxxx6pu@afj6pzz#C-%Z`5k=;%o+QRF>Xj^qavO zWe?t{0K_F4#3h3emplM()M3OWhY^?b1#i?#@J2CSoJQb{>H*#;Tf|r9{Gx5aFB+6Y zeo=EC$o1eC%>jPVTHqHw4t`Pd`Z?#n;{7-Y@n2cXQ)CN%2Hrn7@;CMm#sG(01~_B~ zGkp8^5&vI&JI5i5_;!XvP7L49@mB-Q@K=-K!C!HlOj7YzzoI_K>NpA22Y*HWDzQ96 zQsOJN53=~GauVaK6|cWK*Bi3U^+BrZDr3=>ntByGY4`tiNY}4!PkGR}De~=I8bfwZ z2cz3x1@*_<)He0rG{v+hO&-(jR2eIDRC$@kdbKxs9~@%ZFg2C2R#+*c-y$!=sp_9~ zr9aJ;KYunz(}JpLYoEyJvZ~@`*CQ^;-QIrk&{VxOQQLQZjBa$0xBO7QL|)|I!r38hvXUdmriRn#il_|ivLix)57e=0%=My_3pZE@WYL-uIiG1Q$n_8+rs>sP-2k}P0N`HPx*G-D>k{Bz3j+7r3%J*rz$dN(KG6hxVs+pX3j?1x z0r^beM$63H9#Lr0rat)M<0tD`dIwX$Fc_d$0GExtVVxSw9+3{1N~7)mHwy~=#LWj z!FS&myInvZeHODm`hS!@`o8F+ABsNuvgmitkACOQ=%bHBAN?1hkKP`A^q=iyt)0?G zKM{TOw%E^ET*CMhIX{DWpYRgk`j!CKmkoWwRe|f<4P4)7;M*h6CtL@8!aDQ`cLT03 zM(GnC30z-0@N#|uu8;Q#+akW=eBn*N-`)rO?X|$)zB?ZN_W1b1ODO#9j4wRpgcvCY z_}h1Yzg@5Jw_gT-dk^rpTay<}h~J0ti*kM+#xL4M;TIL_oSbhduLb_AaSH!c6!@6`O2a6SNzXW;w{ z;piXqiKl;XhtNOB`qjk#!71_d53+tW)<3vO=pQVk^bc}8b=uvQ@$C#xofy8I;i(zE z{aQTuc5CoHSrxp`Q8WD2EHnI-y#@T0HT9^`s1G(peK1!d^}(8E^{BK;eb7?Aq#yEE zH<7=}lSuyRn3BIrspPL%zN9(wSG|zG+NI>Ltl7_be6{Ug##c9YIJ>-g`PH>juRLx( zJ?3hn_6BNetI|mWS}l|3rj3wiH1aSMPu|{`YgcQ%-`Q!VZ`Z?31Lrj{HN0E7!mt?; zrhw}Krh}mSQL0+_ocwiyr{p)$TkBn-ic4*EMwPDqUv8Ik zuF~|$y-r(pd~Ru4_096bh%@rqUegSNN)9o`P8q1T8@JFDJnf9>;;NpeP}dd}t~5St zI+!fPG#uyMVW?+(cWs=}|NU8mOYTb2)U+{jdTFNg^x8b_iY>KVHayL$>iDj_+rzaX zn#h<<+Q|6@B>Q?h<=6W!%U6reG#u?R##nIG2>qv>hzDm}Hp$}$nriiHU*SocE2cvG zHkbyvMVgirZE6g0nq+iJebq2$b`2@{#TT+)zPZwrw}CdfkHnsbKc2^5cpiE1JZ9o~ zB)buA`Ww%qF`marJdcHV9*6Nf3gLNV!1Gug&+}-9xIHp~xShp`?7eEN#O?VJC%#qU zM57WXc30v=OL4n3^MmCRD=GP1F`rn^ET72oyJ9|(&ksxUJQr{PuYdz6DBu9Zx^s?r z>dt(gy8{Ps3pfBi&uy_@iRc7j; z$Fc!^EE&zt%^q;f+V+H!p#eMKPaD6p^>stw2pSTZlo+93_W(Qo~XQ5w>+kt1>&LL19h`5CF4z2_5`AzVi+akU)=ab?3IAWi0eEK+?PloB^Fg}?J;FD1+ z`Z%mlnCatOQ}l7H;cvef4}ZHm_}hCb{OunE{`Mg7xA#)`+oKfz_Qd!_^CYloslhM05B#Dp!7m!C@QYgFznTpGE3LwR^}vk(YA^V&S_u4CUljhU zc?$nkRx|!9OZ*Hq1%3wB=OxxT?;_uB-UrF+oTn6i2C)y)T71b00Y}F1CGqtSUJ&{R zIld$@e0wzT?F$uryO)A*p9Xw;&Uo_~%GX;NTsXllL^}&3o4;B~dgRkPL4@ydXaGOvc?1TEC3iZL1N_{Y?`KvSkB7c>X z_$uYUjIZ8|Y2niAd_GmZYm(cV?%OrSVtch0>Xwpvy+0)D#z)ItGcPpkZ#~7RYBNdS zcw30+YVBy#xa8wa4VU$;u(`w|)0GS1rW}atCNAr2ELeNGal!RRhA3S#=|F*G`tJwS~glyUa~fSk*soMYpYf5t?f=4r!ammXjhEosg$gd@g%cU1I3`$j7+klDGcQ zsEwu;X`h?MwU}i3v}j0$X-}S;=9iB&jhKGfyn7At?qS5cBN6ZJLcIF{@$TGs z;@yGBi=MV3FS-|bQH_!peTTg06y!zEATQbodC?H$MeP&Fi&`^3rlWq|7xi;KKdz#F z9)kLLP1Mizm>;ed>gRlZSeoavfU~>F=p>O+d^lj_Wx9zU8O-(vJ_U&p$;0r=f1O5gT)^lc|publ*bpAq2qF|XG? z!2WSqsMoet>b0v;uVwoOuh%kuA6Bmw_rc@ffs6nTWL@w;iu)kvf&2s>$fn?d+=G3v z8TP>qt?Z2Z!2|hG*ax#HJdoiE59D+3K-ywIXK_h0L06_AbY=Prx-t>amAQksBnxz9 z9zj>;8gym0Kv!lU;*x=gOAbR^9#JAf5e`SmMpe^!OwurA5=(@XjyO&Tko?hK8 z>P4g`LUlqbg}X{^#-5kQR(>Z>3SMa_wb0MFc=&Yvy+PYe{nNfPojT`jYI|o)1=Fi{ zrnliyrgA55ner4KWV~)S-#B;6d&BDEU8G*O((3J+gh=^HZnjCBnAr2Uj(p+?jmQpzfR^Eb+Q?W7M6SqV9YZ zb?0oTJ7+@Oc?{~#<573cj=J+d3DljfnIC0=Pt2p>6Hg(p7Ylsi8{iXX0iW0i_{1T= zC$7Ba1~1MT@Z$6WFHSe`;&cNqj$Lav z-3svHGy^Y=9=tdg75+pC{E0KcpI8q3iD$u|SP}e*qrsop0{n?Lz@K;={E1`0pXdSp z#FpSsd<6c)58zL{2>!&Bx0)M|fIl&9zz_b!58zK+r|>7nfj6|@zDRt!~Niy_>+hGlZX40hqGLF{*#A`n;(Dj zaDVb}=DK~qqOSJ8B@btddhLHB9?o2U(BDiC@@MgIoZm;($6@?F=K47Q77xex+qVPH z@CV_ncoejleJZ_9yXhjQ^^i!hiKz;J;#g zWE${aZ37=!L;`$dmT)qb_%gaF{0tl?Q!fF229A?S3f_nJ4@RPYaGKCRSl6t7@ZaF! z7`~n3mg2*=bKH_8eEZMhuY#<=UnQkJ$m+HKraowk{FN>4BeCZ(4|uq;z{BMS9?l#{4Fw*qDe!QkfQMUz=WzshI0xY2vH%Yk`Y-Wt{Jmm*69s{Xdk;KZ5c(!60uOgh z>6?%e=$o)+e)s_oR|R-DHb0_KH)Zp~7xSYb@NlPq7j207kr8-N^ZweT;Nd)hdu;>U zYhK`9-7(Ksfrlj*@Nk>J!_olrJTv;m+Xy@?{{|2Dv+I?$c)0plcf+vm-od)N0(iJh zz{6$6x?2c%I1k|AKK%kboP_-&9Q(&>>>vKvKPCYWHy(Jn6WBlQV*l9vi|}xwZl5Jw z_^-gj{hR&#e+wQ?-EDXI1$Yg16S3Uo@eku;zL2_$nOFqfk8YRZr9<VbJ z{m_@X4}Gb3(U;lEzSNV6^rhNjy%N{mr1YiML|FTKQay*o(fFI5y)gfJz4PW)83Y9VBn!iWy z34XYv(5C+t>K4@Pk+!{pOfnkj(|R=x&EMtd$pu%X-OYP z)V2Ji=tsrZH(?Fm($Dg@CxthP@$ZgKfL}B{_~G(_f7hH})Dr(yb@0R81V7wCfgi52 z!VhQ8e-*CqUrho(+-2~?d4m7SL*T!%2Jgf7L5}xHjK|9y?~_=*MC6BK`4Ywt$N9+2 z`v=YQC5iFF@%|6a50?i^%(@V%- zvHUK}U!7L+SB$UE()0K?@l{o`_=@p*fgg^~^MAt+_p|Gj zxbB+s!-@R{>CO1zPNCnxL*a+(g1lL>$9MIt-yo^{aOI)zJPG>Fj2~_Y^qo0BoGu=I zxCroz%HW4%`$tmw;n+SXEBhelhhsdc=KOHYZx_(Beem+X;D`Ga`?)pzaA67X!wo}R z@>t=AJAt@l&`u-Jgd$ICT=roktc~Kr$ z*7)ww*S*#R_%Lt05|DbQ(s24><~a$oIjAya;^AMZt$$4}8d; z;6tthKIAIkL+$`R|gc*OyA@m7%K%a0Z`bkcpPxuM?gpZ+5_=&(@^3?)= ziO5gg0{ql-!B4$P;HS>r%R$}-e(HVs(n+_yoej~EeGL1+PwfPqhG^(C_!p~eSO=Yk z3dtYK?`qlWUnEhdf$KYSo^7tvAnLetod&M&JQ+IfjAvWaap!#D@#&13^M!MrhJ^G7 zIbXP_Gnx?ZIoHQ|2OX^E(7|d0eH;ffeVoBo=;QD{uY~kD8Gn0x{k0;0JJaV}fIhGI z`fDx4iSg|poL`jhADmxQkK%P_ zQ5V3RpCK`w2Hro&bsAoyPuLs%gJI|&Od<3SW=^1gFfpBmUx{x|41e`2?jy11!T2(G zeJ~&DgS{-&2SuF*ULWMo!`l2+sG`%rc-6%G6??A|%U@YDKMsOt+a5gIY<`%>SLXb? zY<`%>R|(B?-p|Q(8rGtp^A`F!AETf15&Ajbqn|S)`Z>FxF3EHn_&n$RoV<_T7V8yX zcjMD(7!BRm63~6!4xNSuW;zYCq0>-B(P^j#orc`dX{ZdHhL_N3_$vuI4dt$#){Q;u zBd3E-!(c(D;U#o_%yk;BK&PP>bQ;+H;e-9dJ;Nj2tN=f)H98G!AKawugV(SR-p4+; zCmx*!z7KM}qNM0F{EGeD8l47D#3kntm%Kn+vL10s8N?;c5SREPE@^?dq!Hqh{)kK3 z{-jRB&%{@@(DVAEm%7H_4xPBR(21KY=*0ceOZ}sl`bRJIk6vng`n7-bQseZ5t%RQY* zLbc>h33cC^2Q^)M9%xR4FVN+1n=D<`P1OEfajo31*#p^hcC7p&u(y7Y<3o9iv|CPl z_>`P|Ye%U;4qxfgy@$H#?oHIIGknuL_`XPeuktEYmHQXVw+LO}lxO%3=OXDes`uNB zZeKF3Qs?uis=XK0ReL8ouXLbgYB^QAl)5zi%jh2=eh$izOyBP2Q@umqZu;0hdi|_# z_4Siq-H~GCO!Af@-KF-+&Z~!4{hpydCfH_^y{t;)Q9&h#c0fY&)Wc%3VN z*Le$gori$eISjncOmD&!yw0t`>wF!&&TpDcl>5ZP>wM=(m}Au3(avK6=DExb$m!+%$Cs*a7}N>H0+#y>*f81LcRvW^tAa5 zp#{qrPTtxfzbG0bk1t}BuRdF+xtqL^Ztv+7+Okn;)lLnvI?Zi&+WFSg4=(kW4{`hY zeXKg%{*GpY|3qDM+W_6H&<1k%T57!^&{Z1txtn34F2Jz(XgNc%Vh%?8;{k^9k4GEk zul6wvJCqwvGwB~xT_}Hw%B-z8H$+$SXmjoGc^%av59H74JBxhCi@*cP^_}^5Ez2kV zF8x7E^^Z>A>r1Hq!Sr!>{e$r>vAQ$U$KiG7$R1-Qu8;G(_}fLCj3qpExvl<^$S=z9 z)aLx63{Nfci(XZDoz3}0dA`J)|LSzIWfISqF#fCc0{>Mk@+D8q_^(zWUlOR~MR~rY zJoIZB|CKHH8EkPMNqHXT`1UMT;@hpoU-gA9z#QlTtWk6UIR0v~1ziB~y-Mo*Xr<^! z#aAEX^Mmt|@%dqCp6B(omy(jd$}8xMn&+=g;&vmaa`{iY?7e*1bxy3oEyDMr!{POg%S@cI{`^bGVca;m>8YQc)rod#EI{fd45WX6SpgIqR8)) zl<&d)Z*mwf-1jrQ+11A&@0?%=&yrdHPbXLXwPrKrHo>X19~UmsjZI%mn_X(0Bz@-& z(048leP^+5pfS^T=5=SWZou^ivp|3F%lcbxQP3Z(ujmho_>uvM;7b@jk?9YL_{37% z4rrG{e^AuNc?Er(p3uj!x1f(x5BfNH&Gd1CE$HKfLmy|p`&(@^^l>$^$HU*w`qj+&+gZQ!XfyuyQi}dZV*B|Jg9hVp&ZjT-4>CS|)<4Mj^x5;+1w9tdr_Y}U$G0=xrNrJVuDf&zx=R}9 zF8M3EOH1R?T@v3bYv+eK{>laVoEa2-&WeIQr-;Ae^TU#k`_~DZbYgu_)Ny}}`ruOw zI_~k+2W_!lCA98Zim!4D@fG_%7vrlb!uR>qQmf4sr|@c{cre_{W4h5ch9 z_75HQkJZ>e24eqMYPNs4VgJaA{bQQ2f9z5Aj~MJ9*6f2^7l7}BJFyQQ3rKDF>-hwI ze7XR^X8WKm_H!1OoJk-qd8Nc9#}JpyMO?B1amil9CG!xMoJL$S5^+g+#3g#fB}WjK ztVdiDuEZthmAJ$f@m287^yPZBI8r`i?H7)(i}Z2%ntP~g@*bB}2k&{Pk93)>Zn?aM z)~A}I?#ZUI8aZb>>0rg#(w96XrOlu6$RQ_ZOUE7lmI_vyEPZ;IP1i-G)rD7{qa9o& zo!hWiE7ab@>$@$CZs9t$-RyF!T$(xl^JJ{khN)j%-p{vFy=&jy&981+&HT-UG&d$( z)Sl?HOV@4bc8z{etWvPf3BTq8tGp9$pehK$f*)588yE)KHllJx^O`V8l zy3?~|Y1w(L_SvRBvd_*%a_fSrm+uSYH>9%~=EWDXRTdBrT z-G&S6rAHM)wa1U$l)ZQ5(Dz=tN^U-Uf&Na7ocb}3UdtWBQtQvP^Ow#=ZI{|aC_*UhMjIPs(31nmyQiLrF{CEQ0j5E;9C~HAC!~8p{%E66pd*3iorQd&H}Z*}G7ZQy1;82_2P5cQL%U?%>j!lK=4ia@(Liy1@h9>OapZZWz^Vhu-bt z8bcS zGS&f?u^afr3&3UEHp69113qyT@QFI$6JG(J7#}XfQXfm3G~T-0zKeAnziStylM=%3 zHU@t8je_6xQTkZ)$=YjgL*JR}5Besc!^`ytdqIEjZ!`VDy%zKbvq69GY_yNo7y5%@ zomcK2Bo%?VoiUWOM#@ zu45wdx0|BI>HVQ&!ui_|3H@=FH(JRFuj zmtPEOqZOZr*gu#o*%G%~(6!8yh_0m*bS(=(*Rq?UYxzAMT}$!3vUYx?Gn*eBp@05D z(LXl{`sW>lI&j z&HEtvx-062^Zb=q$0;9A9f#+y*t+`->+bK2uek1#xDTGgK9~;s;B~WoFvM&h?2dh~ z5%$4r*awGL*az<`````igSObuSzNMTh)dEeuv2C45EqxkATGIwxMTq0lG=z%+z^-C zM_eKyE{R55G7fRcM8qZ2%;J)#N?hWNxWpFm)q;$(%eIJUTE20Iv5t?EeQ_?=$j-Iq z-EOL)DblK6v@N8rmieM4+n1eM2jg~i;eVd$=4uN`S1NDRU8%fWdV8{v)Kn@&LK0^n)Ykd-Z#2v!(yuIUVW&d@oGL=s-{^ZHJ)vhsw{Mrb6;K~_1HUA`k-GR z)t+2Zw=8cXU3lBI+Dah>+=^8VSKF`Y?bfHyP}hy)7nM^T?BeLN#mnhTbZXZX^D?U5 z798p}E-0I3%Cyp&tN9*ib2uE)c{?7|OkMaz^66SyE^{?47EN-0@+0`A)aI z^7+lHbT=EH)iv=cqsx0K&~4E$gU0jmQ@4F#?<~fNmk=j@y|qYFL5ULs5huPuoal!* zaiCe87%9YwM-V6aDsf^SB~H{U`NX?s`NUj8KCvqDiN}#otcZN#awVU51o^}l$R{2{ zKJlHBPYgpo@geew_mq6%MkSwUo~M3-y7Md4oim~Cd=Yi$%cwi=LESky>dq-pcfO6f za{%hj%~5yGjk@zA)SZ2my7L3nomZmn+z55&Y^XaoL*2PP>dqP37I&;tKGx~+`d4sfhNl}fVZ=`nl;=!7o$H!Ww!GiJJ!e2IvyQf-tSzowzo^r$TV)DE}7H|%MR0|H`?oJS1+U6uk*>L(iTE(|0!KznT#bpQZWp;QS0VlEAl=L-$f&w8Bk88g&bUblS<# zwM=Ehq~z!2;v-Y)yWMIb`%FBn$uqs5?tQ(S+5m?FYHQ|4E${*G`N8-A@+H6rz~;w$ z@Bx$(_yB&EU(~!`jm>keYq=DEz;$hKVJ9EVTSIEcYbZr z`c5LN2> z+0!xy07WJ>9DqEWTZME+ZSENw527ljuE;Uz1K^dSHoVAUMgvySGwGCmDcah z8LiQ=jMigZplW|sgL<#~Q&rj0?_ByRaiU&`6WQ}PfH<)-;zUc&qb8n5K|GJYmFL0Y z#BdAGBS^_7W_>!==?wCTJZ_(deBx5%6UDf_5#n~)EN-79#O+g*eBvPF6ItAT0Qp1~ zw+AV8=YeK*=YvY!ndf&83HjaKLfv^V^1CIG-_;_&8;<<$O5}I9DEZwZN`BWI2O#1T zn+f>Dn*t7?8gKyb6nx??-~ciM2ap#yfTkAkiT@TadNtEl{gMLC`V65QBGcq(( zYIW|4R3X?|YBYG6`jNJZ_IBGh>c^A5|KEP+*o|wPyfzb`FlNV;?vjDW1+{d9x|1 zVi|nhO2oWV7tZOgJ)3*2)^Mq-v^t*t^VzMP3@$U*>RJE!1N5Ko2QLomKkpk)|2g9+ z+8GZ|kp_9uM#zgUL0)tT@}k**v#g4|=x*diMhTvX(|67qkG}IW^lhJ4^qo&2-fgPrJNLpqc;i)1&3V6! zx*dwXvnAg1^4DKzk1o%kWBP;F;?W=M1O36iivHkt=pu9d!6l0R;7mb(&=&eQwzv;# zo`)s9ZSi?9z3nv6+m7#fSmM8m@4c#t_iDfJUe&Sky|QM0SmI|8=f`1TetZIN)FALi zH3Dx`kCDUNEcFk1V4hdOJfE!0bMyW|KF?YIAe-mr{ewe$P16QOI%xurY29qGUh#Ez zFL2?10~elD{M8`=f7Mo4cSZcw9%cVngZ*PAa7!zJTk;WbOML&ZR3Dt6>>s>7$o3Cb z9~=wZ65Brvz%9kM52i%^D!zR%zWf#22gfP-E4~l1y4oFOA7phkTkPlNamh=>C1FBb z(j9ThAjBmT5SQ#kTv7ya$zsGMD-o9*MO-oyafy=>mn=eDQWJ5B7vhqWh)Yf>afvPB zD~Fm>%T(V|y_{xpzw(n=9Qp^I$!N~=DfN;j+DOilZsZJIepb7%^k_i`Q4ySUqo(2`_6MG;|bVZyv z6mjA`#EF9uCyMdzG2|2TBcE8tET5Pv3Hijg$R}1nK5-oKiA9l5Y=L}YQuCrmQFl(B zH?Hn{)~xP)7XY{d5LLW;F^sy{NAIlZ=u{=W`%T@HTWJDiJP4ux?)9N&X|n7wbGED*Ttr&8yS5ZjZlx|+bZ+$$uWcIp(OuP(p7v8& z%ZoD>yf_WOi<1_-IDdf`r!;tRS}43Yg~5w69K1Nr7I<+uf1-zeob$aLUtK@lv2#m( zv%9*)ytLZ>=^eD2-e1&RII>H+XU3nn4g86(6#m3a;7^POf8u8FCyxB+AVn0MrEVAH zto5mVQ+=e{BUM50YBi-dTOb1+KPYI)SkVRS_RJ!xx zk@jfgochmIYU1zRk=<9F(l<;|OaDM!T%Wd$S|5?~kknzsduh~?TGGzmJJqSrw%0Zu zoI!KoTsAkZ$D$9}unzm`n zC0fT}H~@~5(E$hG3LJnrPUfY818`Pw030XtP{E7-C-nz8?)6vPhqce+p4sy_COnS? zi98R^FZyratH*e+GAHt0Svx<>`LD$J!T3eZ=SNRreps64mG2(YoRnfU3m+}g9o{xo zV)I<&ze;GHPch@avc-Cp(7J2hKR5yFZhNe|sazB9A7txpA!Xf73jXRl_K&^_zFpiu z62rIun|+Ysuhs*9wbBCqYK+-FXp8;)SI1YQ5SLU{;u4m>VsVKr;;Ur%hx4pu|7HIW z&xQW5k|kqt9k*G0$88qpaU1d8CT=6{+stjme_OcC;y`Y*c#zwO3uz4E!|nVy;=~=? zX7M7oS=`8N7C&+uaU}f~@g)5gapg8XhQ*iMW^pFB5pUA(O zF)aS&Hj9I~jd+;GBQ7Qz@iF<3#mRg;iQrE^f!THrE>w#N;bo_^6?Dc%5C6Ww{aVISGq@he~`_-L--hmgXK2E z!*UznCo~@TSh9hWCI2(LEFaIlU$~9$7c$JuupACI_!d^qX%?0b^i_^zbuN1Q{~gYQgw?(BP$k4GFw^RD&$8|16d z?kQ=F@(G?mz8Y7?i+7&x;FOx%Fm1M*zMfL_blBbzH7;5 z-?w}W`_APy``+a?zI$mrzJJNacQCzU?0cAx|G(eG{C}czlTYxSOxKL>WjfBjoB43W z)#R%(A%(*DahG8x^3~_pyUADE??%#Zul!w>{-*lwF*?^CDVFS+h|BrkWbrw-5vP-{ z@Lf*#i0^Z<*>^f0&*FG)v+s6pgV&bE<2#;ge9x1w*mpf2&vPZ^?(nT zjx%0dJ|5pWqSzGB~@d<@HTaGT{jxQ)CA{Y~UQ=v>Hykj?TTd_2pGa2xp%8iPCu z-6QfPWV5^pAJ6h9+-7+cZX=&UA@*$luVpkjJ5OA)iAw%j@v*EWg8TA}-$RE-5BacMajC>OLishB~ zc;JM|SLin(UzyN%!pE@w6K=CU6mD;v5<%xe9*53_K4!96UWbooc`9zBznOf6ycOLe z@>gWDJQg3%`o6f$`oFl1J}?@OJQvyMd)dXuu)G(yozO4MZREk|`ezlLN!N_L82Rem zdn4U1@?_+zqII^CuWl~BO1^rruQ~ZD&zTPN+u_lXbguNLd(gSu-%KXEq@S9ut-ePg zy5`!Y3XrcpWvxZ`IOoD-vej8~>-l|sES!OSwX5kAI=-nuI~sq~buigoHl!q9l?^IM z=hg0=Lf7*>zP^$)UH9fbdu@hNhf@hWl~{E9Rl zJd0$5Z;|#6#=FSJGyX+xgNJbox5YdI>MHcUiFpRpStutX=C2s95dS-jUx?d`XNcS2 z8=`YrlfPnoMEtj6{tES*o%}fJICQ^^uZSPFCVz!`5B(kR8j-K8$zOr@h@PF8zhXQ{ z{2Kn7^P;RS#jlgqr?}1PRNMw%0Qtw7yeQ)n;J-y(i=MSLdC@=l_8*?JCf|Fao?-xo zi|6B6eUaO!Gj8U#SjR!#k&cUXoImx!AKtQMeem;*xcXq|e_4Gnm+)TwOnneINScG& zYjmOS9oDbG-%r-J!EM&R!EN+$(7XDzUN)LjubfJg&H6j|_*TGEavS{~GzNViG#t+`nP5^(DiI| ze@e$QpudEVN8b;vQRqu1U$OpVKIS?4l)3GSer0Z>Z<+ok`j_ck=wl|E^)vJFtgo5d z=x?Sy+N=3!x<~Xolg;{``FJDxTDWbG{uXZc-aD1Xqc56l^u3V(S)Vi?&-$ggjlOBx z2hl%G*Ni@DI?np3`FQlXldr(TLvH2|drt1N35FKYYXFeW%KlCnvcanU?`hfVDe!z2cyAN>P+#Zza82!yHx%$(& zy1V$0eGR-&e7qlcE4jTpbCK=b29G7(Bls-I-iZDpK4vm_q`18Yd{W%*mboj9&vk1Q z*^bxKlK&YGCLhoEFu4t0OnR64>!sZ^KKbEOWM|ykk$hDL_IGBHy2hpFaTtcE3%TgtYb|yn+qZfwU0aGur|6nTsgKi` z*XQHvR#%2NQC_9*?1SW!Q|SBR*E|RPU))Y{J1!41S*Vxw4-Jj;75c;Y_|oVT<93a~ z%g86!v{mSOPPctS$FHJ~jE_g33Hj>s#x>+C)?dcQus$Dp@=UGvOHCwj;H&?m!x3td)PqtG8mzS@R9IX=c8{c_yS zkG?r>=Ztwr=gOVapU!nS_gbR&+X3W+v7HL?a3$5x2J1{&OIGxdiQ)h_;<)x==0ma zk25|VZZmxaZr2Ad8n>h7=cm63z8*Rk_|nK`{5^cUANmBj4P6HEmArW|-Q#-4OJp;i zYCfLnHgKEqt#KRtKQtbC4rD{ufqcdI*!Xy+^T2KJ1kv?_@0zX|yg_uF@n7@t=+`G- zpc+`$eB3`N}j`PrkZTz7zSXtNIrCD$ATl^xMvxYt!E>bo~YSXW#M+bly$q*W}lB z27Q~{PBm*Ojk%iP4Bg||2^qrqn2>sbH0l%`RRHt);U1O2bVog_lv$!@>RVDmB?4E_PUd=TCRIYz6xpg zf_^*3vl0ExCr{p!uPQamO6M)&cz}F$Z~Pj%PGj<58WWrDGWp6?m6d$uHGL`hD)Wii z*0On;mI)|&MSyhik1F@7Wd+n-sl(2q=W@c4gd9|XT0 z%_Ha)k!@)oWI9It-fg)L+A_Xc_7m~dj3mZa;Yp0I&<9TIt)=+tKNYt}{i3+Nj)l0r zgB5Z6!z9M-f4&EQ%w}u82a}p-U_2^(t$^Meed8oG&j4LGdgm?W8JJ!iKNr)D<2KWe z<2HC&Xbp#+9NEy7+sVf;{uXXCojGnpZ;q~C%riiLj*c@OIzAq}Bt?)5ScZJ)~Um;&v%3m>E7CxTovv8Z~v~U}|IpiNP ze+B&(@)hIL;o~jkub}Tj*DvO;nBEKjtu=X3##heAGv0D;gTI`7Wldg`@tgDCig{7+ zozs1R_nhuMsd>?1R^&xp0-sqWSnc>Nt$Ai@#UD zs*VGmFM21z_eC~%zi5s#{x5!B#skJ}@PTdSHh95kjRHRy9cMgYe2iFk{+a&4|3B0R zt-&)e{$K7}#skc4@Bx$mt?3_Re8K#;|Ec~##zV}n0er-C{op00_X_;Pbe!=N^YPZK zSB%G)k7s@fZi6qG=H2hE4}zzW>Vx24rf);W!_2RT@iB9o@iKE8 z{LHiuf~T4G5%4vW&3K#nc*ft%ZSXkL81OmM{est-_Cdz)%*QjHXKpjTXKsV{nZ|?v znQZVt@8Dw?A2hcaFEqEo4^7t(o@lxr@I}*c#v9GYgEy1bbLfqbubA!#AH(!VxXpA( zxD7oL`kUa{q;r9Hnry~D&Brsn5^jT!dONqlOHKC(ermEAPckXn~!07d)#Ka zd)$Wp9{o-5X4AQ#$47o(x_o>*=`FO^&%5Cs<)Ad6Kkgf;(t8|>{0`l?Tl_g)b2wgzFV!G0N4AYn9 zHskx|Hh913Z-R%G&IKNDvKb#ZAJ2Hfxeb2s9oz;_IQa*B;bb%3a6X3dhjW|ph;ti! z;xrz-;$%bDnta80#`$>0H_mPFj??vnf1IuvJmmD;86P(XDJnD4K;8UmLj8~nHx0DyHCDd`2{}6%o;O1NR~0jpsJwkLNbyk>@t}; z1O9n>AHYLT^@UvE+vejvr-spc#rWy@aq!gBc<|MeJ*-zSy;myTIXW-n>E^$EHa>{1 zKYw*2UC-yIalH(w_PnQi2j4yUs#r-s@)hGL=YKPHUl|(z^oj9rS%}2(o&c}l%o_uvQ^IGy1O4192Ft@&jAZxdu6oA)E33^S`qOeDmA}@BB_~Ll1!N@xZImWRKsJ$-u`jod9kZ zxj%-EgQuRxx5(O!?0U~XkgvjO6`=DnT><`gz-Ldsg3bV4GxP??SH+xkbid&3r}cbJ z)NbfU6(p^ztB-2U$xJBfP9tddkp!C=_~NRUwCnU`t8y1v-DiHImY1=c8>O=^H%Os znXb*aA&z6=xnn8v)q$!l$Um!E`;onKR}u2bUg+}jYhe1k+=fmsjfY+@+1s*YCSNiA zUOt}b_;R~Na4Pc2i-k+*nxXGY$5TV+myiGRUj6WdHSd)z*DI!v!Jm=1UO_K|-UsMr zkUi1DdR5{l)~nY)v0g!+gVuKSf7w3BbU?UonH~tYt=R{m7qW|w|5f{-E#oVuSHiE~ zQhWs+6MC##d*B_{vv^uihpxzJeYKt+&ucq4mmAd}YhH{a4``jtTfH=(X(T z{yZe$udKl{K-YzQWexu7&-dUDPh0annAAK2)3@Qz@k(6zM~D87m}iI)@(f#qJVSdS&rn3jGjtU446TGb19W&OCnM&s zz6kj%rq9Fgk?Hhs8+tukxn07F{1wyl;p4^p74&^*9S*jTzd9l0uU-rJtFuD>>YIi9 z)h-M9tH(nA>X3!}71I&o*PPV6DAOC_zlHA57Hu}9QQU@J6g@}iM$z{U^rOgTI#PT*)05&h)0N^j^rdJ#bf(CL-W0_EOm~Wp zXZlmzh7J|Y3+PeNdIDW4IxhBk{izTB@SHXE!Jp})&tgM<(H%k`eV7$}^eLkg=NA?G z=*J8EqH`_qi~bBwM(iJiE(y&k=yZ{7P5U@TO27OnW=7 zK3K;>eQ@>v!1^F`q-j0R@wo=&vc_i~;LO*+7tojHb}8sgbNg-Xmb4z`-SVB@r4=`G zQ2wW0jia=#ZiOB-|LwC1p)}_Bv77Whc<;(V@nmo4RrB#}pj*xD2hgwP_M}Iz>9-xj zQqylQwezQS{z}w#I&YhZoMczr;!W58VMGbK9(B>vbo@PZu=%;ZIKoE;rnS$wGG-sV+Id+OLOP*oZ^&|8PjbC%{9%%HI%<{cP&A7+c&9c{NxNd z$v*vIDa}n?=i_wVu3Jiw9o2b0ts7p2v~)d(v=8ZcM3~TjH0>t&s(<;#&Z25XS&Dxk#YI+ zeM?i4Pn;UQAv=0SU$SQui>q_3bC0W+>5@MtU%jdo$G!QYLqEEnubS(0{WG_D(ly82 zDo$(H)b8czesBMklh*U|%`TCzF0M#M>-q5qW5`#H>P@8It`B%b=W3J2o6eQncQM%` zg5$WVhoO5CtXGtr`p7eZ;R>p(k*fI2$N9PXneZ> zy{m6N#nt+6j9x;%nlU#!`D8)sjdaa5lf`k^-Y(`&_xtf%95yDqeVUDYe)$$FO1?^# zYzg`5*4|b0+dOZw(Yc;(38i!0$sI-ZjA~Qp+CG%&L%wRe-kp5a|KuF<&xn|#WIN^V zL_R6humSn1TW}N|KNP-##(#gYmFxxEtC6o3RUJ;}%~SmtT~G3qGF^W*uiJFZSEGIC zxNmKLy5AyE?dZKq-pYY|b*n}N^3|jL;pD3(I}XxsH#o&{AbagSPUi|VJR>`7P8?Qh zUwt3CW>dvD%ulgh8|WTarF=$qs>2fv{Mn_LHJE&L|KT$_zNX~?8eeDmC9>aF>`A_Q zHPD~V>#+1W`Rc`>Hsq7J*X-!oeaod~b$UlZJDd@b(qz!a!w=cxSNF!#Ki}=*{9HL|9Qn$BTU^g(_WgF`w{%ShkxvdS$VS(bx6(E`{%O`8 zy5Cd9#*nW*-&T{ayc@SBU)39UnSAwV${qS`n<;Uat6sh_5xc!t6w->Mwx9=0;_S-_-9&I6RcNOCHCqmrrZy|24@EhXxKi`8t z)^=;Y2QB3pEb+;-68L1!3w$zSo}r4sClhEP&yZf=ld;rCKSbb@*(T%}#6Ei0#c{Z0 zkx%BXkY`{z_B>{@hEGN-@X34=_+*l*3t;Enl47k0EA%EJE$B`35%O0iL2p7M=uPYq z@>iz>y@~RI-b5ZjZ{mZXH*rPKn~(*)2}}8_Knr>kDL%y2*{#Woo)hw-xrMxFOcL{= zAwQ89Z7$?R?+AI(F+Y(P)d_jg=N9s!PlUYapM3j|*=bEbj#$UpZ-EC=>~|JuYMO_i@b$8&NP7slIhs< zF{Oom=RpDwnd@ASs}}+kX|ms3m>|YxqSy1%Aqm9gA0ZJ!L1hXS4r(36yvL#KcVOKKcznSGkRY03O1)YPLoS{sW#DL zt^3SCToDi|IX+!lPP|78b6V8gF!)S zDKFRgTpa)20>^QbmpfIk59R$%hCHO>MVIWR-NErDlYVK(A)tG>J!C;2HaT4#7%k8_F9 zMd;pdr#6rs^X>~>oAFvQrN`M?P79c|Z9ohp&O`iD~2d z;DQUr;k}RC+CjdGDH=oP9aY3g_Niy<$R`()H=^s=emVvDt!PwSJ#?9cew>%zlGcy2 zO6bQ46Z&!V7W#1>3;j5|gnpc*LfvY+(2o-#^y8cs`f*|{^y6$2`f*}~ew<4`(U0TX zurlS_n+0Z|eEZC~r6}JX+;JtnSMyuP)ioYmkK;goG+`4x7l&)7$sT&vho0lde1qvd z={jxz#h-011<<=xXw7M|V}jl3{kdDCIpx@g_d7$!U8}F9@qIFdlYOFXU7DMn>&MOI zarS5Fdd60*NbgUp43FrVX9f7t@rvqsG>=lApFqBP@I_C)%Ce>t`RdF1TjZ;#>@oD) z`bFckEIYJ+N#`p4G6VTxY}IhOw&^Wbkgo?hS9(r?|gU&-D&*PDFhbTE|8JLEt{vhxlaPd@4Ao1dS9O!$)Ry3`$X?U?a%{o$Fa()D<|zop~R^^?*4UYvA*d^Pfb5BX}q!C>;$9p4h7>0Il=sL?Ecu8ZnCd*Iv_~dQ_vV9)KkgrBgxMbwdXjpJVvJVa} zL*uVhG?2Z1_6hRU@PWzb?}XNAMAwja#6G%yui8E6dP*ILD|b_KQEb)kBPh;OZFi5?qpYxBv{Zp2W?&Vb%JQubMtdNj|xA@eSGklh8g~dGzPK`tjyk^Iq9bkIAZ4}n4(Z6WD68FIx|Dk=bj<65r686C}!anFC?1R3-KDbiY z2LpfeK4{DMYSvH0SLKBGDvgEsN+-luJFSSX3MMhW`c-lJDMOnyS#R~bWu|obzWkvofNXTE^5b{?y zg#4AGh5S`IA%8W+LjKAmfaCi^h1x)ty%gb!ThxqOr~M(zl`5H{mMO zogIa`b5i>zo(Og4GeX_jS*SaUdC>*F|7_*o1wIz)&QIRQ)t&$3+kbe=8os`y)^WU( z$g}W)rR<9r5R1Kwgz27_h+SS!Fy?fE8r)RC%d&}h6K0$f5gGk5O zOgc_7<=GA<9p^0RIGks@F4c*%l*zNbjq1ehr#f+*XZsY@iQ_!mYJKqkz2hj*2Y*%F za2Fp@gDIZshA)<>8~&W?hI>%ma7U^ep4U{=4Ns=J;Wkt^d?eKk51_i?ov3d3da4_K zgX)IAlBpYBMy76fLF)n(M*YEwRDaM_LH)t;R2SfP)*n=o_oLK*Fu$mGA>v1U z2Y;qc+|R@hj-~JVepUS7n4hQW)r&=XsZtdc6NPu-JISXUO&LhFCBwIO^k zy0H=d@7mQ8{%oH33hiq;e8SvA{v{nptAIMr;R5P7xe9a~Q_^wb6zDjC&f3_cJQp6r zx?1M_9P8?{+ZbTmw$>D^t3cCC;6EeY1OJy3XM*t>413h& z+|BTLzJ~+a%f|G^e9Occ1FNO8o&c+lNhR?e(f#K>z$$!OAg&GhAZl5f91yu9YGm%j zxKA=fu62)%o#Au4s1DG)BIbExjyHDfguS6fYhbdYiW#sf-YpvKhHw4R-#s7{_S@Wg z!0OWD-Wc~vW;C$su2mhF1V2cH&&zgCMEe{+56rjo05f3KV9a-5Rl=|muo`Eu23R#6 zw*l7JMtOr&lW5RLmumvI~L)^3|j5YYvG1x}+7Q#2JFQf7Q-LOu4OLnm3 z3g9#H%rV#@c7uRPH4O(~<+boQ+QSpV(Eqf{9@wMfS_7*=2c}@$VMb~2=lj4Gz-nXS z4fxzG!Uyfmu8H4~dR?hjhmv*mJNGMZ+OIk)*snIyeicpoRSB8>Y9{ShxwK#1{6+iK zCVCF8{+FJEOX)cnPR~JWdJfvtbFdmc2j|dp@OU9V2Y=`JD)$$CCo@y#JDGun{GCi; zoZDy8x!p+S-0nc3QEcbmo>(2arJL}F$cu~%)){f$x z4^h0cv4Xs6ekbOD%i_Fh=2SO4it2_Jlo#!;Ag|gm8D8{Wx7T>LZ9?(RFDc$x&9|%e zD<$>3SjQQ&pfb3u?H#Plr1za6*AIYm_?i076N|Uojx&RFoDNjq`2*E= zo<%wi*LN;U^_?phu)g#5()sa{Z*ujW)%u_cp__gaft8#-Sb0%pvdk=lRU;1C%)DFa0pUfj*_stn%CG}}=s}0tbV-b-%%Qwm$oI`8f z2-rRsEU~{e=^|?DG>ncw``yJ$(0}2IRj@7GMXjR5`v}mfQgcN^h)YYX#Y#~2Tc{!9~`Qn{@|ux zRDbYK$R{(0@{4M$5&1>u6heN{aX*n?^uO}GXp(~XK}(r>UK~I8GxfawH@y#bmdUI3 ztMWi5P27ny)#WGd;M>oB3&yk0wM;p1$QK)kxF?@pi?BZrT2T#qX`AjAuq(97!~Wd1 z@-^(q72al|&zbWgpP_v%3-G|R%AN!FyZdc2cw?uF7O-zR8K8gYo7%7sw%mt(esZ}7 z7}tE5C2XB7+u?siL>Kr|ZTok$KigE)LV897H_QW8)$8s7RxhVr239w=_X1W;XAH!( zPELn#PaWG47^_qb5eL-NO+2&S=2ynta}o^kd>=5R9p-3MMCex6Pv`@aPEEAIw{P@X zi1w-1M7&Z)d!c{L%FzJdp7F3I#;y89@c-S`yo3L1j;?_JZ>L#+Z?AM(#I+gg)qysl zW%deKl^#+S=ZfBQ0)UmPYcQ}XUsnV7oW51$3w^bG5611WbRzzbn+NxV&#$|716H;^ z0-sJ}guZYtyaOW48_sP8@4 ziF;SWxA`#(;B)w)dBDo-i&IMSFt(S%N`rYHv|5m?r*!9m1 z0#?(9`eEFn*R$YHqnq7WlAN+#aq)pEE0tV~+1?YaNns`~E5zn6&QW z1FTksYr$?&?mDiGTl@-kvhI9fWuUtSST!msa(C~%F%ACDcwP?vT#1NBd;4#PFyD{` zKENt5!5&x*IOGPbzHZM3Rxd}r#kJaQy>U;!FQ0(b$Xq>)dtdW7unMu=37@SJL`~s< zJTc#9m-K*@f9oy4s>0;ez~|DSa_ytO)zGM;@;I9H5PBBYLa^RxLgy z0H1_?6=9!UvlLjhSXvkUe4dek_HN(A??}C_RKIv7>#DH#D|gzj^l85uFSB30r{7UN z?N@DRzgkWEmE~{Tubk*Pc>ND}4jRim2Se#O=tj@MhV&e~OV7bZh438wo#(44I$!0= zoUa_{e084AS1)DGR}FsReD#FRSHl#XuYT3Jy(*pC%hI{sLczIxD4pAD(z*SX%(*>` z&g~vQac=Khz;nC$eNeTxD|sJO!ZYMjy@}yeZz5Siy$R0Wo<{X1+EKj;x%}-VDSvxO zsyFe1zC(_o?~wZu&yY{wA%CU(?e*w8PB^!iWji%Qg8w5 zE-^3KlxqPj~1sP58&0@htRLUotCWa=*MqPk0JzFoCnDXH(wI?nl=@!+y_LIcgD zci7v>rSZO#y}2CXO|oBmACUT_UlBRh9KuY&3k8ynqenW9FX=d6Nym9aI?gQ8ak5Cq zi6kATH0d}&q~pvZ9cLivIIT&?aU>n*sbxF(oHgV<=JkB>56oSy532s#O7y`-*M~q$ zZ4g}@>#FI@R#;bGbCa7%>*wHuE!lH- z`r`lC^K&fTTT5u>!2Zj8k&V>9zVF|72X}gygZ9uxN727V;#Jrl_M!%sS>_6io4Vl@ z{F%LQ5d1&XMGO99J4K+~?PfIQd(SinSY6+{16cX)I}5BfX*r<3tG6S5gYTRV;+|8! z48T~;BRpZxc~>8P&KOhyb4;tRk9YYy&FzvUOxC!1!Zvcz0X_~kn&1cK3=rSUxBn>W zs@qY0_5ouAN7UneRg8Pb*c<*_je8FNM~@4D&nu3b;(r}<#uD>gJY@oOd58P;!Ou9n z?AlcFf2&P8u-bd@60WTnBx0OTn%~4&4$r^A&a1H#zG*L91)q;P1_P@>V^e_7wq4&~ zpYsm{R@u&iQ$4=%JK7(cUPS*xmqZ@djypZD#y(fyfN=-8d3@-1^qn{&py}C2GAz9o#}>WUs=O5=F&59`bME^G#_Y% zXU7qfTZvMi;rZWT54^n-&#a?$R^z#^_bwREsWkIc=nJ!seTRL&?lNc-DLD(EM?~z) zNBcwl4D_FJ?g{JzNwZQUe~O+Fxq{1i{(wJabH~B|vki3MkL&(DXdiP@=%M|#t_D`; zia7x*&$9D@RgVMt!0Jy{5`ZUe)!Bnns0#b9$>XN+6!2PwOI$O+*?&d|BtJx0jrBTez<43#S0l=zNjqSi{*0Vams`j%+ zxHjEsEyfBoXpXUNEb0ZjNBc7HZT2HkqxnsTf6&LbUscR;cb{Ic^T#{~R`)+%YbE`E zqbfVX*2xt3+>a7CM-@E}td1TOxq@39a)dt<9v*@JHPXkzpP}VM?bOM84KZJDuXJFg zmlg!9ZlBx*tbWXC2&^6*Y=&#UP27O7CRMS<@;0}5Y&ZFnxFq!AzY0pCMeqxm_+l zgWS1Y{XVGL+m(DTD#tTSr94HaDNoTS%2V`GCQp%Eyz?H)Q^fJkbtvAs6~#NdQoM68 z#XGm5JVg&F-r1h=6jh*jXFJMM^n&sfalCUPiC7MtQcqsXmSk<=LJ}^>H}Q_81xdN=csWE>s^! z2`}1pnH_l4r3>2Q-Ef0OOuTfKR>F(!`l~eFcao{T^DV0H{D|s1r-X}dJAV}~`ap&k z^@|rdWS-rteNdX$yfKY1Up3#ZLPZJR&N@zx0v*Slbe!)Bbetum|GV^jyWK;*I8QvzwybXjA6%pylN%&xpFEA zdeg&V3Fs4+EA-RXq_gW3i?flgjnCVPz3$x{QFABULBwh5KNfM9*+Vzr{deEMG>kjt zvoY-bMl0dJTe=zi@$PaL?N?o%fQwELLLcnsgZ@=Z2LdaDXCH7+ zLxW(9b<%Jr>?YSn!?z8`I$`dS7u(|iTREgccfu7{K@WbglE$j{Z#mDA3Xu>PP1oXzJpA|fK_VhXz(+R zUHpL6#@X8FAJbIFT$Md4WcgR*6Yu-}vZTyA9BJW?IS7~rBZ*@f7#+l_iuR^Fl*z_mr4|08+ z2EVBOpj`f|=7n4*uCViqDyb7!(EOru-?tkTa{S<1`o7(|fboOR3m88*`WM9y{!aet zFzJJ33qc?JoA|3F;;*!Skv@3rZW#9S0SPY9CU)NU!#Sa}ZV3x%A0B#6$5OJ#+IV0; zY_XqeJ9pcl;(M?E5{yP zuj_r|)~;GY2e#|{&DXs@>O#{WpaR73nv{d*W-owTk}9?$f}ZY`lzJ<|4ueYAU7 zte>TNTCJtE*Y&eE+Rt?rdSaK-V{mPWAD^+Vp1rSzao-%B3xAxOzl8sj9RuO>iN|I* z&%F9%h51fsrG*?O%?VW^yxpDSk916HAC1Ax!@PeHI>j;{qw-mNtNR>2EapuOjziRk}# z=Y_BbN0$XwBkD94UE|1Wh+@%zjMC|l-aMA z(0=uVen-b>zw)R3s)x*e)k9{#dO`cur=Qrb*3$P3CO`2#LqVT|ujx6cPtQS9dJeXu z=b$e=2Q%n7c%7buHRyYW*h2W8;dh>|oauZuK*9Oy1)Z<1(fR5Tov(({`6`vpSC15& zuYBozwOGOV>UW;o<-Y4XMc?(w>CT5pcaEg*`kpAzo#oE$Mx;AmRiHbo-v?EDyOMk| zN_d7~sz;we_2^#|upa$K%ClX9>X;m*di4FN9{p3QM}LOun9Qa;+a0JL{V>Y2{hjKV zL{L5Yt5lEPj_R0j-SA^nkA5H3qv!h0%wIL!F`}7tPA(OD4_x2%^3TA14XV}kpwwrW z0{&{9Onv7>uZ$GwK8-JmdN&rtUp1ln&Lye7^FJM*;95JG`p)Ju{8de=@9Ys+6=$ky z@y9T)*wC|>uM%D~nRrnL;zh%L5ii=Bc+siEi?$8jz;YF9p z@S+*Si>mo{)rwZax3iAZQ-O|SLOM(X#(0k&Vp$ja{6^0e2c$kr>ovlD*yiufurFOJZY}lM;Pw*s{Wnk1=X7ra zyhnd+*BN&9(EB#hwXTsDY$dywrUUH9=C#qk>|k@)sRp99+OSz4G47nr4zPERPlW#! zE(z_%!M$|6G}hTn5#L?V{Ovs`e|tLRZ*NHX+uMz}1{~I!2f?=>%HLk3tl(5_D1ZBI z%HKYT>RQHXI)fi*`9g=gEx5FPs9RGkjdZvN+y4M9_4S}9ex^G zs!81-@P3_2?t+$@bEE;*(#!Wv@eJ*Ed_C}A)Jw$XJX+r$Tuo_bJ*bTi*p%+U8EMtuLCQ|L6wxu;&)J46JI;E{glO+;f5t{)=h{3%k@2L6}x&4T|ov;EN?*d-YAefBT{ST%Sv0lc5F`7&Vj zu5TIicWa{$-cMg^9`5;LmSLhaub5$igB|7Y3ch`@-a|E?MAZJv7Q9};W~d#l?nV0Gj0O^kcUwJB`-x?ACYicWj@JQ4*UHa4N5B_h;FUon<3M0Sh|EBoC!j7Bx6ZApmMOh!TCtmbV z&<7)OzvG+b`oPXgvcNN| z{6bNqxy4^b*n7_o?gIT~e4G#LL)w*EN%zbuRt7rG@aDc~pX)mm{r%FW!``#B81{LG z*m`&t1a0z#KNmWF#j~&emo@PD>sLGM^8p(>V7^_>8Q|F$+2%U1I@PoY&Ix&6yn$8w zdy8=G#C6Xwmgh!4jP=BJGwe;l;wmXusZ0=v*$Oms$850ju;(k%M|~qi|r=$*KY{c~vbAKF`k`igxo_ZkVt0xH`aU z@7`Cy>g$fOz^d8l0ARHwAsE*-pP+$zPW~YB8~eZAgK;~RnFQaeofl`M)Z}i!s>MYy z-%BU=0IOV`j=*Gzn+34CIB751d*uo}ai@X6x!kA5z-s?AQA>2%m%Z?(LyQUhKe0Ov zK38Zq1MM9X=3%~3pBn(HN4xWY)q?5eftAm~6~O94zhJnZ>p zX27?K>HV>;95?m>R()Ff0-qZP<6-N?cLOG6{Oy31r^`XK&&ynm{^e$FgZ(z6Ik0j# zGXmpY$~y>u{2SGW|K+-#h0l{bywRRndNJm!URSDLxsr8N*!$Hs+OPa&_Nye?ud300 z^?~-Q4YXgirv2(B?N_d}Us=+Ab&mF{eLt~Z9jE8u=zr-sc%Ghv6X-d3n4W|8={Y!p zo`du0Ip|N%!MH+r4*t&b)hhb_sxWltng!IIbt#VCQ$Za4uR6Csro11g1_2J{MC5kuQW{re^rDe=FZxwW@S<8Wyyzn0Mb&(}>X)j7Z)Y9nY`!iyhYvR! zHI;tvT!(ic={T1a=s256$JtCePC3$X+LMlxOgfGy={TvR<8&n*$BJ|u7t(Q_k&g3; zbe!3w<2d)|7%$E78|gTfREIa8bR4xls6tDLJ{VU1F0|Bj*ET_?=o5ViTIz&)cHpuc z4BKPxO5PHEK>EMzsU*Icahg2=&&T5BMI7jXJEd%-{tqvfz_Z4^z8T)5L+vNP?lVwm zRcFrR;`vp_MAQfiNNkJ#A-Vlv7hUiS&$S9)%3<7uyA!P?A8Zfbg8z||7Q*N2i)v%N zjV;j#^ZlK1^kse`Z|w`pTYE+(Z|w=nTiabGZ|$g`$Xjc-HwRkk>9RYqUsX0ahy7~P zR0m*N>K{j(wK^X=2>csQ6*ZWqHSxllnb)%c{--;lD`0J;&(g>L{Yj`D&O*oDdBUC_ zrvv_E*?dj#Dm5Q@p?$e)PxN=vbAjFc^(SyFu@2QRZthNR_;aw?3;1t)FaSOuHW9JU zCZ<-HuabHbPpRHSAF4O8hw4qtIV@r*R@;f#pV-x5@Qv$Dw4!Bo$ z6ZygJ!0Hjzo7h41Cc09+iH}ro;v?0YFji1+BEPh#HxWzqCQ=q3!ye^-%pbhpl(eX3 z((n3yU>#ta=-0?XYOh^vEq>z(`*JX7d;EVJAA5^F2Q;dJmwQ3q zG5S1xW+#m`d%-neH8ZLg>@@cVxb{XHJJ@?yox|ScF;xTiiROYb--^VVxBkVc!TmXZD`RNnCz%x1}?OCw`jB*zV*ko?g62&b93uqeO`Lp z8{^)}jD|nmwWRmms^_Jo{-FLZsz3NU z^YwXBe$l>^U$i3S>nn`>qMZwvudjqme$ihQk28tl2k%n+V5LHiA3P%yKUh>IevspF z`cwSiIEo)kl8GPuoqW5TJ{V7Y`=6{2-c2yWe*XULcW7R1$5q0a%75${>~HCZH&{x~ zrY_A(Vn3WRa0~Y8H6>DEFL(6DzFND;Q0&PSlLp~A6?93&SLWYNfo?T*Z6ECCy&l*@ z^P0Il744z7L(xC2cr@&4cdW6`ml)xOaktez1b-UcX#)S-*T{s=-xr9Q%R!6$Fkinq z?SNGm^D_G+9ISf$1+17`fzI=#tr^>3H~%SYzwTG zmUsrAOIeFr&o6HYJv3s!1F+ijQV&=S|Iip%J=qxztd2j616Ie^iCW?M-9_H)+@seq z?#)^&;M?g@Uhvr{au%@ql1O^-^6S9LX8u%Q;xK6_uzE502HLA15jyp>7RPbz=30G$ zRkZ11jB8r_Cj42wsuQp(a`g>-4yv*S?LK+pccflds+Fr`T^06z6-@ipU$kFUqWx+G z?N=Ii#D4WR?N_~NznV?^)q2{mPSSo=o%XBJv|nxiiT%o%zLPm#2;a%D?#$1@-ZJ0G zR3+UxPeylcDWf}&k8K(k>Rf*h`&<8i{2()v=i~7+X~2w9-%tC z%!}3_UUUobqFTg@ekEQsi+IsU;zc_v;6*DDFZzb+@CM!zwM&>6jUZlB&9|%eDo~&{)E_)V^#^Mzs6Y6F>JL^V9p?XQGakM={V=8{@`V*Ke&tP58kEvgKB+HwXT%tgH>w0hnAY_5(}N8RX`@RRErZm z!M*4C4!}G0UZ2zhs*yA_oH`6YDA}Kb7Qjx}ZfY&H|I@#+jbx84ZwOA?%Eun>(aokU zfSp)J-&X2>A+$K&c^ki8fcA1ZLO=b~R_L%-hH2nk*t}UyjBDC&A^Zsm{0IK8thE9@ z--o24^=&!q(-4{db!4Zy@TZ#l4X(=G!$Azjq{{1hYVhpz1^ zViRt-#9-Ww)62jf*Kj`k_qM7Ef6}`iL%Vy!vzTw|SWT>@)#=H=YUcO{!0NAQL(zZK zm9fxtGG2({1h+Z?V5-s433UMbT5<;!+|*lr%xfJs_4 zJ@6`VjRhyxwS>@5bxDUcnOYL~Yp!mDaf@#VfImli6v6-Z?a1};IcJ_d+OVEwDs3;?Kdr8pl_(as(^WGJNN5=xqGL%z@EOm3Vh3@d@@S%);^$o zGKVRj%rwd;)0*?cKiVWyALmL+D*kr`t&bD3zz2I&VuC%ii2;Y)u%Cb3o{e?*a@1Q3X>ZYX>y6)? z-xpDPdStF%lGG<#^EiB4Z@Uw}DXRpLGu$`tI(~P}F6n^>4rsjvzcqu&tHB#z8dMIp zv)3zJyQa1lt{u5(8Gf6S-p65Fi}U4R8yhTv|F?~6!sn1!5!)X9MAY&8ops`7Q2oIi z1@#Ai6tMo_1FAn5LG=fZQ~g0(1@#B}$l9wM>4| zcm?@ICs2OT=9FKws7!v*KP}EH;}4D>{1bGXqW=+n@V%E4&I#i#SAjm*{gyS(R6E8T z#D3n=~SVU-N@+C+6%0K29ZG!=C4~7?^z7G#yw4ym*cFb&Z97I%}EGVSU?-16FSOD=}_R zLl66(s`&A5m&oG0&XLwEDGZd%&YA5}U zuF>}lyXkv|Tl77{N&22)Hhs^KMBg)fqVE~j{KWSRQz?%A;%|(jKTL7-7BX@4A1IFA zhvMinD30Ed;^?C(j$XeI;^=?p`Dz*EZ=Xo{+vUzzHz|L6H05vaO!?bw>3r3U@=pIu z{&uxRpn z+ow|9@Oo4?T<+Yiejilr?MmJU<#>j2hL!N{{I|gxygS>D+ko?f>oXBklcuo+&spd2 z6xazTy=*6==zB7v|Wg2*h)M@*aKIb z6K)gFu*b6r-kp7RU4qYzZAFdC`PP1zZ(-y^UQGPeEaI;Unh*Ig@mD8_zmm&`JcRfw z&WF66@*y*SC6^DG`76$ctb`XmOT1_*@uJ-d$ctvl@SD=po`o`w=g?hj`JW z#EX7bz>DeHtDdNNym9aI?guIai)=u<4ZcuRnl=5kdC9)2UY7z zi9Wcs?>A_vwYnaFPH{KvCbZNyNBZNLSSe!|-l;vZj~|epaiuPfh4$h4ehKWlLFU#{ zpB~=TZ6v!(y=r&{ebIBkd+X{eOJJMp8sZuHxkhO`%aZ!~pgpddGy0!y<_>$*o}zev zZ@958#%sk*Gr(Kc7NO!-21@8u1%%>19m+D zR?*IHfR)!mN8Izp3la0xwx5V8tJ&lje0w;52YhZ>BnnvNl)R2PHfyezB8}_2OlVbQ z&#eMhtyA=1x1F7XYZtH9#I?_!iJDVQn~EB>^_qxy-m421!+*UgHQ-P1<n`Ed#J z-B(^4YiVfZW57!1$1`A6FUJM_YlKb4S?hGlCEPQ70m2i07 zL~vin+B;#6k(94KF{vgnIsCo?&hS?r1)=?Y(ga*mZ@$2>$(%LvRGzRx<{;?~@n(j3bcAul77V`~vvFDt0DVZeQXXXo$*LP-ziNLDw zi=x2f{?+%e|EW6(_Ju%u^#6XhKkOs(o+nH9&kxZD=EEOO0#^U*z77Ak<%<}cn$~r& z#vY`JINS{#EbzN)ou>(XaA$KP>`|v{tOr&lW5R*eumw7}XWXJG6FCX1X*hrj^;&qmrG!IxLKym=cG&}abX;q!u|Wr> zVBBFwY4GR!z!va-W8w|?+%3Wf?ai)M{RfK(Z%~D{}VrgCY^La)F+Pi(biM8>o@~Taux|ZLT zh`N?dsjg)pk8HLs!n;;VhW+2m%9F->esBK z{-8R)s0u43`9;<7gDR|)#1E?VK^0a?^uZ9TF*sBCxz^dIx>7@<_p**Sf2O}Vj%Pt? z^K+I`AL|s6>tpa-Q43?P{Rcc#7DsKvbEn?=AUxN?JeDO(_jx$&Af8{7OMHNRA=3}f zyCL_zpry8Y_W|vBDe36n==?p{m1<1G^YOOUI*hw!|3~<<{p={56UN;u0e`gmM5Db* z-F=v^dR-}BSB1S_-KKcwa}@7fo#LIpQoOT1#XGm8c;{{u@0>&N&c+n)>`w8{TPWUn z7sWd_|A~0#RLZlh8T>rkF;FUqq$pYm*%r###L6hfZu z-+8`jNcEj7$<%kgKykP^RNwhM)puS=^_?B5zVmdd@9eCgzVjKX@BC6hedk|wZZBvZ zUam*a^(MFuFV~y!p>zAMs>55*e8}qeLDk-_qE^D{tbj1`vPsl=!Pp z#9v({{;KFb!C##s{;EXi|IA-~BK~TZ41bkF{FM@3v<>m1H;EVRSwLRYLxvZvPP}Mu z;zipNFKSJ^=w0GPyAv>5mRfUf_ zE>(qtIxba(gF4<>g#*VstK(8tm?+7Itd2`nVWp%FuR1POg_V_pydUbgR25e0xKtGm zzba3WIxba(r#dcGg@ZaSRfU5(E>(rYpOy!bbsTkEs_K8Fj!RYH@H2U9)%lQB7%It! z%z3sQ6y(|7OL?{{D#){)M|rl@^-@*;mtR#c^#tYVT}1U#gQ#9=9jcca{Qp_K)Vfp` zU2V!c#- zs+T(H;abG(oS}NDxs<0j|5Y%4cWwIkAO>d@)l0P~C-MWwFBbWJQ+4O3sCH5f4TJw+ zz0|o>FSS3_OEsi=sV>{?5PuZmd>L5D)m`eow+i~}+-LxMz>Y*<)%8DEFIBFd*Almu zm?PKoI^Ml(D`{;6=xHI&tA|WIuWqHs;65d&Uh0eY)qpwI^ZJwPrTRCqgU@nx;;K=d zxDPUQ;#wE5PTaZ74j6Y|qj1E;b+W2}*tb{J;;<*o&mD?(^IC3*iTkhDAKdsG>ks}3 zIu7g3e{z0Nb^M@eM^qB;tX@|ttd!`3g}q;`rFy9isa|STs+Sr}^-?vdUg`|0m)e)= zrOu&xsheoOIz{zTjj3L$F4aqo`H$2~m3s~*QQdGOdJcZ1=io-OIyf`5q37VOb_;P% zaHTj+Yk#9u>Adl)o`b)$UTRPe13bIiQN2_?Uu9FCUOrz1()p?vov$uXJ^EgBzAB^O zeDx>SOI=9k_Q7;+uT1B5S30*x(z(4N)k}>V+!ANho^)<6OXv2%3eN3+a=q05`upI& zRWG#%@eHxVGu$VhA%b{@IN}+~63ZN)U&+vtKhW~oKRBPg|Qi#9GCH^Xy_^ZXl zU(F}}>KyS`4~V}?CjRPwQ@vCZ;zc8g7cEA-Xg<|TeMG$I4&p_-D&R%`H`Po1llgYm zan$uvRVOlay;Kzr33n%2OJ`Ku!?zAdwi12N+$9+~enYk{LH^7;o5Ibc`{;TZBhTRw z%eu(*w9#_~##&mh5%N#A`MWdhOV^6Sw+(JDVc&oA6n#$jHb6e5ukAX+&K`Q-M)JWm z@`9~o_tJEL{n)%V`j;JS4m;K01URT+vp!RB)!>r5fK|?s2I&9teN*Jm?00-U z?zyO!74l3zTHhabX=gq7Ij+<<*jbLB(C6hnV{qdg-TK4Uvw90ms<*xithCLYU|U}_ zMgP$a>|xI>B6642o?R68ak=LNAN&`cg#VS6O@cokyBh$vP~&Qtuig(^{O)S&Ya_>6 zph+#{t<})j46N=Qj>NT<-j~BYU+#~=SoaM@t;6LVeBj%s1{2`(kln6{(wdokel_Me z>)C18riLTzq(0Sq^~AfROH?}APozYk|Bp8ZV22#+fHk(My$8mv)bR}bDN@u1{+IL3 zg8w(O{m~xSB^dMl{xAYqb$T-aSecnG16J?)mO+2FHu@Hl|N2_#L zIlO{zUu#{2&($lOL!Yjrw7>~ev=I4z&y7C;OqyId0IdA)n!(=YsfTMrf{kHsb=w83 zZXCXeaSypRg>7GVEBsHu&IZ9=f8HLxRnlpIxw|Z_mn31nG|35b4Brt1+q!(MmQo-4js|#N zuGV}7+UMAb{K-c(7UEiW=dxI1%Z@k0xFff%fIoBI7Q&G&FXd)b)Yn6Fc* zUclQ8oC~mWtCxlLhTY@Q|8Bo@*!9m10#?(9`eEFn*R$YHqnq8~ ze{<)L@OkK^P_)l{B=SGIZe0zmo)&WgR-R?&1FIef@`2T-#G;nc|N7AYSKRadOp!Oc zs$LD?knD6Fz8QT@hR;zg64A$V)@#gh*b8HDcOUBS117VzwgD@r1vOxQGuA@?a~Yy8 zZKL5Efz^=>;xFx_xpNu=+8l zA^JZ$*bG>Go45h@{F%IJtWoWO}_BwLdUQ0zy6ms@cHXkJNzC4 zHg>>#ozEFyKR@2)Imc+N;B))wN@$Htxx2KctyjOwl93-PV|7mevnN)}O->N@Y zyV(q^tBwitur}2BMO8b2l04h$b)~|J;|Jx|)$iP|P-|hZ|$!-w?C$HyD^>HkJ7ol2A$h?(7Amc zo!dvyx&0%Z+db*rK9J7s`E+hSPv`a~3eN3k=-l2x!MR=iKB(H;mAnrs;Tg2Y37(-R z@eH9dJVQG144a8(Fe08|9Ptb*h-Zi-o}m@-44sK*s7XA-0^%7?5zpX3Ji{vD8O9LL zFqe3SyTmgrBc7oe@eJi2{m=ZBJ@Hpxh`;)q_^T?!UzMCK_^Z9dUyUdJO4CH}S9OWM z>Ph@nHR7)>6Mxl$_^Tk|uXYfBwTbwv?ZjVY%kWp7h`%~5!(Y82{z?fi`r$_y-gmAL zFREKWUi2RsUUVYyqBDpWZAiRmRpLcQ5-)n3c+qbPcu{@gMZanZUQ|nl7hOcWsG4tA z?N>_pcGhw3D$sETl8$p(fsV78bezqk)Hj{A7kN@~AyD#=>1pB58(Vq|U(IGo(a)xp)2 zFD7btCg*Jhzxr{GsA(APpo#wak9A?c7%FN(CJs!)xKlnG!`^SS68^iTo55%AE_cy> z)#WL8yenG9&=ZkpeH_Vm z#JH}8(eNj`zfrt&|1tWh@Yz0k0@|Hs&%}HOnT7$Y)YQ@7NFBTQ0jrI(wb4JOsgAjH z|Md-L;+~~i>SOL*IyQivUf~IRYxnsSeD*FTIMqITzGIH{sy6^nUUA(aV6t$js9kvJ zu+W17y-K5ho=z3mGsi_?tv0vH#JEj6HiZ3Z{zmv;wPQ>8{PkrH+KV0fh`DF|Wq`GG zx!*Nlbu~f*zq_-Kz0lvW`yybqJM<~;*<0HWW9bBj!JZn`AHKC2VT-w!+-Q|3Vcscz zBIY<_Y#8j0YlT)d%Ck0j;D7SN?4)bA?HBcATTxxw{#n(4|CcZAG437D&G2W{n(|mn zA%ph9=gu19+lDL?SIqZ)<^o{#^_wmDWZfMjfYrC%_kdM;`DeJcN3E_HtJl!C7_0u< z(!gPE`xN-LazF%pp7JsrefD`}0H697OM@qGzI6jIY0zHO0xQVNVfh_) z;u=3-WttX)ac3PX1KViYeE2^puqyni7Jm%wTSL!cz9HwY0jmRjLxELu`$S;1B*Oyz zPb_I=A^lJ9ACJU6`}XUAvAok>X4>loOrZS2s$AALXh<=F#Z6?Rnz<6bZt3xCX)UV;B{W9P!>gqz0rzi+Qw5A!wF ztApR2mf0&{Wi+HL_VeCz0)UmPYcQ@YUsnV7oW6A}#(K4U59}UGC&IU=!9C$~Zr5%} z66Ur(LN9h0vj=lOA1-3qUKX=}cJoqaFR*G5A$00iheVxO-H^suW8=OK#JKh$d*RQM z-X`#WSi3a%92q?w?cb)(!+eAOo(Qa5LmR|N{%mJOiwzZ_LEC%?FBaV~&{I z!dS!ezr!AQTRgLl)>#do_1*;ot2Fae;NyAhJM0H_mjRR1oCUxtVqZSmAM0nJ|BQ1_ zV5cU{0#>EYh~IJ*&mX|bAa@)v$!MShe_Z$PLHn4KLT5jAHw;(}NN@pGJMa4etJ1n9 zfX~o#I+hZiV{ODYR2}c?W30Ox4PmG0X2Z8ZS55<~K6g)`kNwGf%yBV&&;P>pFfh5+ zWe>1=G`k_}p%u#qJ8xYvs`g1xZGCSc-i&d=vHRlNEkPg`Ee|D9a951!Rdc(!?pXlBM6yyT2UqJNn)>0QOB2 zBmCB)lk}j`cRm$>c3UkG4{k;{Cuo<#@48a&#`rDkTLi+NDR+usU*$ZI<@&cn`;E5U zfR(!bpz1%Sr2e3KU8%5AvaSkyzp6z06~_;@rTxm6@-xWA4|0A6jvu^8`xVCz7RG+{ zC+mal3#bp)Bz-Wh5cI*{dA=G!=c~ao=PO@2U%jOB)peQk)o?mr9WLPc%9qYpixr%& ze$~1C6rI~$>D)e4!MXhmo!jTqx&0xX+YiyXeLJ1opZ>(T-H6WZR~4Mw)$fC3T6aNzoPDI@=#!2UN;-}O={Pe<$9YaV z&Pmd7&XJBYjdYy1q~lB@9mkP$oUx?isP#eBx>BMKHo86pT55yn>fqj+&TM6-x{HR! z*W6@q?*|_o2M2iL?}i7YKIRY3#7p)eYoQsfc)H0-YCjpj)LOC^?(_xM-S=}Wcs4yv zp{q7B7cr7eeg6h$IP_tTjdY*zMMrUMy~L}q=h=&xyB3)%FmCFGSMX={!a?x=P!}!u zlkF6NcDI|+nD0H)9AI^Q?+#$)yYDQp+N9-x{;uAR&~)B8AH+SUd>MeTnn!rTp7X9g z{G2_g0_K=rU+9UCn%jY&+2ra8yOxU%@ab-&2`**f057z6{n!Kj+pQc8d)Syy;8ps( zuZnT+7<B;7!00v*w_@zF=p2{ z*ysEMZKd_|!db+Ko!R(Zw3}W;{}Y!U!|uM*18eMi^$oykluJIaN`2=BOwI(Afj{B7 zv1q^i?I5u73b+g1d2(aHy$6>+4BgpjnH~DCSe?7etv6f7Gy@#D0F%fpKiHO_X`VUeO|z;ye4aRO3b1m%77Bc7?zjm1S(GaPVV4`oHnkv5?ll?YNn^r*5D==00<41K38vPvG00F{k0P!&H$Iz{oZq zbF`k*0Nn2=jl;lX`HNU!Wny>5PHE%E{>v?pf7#1jZ^`Vakan1(aS@@b-a4TVOgc5u2FD)ewGi#@*ZSkyjP@d)cUF!D z@XvTC;w!5@SqOjnu6YOl*Bo5|pWjZiz#6M`TIlR@^>IoVR>HGyoWUA_)wm77YS^<9 zxM!Ni7L3(DJO%dNlj526(nsW2h_D|7tO{C(H?LkQuqx>j3ao}xKB!GItbtX?1MyqF zl9CFnqCK0y|M|Nv!RI=*V(;>>_QQPt1pew2@mJmo_^U|bubvQp^*8CxNu)b#|03PF zAH_SL`-ynxUllhooZ=>w#5;edxQVlc95)f*y9XNm;%KipX%7i&vkt#O_f{3L4nMA{ zW-0Z#s3X3)s@S*|epBzR*ukz?CLe2FF3)x)%GWnmCSRXip6wo#uTL(|c4wJ9+j9B( z^oD8S_xNLINzAvf>%?(==h=_M87a5JKfu$kUsdR*v3+{M)*SmB`_iM2*RZ$mtn3K8 zY^KOV{wPZ1Gmk2I9{bhtgW}sH+e40czD#|11p5`&i5pt39I%?a*AQ6!&hHskP@LBb ziu02Dp241U93P7F%Ah!}>lEizgLIt2_?|(%u2egUl66(s`;`&xS91A9tI&QmPG-L< zXns*8bpZ;xU;SJ0gE2DkgZvy+5D<0^Q2@@~_uNxpKR4-v=it*B_IUPvq;q>2I=7Fab9=ag zbNe1Tw{u-fxpTYveNeTxD|sK3;~AzB&v2S}hEK#Zyp-V?Jc(zhLp;Ml;u(4p&rpYW zhE~KgxDwB>ig<>0#4|i3o}mNr42Hxr*b~q2mUxE0h-XM7o*|ZahDhQWw#o2UQN&;E zCH`tF@mD#-U%ey#suA&5bBVtyN&J;N@mC{>zp6+4)m!4Po)LfLP5hM&@mEuczq&#E z)i@dc%AfcvR~i1Q3-MPqAsuHo z={OBY$LU8pPB7^>PNd^Fl8!T(betiieD@!0L8#Y4pFdS>y-4 z_SzfwOur&D9fvSe;Naac2fk^xy#Sx*n4d+T+{+>k_r`S7WXb=DtI~kU6`cdXDzuv5 z@HMk^(SHfW|GLM-0IRN3Fw2z-?&pAoTyNEAlGuy4?tCY?IDFjJxpq9{96wb1keTyNUmo z<@$erTf^MZo_KaH=4+xE3an;!cLql~?D8UDbwgjogZB$9VJ_X%pw?vEGiHtsc(bc1 zwPB})--T}>9!KHxkd24XXU>#7%vWPgZE$pRToQnZ#nm0a%C%V?*hAhINB>FUUrMx!Q($LDsfYsalXTYjnjtlzN z2%8M7PN!VLJtLcln6FsRAdG7}${xP8+#~j!=S}J*N|-0LcfuUQ>3g$-NkXeidS3zW zh8G_N0jr!Op;KEXig@05-Lk+xXGAk#eyiUK_~R5+3~TAl`pxipZYc+}7q{+>`PNK# z23AD|8bcqv*Qqu3^QT8sfK{J_G+evKROD>;J$x2pt+o>}WwEQn;MMg2#XG;2iFfWq@y_Qc-uZ=0yz^f_5$}AT;++R5h<9#DdA8I3fIQpP zDbMyJ%Co(W@@$W#Jlpjt&-SfC&a)joX*!;Lefyh1OHGaGgEQ6B2N~F}cI>^0-|uMu zR@l$uJRacp{=A)5lC-By4iRS|9jfo_CR5+}9o2XKPW7Ez%hY#nLG_*EsJ?S@A=Gyc zS>OY#5)8p3(xqGdRTOno1RaV^f5gKccE z1pePPt_hz*V$;zc{Y2yqSg98PtQxm>09MOFrUI+&Zm)rrqlbtqpEYM7?l~q#17ihe z8oL)#6hE@JZNL5%$?NOW}WurFG%Y=NTDj@Aggnj@0W)^`B9)t_pjkp2X z*{|Ny??|p5{c5U5Z}}Vdt3NrvC_e`aT5qCJA=I1ro#(6ndOn$7b#7Pky{O!|eJGvV zYtp%0$@iijKXGm^==Y-P_d(U(uH=1C3D1yAJi~C}8Iomqh7H6s>?fWfjd+H3#52?- zo?!>^3?-?qWyzK9I6u4~o*{;KhJM5|M-$FSBSrQ zPyCe)@mDFtUwx3_uLcu;^;w3$Do^~C5?(Zec+qaeixw{+FB&Yvi@Fmp`gQgH%!@W9 zUUU@kq63H*U7&y$9ZkIG5#mL?WO&hC#EYu=cGWLZ3E$2-&UpnoPB!T{*$Q-=K+BMKUO0IwMtUwh@Ldi~XMVRBQ>i_ocmwdsr-S52rubOKOZM@- z{a`OUtZOB;yMO!w`?LK=^zkw?#(S&N+Wtl*AD!U*KQIQ`ET3DQ<@~^Y+6x{2zld#h&wJ`AziMR;~4EE-NAOMaLM4ywm6JCE)k?rq(m8tNArs!oK-x7yN%v#1Z}+zNm>c)-YY@ z?4~{S@Vi^%d=XgPd-(}i_1HQcSbhI77g(j}-^W;cf)`<|>>;9t=E|6!@NJBPIet5K z8=B!aGV`ko@L6Of;(5bPi(H^4CZcws{@GCA*7&(6u3fj?ANI@>hWKsTt`xb=AGco* zf4-!b1tx9QM8p5ir~9MbW9@Lv_y33Y!H@Jl$htGX4{jpeS?+yM?mJ|TcP{96$OVme zR`MNkFnx#IM&>(Yd-@K!0)2;UN8cgK#XBqc4*6H*zZyY#whJTw)fol(uZB?mE6%eW zp&-w;lKfYJRNvWCroQu^P#)m^IbFV$Tt6K9P5eCezw`1Yeja!H)2ol zpoR1tjQa2qdtjpj!Pu+oWbTChGDDn&7H#Z|J-J6zha~Af(eu2aTivBNk*zISgR|OG z#SA)E*>2HjulCj-*LntsIPp)p^{~(1eB2x3-pY)|^QE^|b?oQs9;CwOjk_nJ-QUjx z^OcLoDMxYie^VU2EydBhQXKt7ildi{$9YF_^t&k@XBWleJfL`-9E!(zLGd_WC>}?b z;&EIE=SYgj*&q`~FBgx~nBwT?Qyl$<4i;Eft@AXYrS5NTgmsl!V?EYY`53CBy+C}+ z7dI^m|CiyPj=`=~Pvk==^<^~vzgyRhz`9ClxdLm$^~^EY;dX&oT86pZU)l!kSsHK+yFPekGk_}nkT2ko}k#P3MGu2ee#$9c)E zt3P4CilzPPKK+g&Xupc1{YsbitLn60dDDLNh4!l~+OM*HV!!&g>JLt&`h%;f{@{)R z)*oE*8|x4LY3Hkfg^*uV?tE3y{Gz|=++LaT6#WVDgOwGW+Y1^$sD2+*?d?k52jzH% z@5D1W6VFgwV;;^AXJvSXe~4!YA)aA8@eKCFGk6ov;72?|B=HP?5zk;qJcBjy3>%4O z@Fbq0E%6M`iD$@{;Tif7&#;7eh7U6QRS@x4VZ>iq5q~v=_$yQ5uRaog^@;eab;Ms4 z2@?F(4&txEh`%aN{8cjXSG9@1T1os>9Pw9~#9w_^z+b(V;jfw#f2D*MwF};fb7>E% zYniT~t|jxLK?USRClvxOI)>_6_M*C$uVm_4=22ZsHQ%nJ^$5Qy#Lzl-i&egJ=cW&?9>$ae=b@N{xmi`fcCjVQZe7%H8i0QCVWc* zR)N#+11rC|&gk!VeGK;bxjJWX&&-M3oYDZYIsEY|33=wZ5XLOS`Xq7u>VXfHxRxu2X5? zP;F*1d~?{g6+UO!griT#(2JO3ltpRiFOHvt=5j7_Ik3u2Dh>NmH=$GK*ZPM0glUMF zyCm%xjQjepGO(XNo(KO^9#w%qsSl2#eNoC8U{$5YdtjC85(}(a1!Mv%ixWN3KhJkS z3kk!$KB>6p=nlg%R*@A8U?1OZ3g7bjSGJL^9b4WoL9$!<*aIJnX(FEYP#t|>av@aI z#BBU}0op6&^ux8E+D?FdWtfOfFmF~9<68Dx2!9R+{saG4)>;9d|A{uo|NX;9p|i&s z^~djS%(cqk{k(TtVUN0J6A!G;y+{RCgKg{Lp6UD2FxKc2PhjWhg~GSFUSiK_K40jG z8#nI697kq~{LdSkh}^t)j3$7uyA%BcST)(4jBD#zUW8rJOmK+{M+5?^^~1B_Ppdn9 z;Qz)o`SAH^|1h*)-WZAbDmk|+(Vh9+UQpe6Go9O4(Yaktcdkn3c0W3|N71>Rb?1*V z=k^OSy7NI9-TA-rz39=O_+Ip%U-Z3bVdN<)XrAq1l&7e60rM1D$mA*FJlkVr@)U8N zZ6$e%*H{J=fbFu!}XobW$NR|)pxEZQ{Vaf!w5Y48oZeRebCH&8O{ms z`j#=5o>^{f^erS?Uuz!r!;-TN6Q%aO!$b|u@eZ%BuWFiH#GYKY!a4NsK1vJvOJxf) z*q6tjz<%E1$^mFML3hnyM|tX@|E6GL*xTK9VV}=Fd=ujya%~E`Q{AobKSifK{8{Ik zhxY6q8kq0Z#m9h^|1p1HH6<+ySlth-1FRDL8sXa7#n$4U$M=cvUNp=1!ng-NinCC< z^LzN&;@DgCNz$l_Ild*GJ^1M}U^RciHQ?hF)eH6+caiV?UK>#t`@pJmz{+!~2JREr z)e$}z&pHDC*K`>Rf9f66!+9ojsK^^o*nB(J4gZ;XUi>}7Y?*pq{5`{WsvG{R`1Y&C z?qOYRS`>zLW$k$w>uN=w9oAK&*X^;cE)9*r|E0~xuK2%rdQF7wbkrFC$2;z&@&7&R zQZh;U&3e5MzdP>^B47Q07e%pto?d+q`%~RXu&)N%r%LxJdQarNKQ-?;)>Vm6eT+N& z;UxI;Y4>gTzbjwl=dWp92kR;)P5h43>q>>RlJ8^+d%sGS*{`e%xL+-%{c66O6#i{?^((U%3xFRJ9+UeNra>i0p_ z-mWBmurPRrU!@NkD$ob{`*tPzppSy@+fT{x3>RehtJTC`y(j+aG4WTE74TQ@h`(Ay z{FN2)SKEodno9gtcmesV7Q|oa5q}k+fWJB{B5e7kDDQo^^hj+0RcI?g*89p?<`IBQ79i69;4FzGmJNyoWJI?im; zaT=43V@o>DDbjIvla7-jqvKqb(Q(xJplV$y(FdavOF>H==X461PMI!mnyBugp^;m2 z0(6S+hBNR^U1aR_eNvyaha!jVsZpz-j||w_$x`a$-=PWguNQF*5B+Un+qIi$1>!?PrbuMt`HWOJIL_QV#FGqncY{+!XuO@W;JfN$8t1-$lS@ zKaU=0U!U!S`7U){1*{^Q_JgML&x^UHlAn8)egjq?*J(l1`7m@0?itjr1m?bOUv=1b z7F>mI=SC#KXP5AU=wmxA2Xkz=tUCCI8(a4R6VnY_fz_Sb#;`p!g-$(ZwJxq*SaJif zn)CWN#x>qz4BPd5F#NyjY6gD}T)Kny2~V?uRh=aju$D9?Tm@F%l{BCaW?b|{|8FS^ zftA*#Y~1tiR1r&9B5M=I?V8#TzFk~pgSl_HYzaQ(Ron#3(LZq$?D1Ec0+XE6Cg4&= z^a?|Jsk#f$|8UB3*iBl99G-f$+hg3+^I`C3QJy~5l2OPW_*}ZIGuk)T9gFz}H1r2n z6~1-?mo>la6kzq{Q4X-G_wWO*%`+T;dzRe)17oefTLCzO# z3(}o4NOx{Xx-*}zLS)WYw`6qZf_~T6j=t+VMBnupS5LtI#eBpy*elJ0@PG89@A|&z zi2TXs6z?2G@y=uEyT0w3q9&&07m@$A9>qI%&pV2Bb@fzlthcum?=1IS-#z-SuSuQN z_>H`z@B02L`D9xBL_V2jlxLgs$#9-+CHZ6uyN*dYs_(pu>X;-`edjAw$0VzObxZX=wjedl*n-}z_im}LEBfc^Y(ziasR<7$Kk_Vcrky;?};2gmM<%q4qw=u@oK!P=t6 zrD0%Lg4Abfl*rLxGr|^overhcM5#~f_=zc!J#}mt?2c=jK~r${tPMRPCqE4B;rm4% z^8dr$SBFK_b#H@UfFfZ43SuigJtqe#K@=1_u*F8jZb3moLPYx z6csx_{nlKb+3eqZGdMi@@V>wA^S^V=H8AJwy;q!j-RoWyrU%vefd#V1_g~92^KZ^v zhvG%ViaN+w#P;5S?wQu=hdzJMY&d$}FW<{JS9MIPqdHDxv!-aRw6xZtwYs0V0sXDn zdt>xJU+mh3e(RxWnU?7i_XX(Q-q?&rYvs3nI9jWb7nY;-nNV;BUE7)tL~GKpQ%AH` zgEpQ;pJyIQM&B=ey&GM}?sZ3NmEblN{jN#dbLf6bbSQNH#$gZ8{a<++fj*D)ibl_? zN#Dfp=(lgdbk%VEb_&x~(?q|$BzhuRD^2v|WjrN>H&)C_uO!wX`VkKHDGA078&%G1X(Y5#0 zd+2X{OWvbvKg&?GR@yB$qTk)=Py=1pnKm7*N!aZA=ziJ`JcK?!P*OGr;qSTn8C5hn zSO2!Z`ZwlHua;CWzxucHc2g{G$L9~?dAqv#gGaIX zgN_xPKUmScJxYW5gMZ%#fBJS!-Urp;47Ki5Ojk`E&hR_^gPQ27*<(0EMRnEG^$+4W z!*>j4_*)VeIaM8OJ#6`DO5EmVa;iA46E_w&UMJN3sTr^J& zE}DzsqJQ!BpXW*wydAIO9MhnVQ$4nv8K)p5MAI*tgdw0a!wifTHY z`_DnO)IzONRMWBZ)j{vno{#)@D*m=E{aY?&y@wwzG$IwB&pxP)zHjbfh^{;CibLazx%?= z3SCQPMWg$VsKG<`Q>Rxh`h3EOr>HjCr+Xt*OMMZVht|qwNexHE{rosKAAR2~a1mOo z19v{4|G9rs6#6Ymzs=}6Ja;g(>>z`=ui+=Zz-xhQ~&RZ>ZDgJ*mw?pWjO*W50pN}40 zR%hQ4oPgF!cychRrAF)uLu+;UX*IMy$t!CK761Q(ub>O?1uF_pU3*0+hG09 zNox9?PhYM1_o6+D zeM!_=e9Si*`QF~c4k2tj zCAAb?XGcV$v-G_0T!g)!i2sH@f8toy4}RoISzo#LmZ`|ke`~Y`{cdmn@92IGza4@6 z`MIUF(EY4`mxeySR=O8GZ*Rx7Xsr$(9)i}YjaN8YtN7{F(f7CU4aAByiL;%8{--`` zf_}@Ztqr<9RyQBro9ma;=$@xmJ%zs0KK&b7pC*mUbj9nhI)c_@-omokg%>kz(7J`q zs)_0m#Rg^iptWk& zaw%FX54}{hRz*i`(Dz@w=cBdib|Mb_&yY?8`mMaU?&!K^Un6vHBlSzs^#k9}=sPd& zTcPJ|JEA+fHX@4AS~YUIht{XMxCgo>FFB&`53zAU*K@S59Z>9P^Xa%#lFP>y%an z)d!cKJ&4w7%BV+Zty+)oht_Iv&M@@1m!F?QzqQ+99Qv)-XCu(Hi7|ujZM$uAbkE|< zCTOiP-8!M?{fgv`x<5IV~DMDvp~IrioK|^+z$P&_L@cL zeopylqc!FD zzRj3kUuFgM`h3*jSCy&PhvQd;7=CpM)9b_Wt0+vbucEl4epB z`eAh(AFPhk6szNm#p*a!n6f%fSFDb+9joJ<#_Blju{w?;R>x_grjGNsKKS!oX;L3- z^rQ}|rM8`ygX&*%%zxPb{4ZKsRSwPIDX!h@=OO$dATd8f@wv{u1-lg2d-w_H+A623 zMDe-nSyHOFwyY`Lt++mzJ_^0#537}ct|y!D3B`BX)o+F{!-T{H^m+YN!RY(nt(Ktc z%i#?XR?yVP75#3Y)mn5vbT<=J-weK$hVJ>Bg&+ESsm)OIyhgSOXsvQQ2BTVP&WJDv z#eKGnuZF&V->Vj?mn~g63H{G%KE~+Tzd2f?Yp;YnbZl)v)C{FNo!+w z@oM^=jb4=XJ7327oz?MVR$~3m>#=@kO?WcC7*B?(AWtS#1D?zRHT}-xv3_TqCvzO@ zcgA@#@oIFo11qSreNv6iwmN-=QySCzIlb$my1)hNvU=icA%p4&+lS9Y*EaqJsHWgcRYCQLg*|7X z&pUrAn}6+v)%S-F{fuIw-}^Gn{35H_D2C=|6r$KSX5=Dt&udONqMFN^b5iuY1v*x! z<|UZ(1g+KS=6WbrCUskY)~Z>}Nc6WY3O=IWYFsZG{ni!JE$EuLF$CS)rsE!Ht#)2= zLwSPXs99)zcD~+>u1$uN%^F_T+Yzl5KWYnFt0_Gq(D$F@#iHwDOsfNm{muUFi+(r2 zbSt`_;_jAcO~#uXM)&Nybu{{X*z_srd5hG{4X-G_U4r$|`(l0c>##ohbyy$0aqY4` zdN-_({vg&zKNIVtKaBO!yJLOy1jcXo$NK0Cus-_FSReg#Y(7p!=Y}U%kk4=g<1;kD z_zXE1pP?7VXZV5f8H_Mo^c==#7>e;3c4B;n>lmNmCB|pChT)>c7%rNP;i6qJK7)=` z8J}S!#%IV?gNyFN_zd?jK0`>vTx5gYR?w)Hdc%GovcVzZ`^W|@mp?;ia_mkobXM)} zzD8&GOj1o`Ux)73OX)ZU2h z?W^8Rv{tmx=#awCL@zGuy*15VhStaPkP*7>G`$G@ZRGMQ=x^T^M547~_!;PTc@DgUdAa;_@VU)BE&fAyw<{;DtLud4qce}%`v zd*2O_4OV6x^u*%eF%9Bi`~OfJtjzo>?KkqP)fLRIvNXuAzE&{5`crxPY%Fhg#q##~ zYV!80e<*M7p(bx1Tfw}2vIcqk-}k|vzWtfh73Dk+{NAJYk;2d)CY zSL*adar_F`7oCI6iNoTbv1gwtZiPdq!usY5Ktd4V0O&#ZNeembG(xg6U<+*Un&u?pKwcXVg)lwz% z$Dms3&H*n_FX3{Z4=6tF-_sq{Qfr!g->LXNuFvc2Qe5BvktJ4KKiZQjQC$1B+={-# z8<30Q^`O&r&^zq+r72Ry_s7pFo3(nqOINYWW32AH4XZo%!|KkXu)4Dh zt2-~p>dw`$x^od$ch17<&U#qgc^FoA7GQPf$ynX_F;;h;h}E4n;WM1W`kfnM{mwQO z?02sEU(oOT0qb{m!up+quzu&JSif@*tl#;+t&jc;rn9YW{%f7>D;3n)&cbxIL)GYP zC#uoe=Bt_SoP*7GHo@jQCt>rQXIF5(bAL7So!?^fo&B--&PLdL=T+Ez=PzpJI|pO) zodYX4-}!)=`OZVJ`Od#HH+;Bx9P)?b7L@f8?%B}|`PI-&L*$1ie)@{83tc{;?@Z-c zAq>-ZPB(P@f&Us|st3Ju5uQnTm1&j^GIT`W5AE)Zu00xFMSec6PzU{=TW`Cgdw99^ z6uST0;Q{D=YHh8H-UmG=HAL@&<{{>&KG=IzF2a+y4b?^dKVsut^gbA56Ndh_bH7(* zzg0aF{nlr3GP>?shs6NP_B13Cc^6ns7tG$m-pufE}!4~~b@uRYyuOnnxuVU1*GOkqCo`vY1=WGc> zvA*M%H1v!$suZE?*5VLKu~yb$6VO`qcwB@&UmtP|eZTSk>*#u_OPSUy?`qks_QPvl zqP3bnuQ$5?BVIb_exCLyn-MVL_Ez+~+1r<)wHmdd8(OQ`bP!sr$92D_L!@IKedH19dsx{Q9T2@oo^C1bX z)!P|mGY!|btAf67@Wc>ZKkZkh$+@%FN%XtZzgVH`!luvjx`#eL?O!%0 z-O~RcTC1?6`Dm@qB&(gd}C%V3JqZ+!mH6vc2 z>xZwOq3@jOTn{~CiK{2Ne%kLLIzPiVT%;9y)Tv54bp1r!9DTn=A2GT~>s&{}nC#h|rf zOx@7m?nvBef%mqm5T8hq9)Aqa3 zxw^OZHab_Yk9J4r%ItD~w9ZqXmT^AyFAYQcGW`8~blq~P8119a>_+HZd9|`Y=jy9b zJ9HkF=gddfVnb6}arVA6E}OM_pz8wkd4@$_^!+n}iRgN8x-Rnbw(%{|?@BWlp!@l; z^$R*zeRWo#d)7HkqjMF~yUdRMo~xg`f$R0DJ6HcHfAzS6{_30t{wnrg_E%yo4#xg3 zjDv+(9IX8>$HD(pe)a5M$gfO(BflDu49Le#|q8ms2?5 z+vn}%Cc)6 z*4<%>*9*sDPZPn>FXsfQFXBW)mei2gck>oI9DOB?sk4q~7%C$U<~$-Nc;}HGsRiU0 zoduNV?d@dseP7AMx7nocr6tlOMr(+Loli)!KHn0b(km7ZpFL32XO))Cg-*@v`&y+t zSlBr8_`Gp~gv6FYp0<`ak{BTQ9JNW@M%#@@9jQa+3|~W38A?)~aTIk%*NN(zc8_Ws zVMxX1cvB|Mt*Jb#BI#5sEwV-L#)M&Gf#ji~yM$-8Ulg9`Zd3Aoy8XTG)gAkeUB-J7 zwNDUQD@Z6l;3hubVVlG@TwBsOVFeNUxgB|BU@?(6WijRDzl4&Vjiz4pvY~6N@uPHY z6R1+JU~1-gF_Br|M(PGmCT=_olhhxxQX+P)E%tA<*hV*em%Zx_7f0=|>%7!sy25dy zeL}CGNb&yMPZHgpl;rZ(Tf|-WD02N%JF?^3Y|6&-B6Ym=HLAYhB>Hk{0yQ)&k6Q74 zKec`CT;k;VNU|SjO6wM!lzh2yTk$N63@gUlB=By3(l4Cepa9aB=-MZ*1cD<_=#(DUKugV*Xg~fx=@x7NWT3#p1?Y zI!nh}B}m5Km6E)OkECpGG&!@to?fZ%NSitcX{)!F=*ub9=w~L*^wMjVbmXji#NfWg zr1r@Ajj!`GM0jE-A*#C3KoZq>s`Sgk z1CmD1dXmcnjH$wUsbp^(Z#p)}hYlOmg*NZ}fu?RZq7$+P(-Zg%-m7abU7A&K}ACe8hJK_Unl zOB$_gOhq@zB&o%N=+-rc&_hR$pmWDpXPypsq(6nupx>?brpLJ(kq4JrQ19NllApHp zl7756PP$S0SR6XKsV(2b$AOx7-*MB|3H%djD}_;0JBya5Hj%Vj9SQr9BdHTLg}hYS zf@-q(6uH=TB<+|nioWU=Nc(8jVyu0{blq>kbghuC^yxYsyJ6Ke{rt^Kkd9S{1xtZh2VEPa(=fB_}w`0 zyE@UE#2q-ldmH?&0r*{S@Vl45?+yXK>jQpw1NdE2@Vjrp?*?;zw*mOwBF^tB;)g31 zKW>*3Kh8n?m;v#lBNsosA%2)a{Md}ej}=(_2!Z&aNgT9Q69=6j4xUtsgGO8&T#m)T z%82KeAulAup*5dC4irOQvyoNhIVY*C8*N z1bIm*mX}m^epORNe&xjFR~G*uze?rutE{!>Tbp@n+g%wKVgK!wnd3cc8UOi99l@mZ zbHe$dd~uV>p`sLrhSCM5m!+9orbu6$F(FSJu0!fFreyHEG;(SCJi_v0Q_@&cm2`M} zKr-y%Iq8#vZ<3SM48#Sx7UD}wqlLjY+gr~Z7i?FuqNYQZS*+ugzDM}gO+o~Zo_UE( z_UsU^UtLvPuUDLOY^P4d$XB1FhHs)t>!&effB%(a$WBLUU-)1$wP_MLyLTw*-GY`r zHf>J~ahNUbW*;ezaa<$L+h-!u)6TSR9rM;MAbYMu$V5Y4#sGm}c(VM~pPXZ#Zc={uaLmaa$bUan6q%r&4cCni&#;_Kv+Tr;Y6;TO`_FHIWbeS{cb z_e$#2PFFIcmx*NfjBt_v{8ly_k9D%G+~V(t!^*jlw&Q$Cu&7Ye#G7t z&*?FT=q|J+#~wdVxXllwnwd|aVs1^P?)w|jSAS5HwaI*HJ+BY7?SeV+yr3o7CBGA~ zq1JH8_dY?AH`Z@NHNwJeT5Q>FAMVFEE?#kww|bnGP*<8E9P%_w9C+ci1yHR$=O?pf}kUk zxMNo(lS<9`3lDvIchGIK zA2(Yi_N-xMyQ8kN!+GMeMRj64_?N7b_=DPr_pn!1xq>(+Tp z+c?f+tnxO~`&YlCFE%+%Cmx6(uO_afHl99AMqR!tHJ}Qmz0CSZiVZi}b{%)!!P0&x z@5A^~e)c;H(Wk82qKRG`B}YO`2!9_xX>46BsyK5il|7;ZwYI}s`trkf^q1r>^t9Zi z%&6Fdw0lrBCgsUpTD!w)@>}3W>haPmWZUxv(!f(%gm!VDYgIWSfLy=@|2>#2(}6mGT@F*^h?YemKK^=)-Z0-OJ#2FM;3v!1>)^@VkomaTtpqhp_ljYjs)tn8d{o8;Boq5I>$l{J6=*k4+Fi zGL+&+HNPNIBvAr3AqCl2<9I9M6+`~l=8t(EeU639z} zAuoyI@{%;jOO|nY$p^?wvLP?24SC5*E-z^Xd5JlfmrR7bM7QvpJy zs+-PY>iVVTbo|(E)WB-7RDk_-%5ae*5g#lgg9FA8qXR-DLBY`y?e%(Mr(GLu@=9{- z1Je8*8x)rCnkHBXYjwIUG=9B7yi;T%HNVkE(mDPI(Q43E(*A3EveTJ2R6?J3)LM%# zRR74Obcx^~bxl%@jvjrNI{GP=SX_T2Iib-N!n{L)#B7e1^vS3|@wQYw+xNE}9L$y; za@4xy!_SBb5*`~S5ara=lT#8oc7yaftG<|Bs8~Y-G z-!JZz@Rez}X#U#HlA%-gN#~^LOSd?$Cl4__DW~mP)cFOgXkvaWJ-t;t?Kw!o2>GMw z`aL$&MWYweb6j1>-d8$PDMj9$9%1bnfgR1h9`>(QXA2zAt*sl8` z-pc3Zf-QrbL?5$s#f9I_OJX()hz#HP(l_=N)PsO4l+a}wHS9ng=0owe7~^Wp;TDHTfkQU6ZQ&2{^eY2mc~wi|b#RQtsfD)P0iEWKogb$2u77hD z43h?mc)ePQCr4^YT^$Az8D5*E`nTMujbC+Waou>zo=-6+hS5xe8%~US;(aEnwGq>5 zj}J5EOKWCB)0gCfty=Vby(W}%o`AUe%$?AFzF)GakD1;0+0KsFw_N5Oy*or;*>15& z7~n1*zsXd(`C16kbl+*IfE-S_?rcaO?6{vIH}zpQ)bGpO>okZl=%T}}G`3;-+?&97 z_Vi$GJ*-LjWSi2FB`oEx--Wn7Z3N-k^{%9tZEcsirJJMW=%>7wduIyvHHsI7R_QGk zO>HH;v@M!QS(qzbD-EIwUfI$a>$9oC#p9XaW)m5`!T}F z4X6uiThaV;zSL{|5yYl~Ai`SkRuYkKZzs9!=Xk{C6;Bv9SCBX~QPivZK(Up%z4Y?x zm4x&AJn8NEA(Y1+K0SEuHR{#w=}fbpGnrGZf|Gn5!QU(vl5jkuqVcz{~r96iw`$58fcyjyE2KHkM?8ifFKl)?)(M836bcAzt3C`7U z4bBzCovSSFT(yI96{EqqD$hO=RM^KTCHt5M_CaIzL2&kQ3A2y#^4$SS?;q;y{5ZUS zT;tw96!~rf_Wn^B{tEZI4Z!an2fv#Qe)k^u-MXCLjRe1|v-79l4F$g&4}SM4_}#DI zcZ|A0Kc0Ae%F)py9S)!O##2Fh#%ot{Af^4{OAesV;jVebci2AxcG4s;>TJp ze#CO|!y4j8V~8K`A%3WegY}i-pf|)pPc9B_Q;LI2AP)L*aj>e2IQV&;p13mNc^u$A zi#Xgzo|hDIxX&xVeJnZLrxD;jGXeJrgS^BHa33MyJ|h74Sq^zg7T`X60ryz|xKA&@ zeO?3ZGahiCz8voJ5^$f&$ggl*R0j3IxmA5`F?kx(D} z6@KNx;aBfC{7O#=zmn(eF_5>{Q-NQFaQGE|uJ%BFHC8FV%KQiURTP(Bg>(5;xXn(R z(F^nJeFjZ(9J{m{e}3my!o@ZP!dg8u#NPxK(p|YDC0`fTAm5qoCB0tsBB!*{rVGDo z)5ndg(!0m3rssV>O*suVq(6>&PFLcgC38LWq>VoYp*l``HT9^A zP>*tfdQ?3%^{9tjJ?bmeqedy!qn>f~sEXh|o`Cy!VYp8Khx=^daGy)u`}uVx+$Y;D z%hupRiNn`Z3wS<-bp;{Tq$q8YmiTI)QnnK{+>kn z7{6N|n3g;%#?5sIGvMd)JWEiUbLi;+BJG16Wb+%DN0z(j1FnR z2K4IARNWrS%y*i>4C%n5x_5S>&yF8U&HElg7&MI`&Pny9t*ec<8<-aBxaLp`zC+e- z!PIJxMK+h#h_4lnlji=oO8BgAL`)gKkJ{O73Vq124&80acBaqjG{)uFPUh*FPVBI{ z3z%6ujxqM#5}4`2e$>^bfpmEO3QDkcBViG^pV%UDkTyTD*zS_gZpWzkuKag_Hw3M_ zR24ga-zVSP>GKaDv_9q4<9II!#uG4{4P_kc9F#w9q-xn=hr{+UNFGUOgyT^HSsV( zqBOpCZL(f$HzL6AGu1M51Kpq3mVWx;Idf`45mTc7mhqghh^?Eqo4G!$3cE~jopFs_ zPG$8>q}w~5r`GOzM0DKwg=i8zvQnO-qWkd>_CpN&(GuH_z1)86;`Sp!X+J#RTup*= zwW9*(sy}zGp2N8s!JR8!Ip?Y(_OVQbeT)P9sPPN?_?4ZTV|Km)?0f@e=L5jbt-;RQ zb9Vlev-5A9oxkGjyfXZiD!)4q@b&>5-aZk-+kH8_eL3Lmy8&;X0e)A2;q3}s^daYW zPXONT3V6FJKEoms=Y2VK?v@RK>wL zzlekR5C@My986ac2L)UlJi^66Gl+wg5zm`IUCl$OuC@T`YAH}x(+zDYk>@4RfG7Td zyu=ggY9^4E90oiw8t}wBP*>{&c}YCvB`qN@X$W<-wNO_Z19de|sH@5Il0d){DYws`6!}&A zYvH#0_0k+dPB6US>X-O;_h^Y0uF4Sk@WUlrIu%Q2ZWT%MOsZ!eeFgo%tvcMX7?_la|tHmNiL5hb-mn)V{%wdd<2_{}Y$U%qfqk1*Qhn#{(9`q#^c1;p0Svm#kNVmk0qb zxej=VGvFnDfR{W4yu=Fdk`sWJ+ycC0Ip8HrIJ|`5@Dg_pFUjWclEba1+g-k$;JDex zmQOxDC=jnL6#3On6mO|AP1?!y4#EG}jF^#fgu0S4hqi8NMo;g$i)kCYo5?@FpSiuZ z2fHaDf-w=DVS+a%F+I2XQ!(r``q8I2YK(I#v1MB(vB*#)eKu;7UE}=gj*eT0^1qap z3ewtHikr&rh(DwNJ1fV8e4phu-0UC0E`uZHB&QqU^siM{J|mI$DRA z`)8}MU;J{JaqCu72^TifOLeYNabAT)K}~Jaf8u!QBljFTgY(sRW__dh-vg|Ko7lGE z&@eqoP={;Mr-mdsph*N_p4Eiz^6D1-(lnShsA|r7>o#B`Hd(R;pZBmW-W4$|A6v6= z_w`wwyyMiY+1KbVJ#}d>-8$stl%{0#xmD770blKis#d(DSzGx_>M=so2P4F3ZJJ81 zw*4Zl(xo?9t64IUa9c+2fANDp-hLH*E>y(6$Plx8zmx3cJ2%-|Cu_1-MtZU?InCIX z&-1AR!C&aerWSP0ID4|mBPa4qn_bcnH+}n%SV!KIahdopuu=Gdt5wybYL0yG?X)4-a-qvM2j;kT?6I&nwoWM+5dl$G+@?0uj6H@i!{` zxE_-|!VWlcPUMisUC1LfPfMlGYuk?v67xzAp5Ui!>n==~5(>&cq(tgcn;6NPMh@t4 zkT{mpi+)whgo(PAO1G@(!`>Ryk+t&b%0B7$k#${Q#qy30VW)hf*ac!8`u^bBjE7i2 zKltEIPS);24n1_CQl6tC`*8~P;{xo*OW2S7upc?xe&oP@xN-Y&LdAa6Z<}N1Sb=k8 zh@C4VI9ILVT(#!Tm7bb&Ri1skP_mCroPD^1eJlt2IEvXvDQ6!^oP8u=_VFt_mtb~o z&)K;r*m(iic`n%b7S7J+VRrr$?0f>)`5w;B75MJI>93UiZZ`PcYv6b1aeg-y{O(Zj zyV2lxCxhQ@4}RAl{4NcC_dfVt-MCVE9r)eZ;CF|D-^~KQ8^QVAAn?2I!S5>K$1W^> zELRgho^bJlg7|R(;>RP1AFsIhaR%bYA&4KRA%1Lx_#uM$Q4I0pHpCBAad14ACo1A# zO%7)eK%Uqbc(46A-m4sEDCT&ta-3lg$9sJayjOV~Tm^YzWyEt;d5OI491OgrY~U@) z^OD8DTN((wr5R9n?gG3e0o0unq3-+w@{)T{cjg0cDGln*d!X+8p5ra;0^X9M?pzu9 z70$CPkKdkL4!?cvFZk`McmRKze}&`Jzp4+``G@sERqs*Cyd@d%mX-r=sXY9u4aQqi z#;=s^ydwG4bq({Ywr5DYsc%L())@btw;(J+;2e}H5+5EXE_z8w7kpYzJPdm$&0HQy zUAoKC?LR%D1{H-er_Rr3ww8o5QB51OCIdS%d$xnleccJnsiij5Hgl4mym=Vqzcq+p zdo3n-`>XyB+^6>V{~Pxa0PaHq?xPF1j}hQLw=vvjCEz}3fcvBa&M=@H+^3-51-oh^ zs_?2LE#hC6H4yrrcM>NUR+WSYWJ`P06p{{c^NHc}Ea+(uuh7xwrU6H-F6&sO9%~V1 z#=h3w!ETY|GavdiXP5V`#%3%!L_LkqrrDZWbRbik4DMq|ZnzqQ;`w$B@{$Opyrcxn zOLCR+lDAl1lHlfG|K7JR@BOw{{H>4Y3g=`diZ@*uD7iJop2&K+lKeF83DNIT2tD6a zz%==Ijka)_!HOTxWCOIGcUb+(f0-il6&Td zlJy^am0GRzw%@mCE-(0OEy4TYtA#gzWQw&#p_0Iq4n!AbCt2laHB!8N4SmnNGxMhKzu*mGM#0REope0;^ld7cKD-&RW#dTu z$=b_#N7EY%+Op}wnC5rIS8A-1Jc=1Xn8jq1XS2=8jGPR5--WTvs9m)gzgC;s`OaHd zL(lE(aThPygimwX5#VmmveT`2RpX{JAVUqp32$zO3cok z!OkaRc8=qs|CYZ}_PZUx@4AEE{S1CL8vJen_}!D>cXPn+b_TyY6#VWv@Vn{YcUOSl zwE(|+82oN^@Vn>0?`DACodte3fb+W~_+3T(xQ)G^%kxCV`?)+%RJ@@7JL56XwwR_pQChv~Z3jU6>&4q)Xbr3&mRa>%R=p8BT=|l!yTtetcTG6+NhxE2F zq4YNEMr<(Oimm&hDci5nVYayNJ@a6tBReJBkbN}vEaklV4t?l+4ch&KDVb-{nq*(b zOP5`?wBI(`lP73?i{GhsfG~GpjCjSI4w43@mPFF>a5D74MPl2+adb70Cd`kw!2h2= zm@U=zXPb>4$+oRtLsrL{$417^WSN;hY;c|t?aEj(o6fq?fw8^GgEs=nIgWYK`axao zb&BWn9)}nUB4gJI?@!1QH`yL8X*a(M5$v*`4D_f;_ISIVPO;5su^)i)`BUP8ehUs43%We2neVI#>)T0`ibtETb7t>89tY>DoYQv*V?9cLfJ z*Oa9@KVkdWtfTv0PGx$9-=?3Xydhn-R;ALL%^(K)?y`TRmCv*KI9YHjpt|UWe``tb zrb5ZYSv!eOLQASq|IuXPC_P5lb{})uw-587L|b+)r;04SsH*JD=s4LDkF%_8MbNrM2SP%Q*0{bx?_QMU^kLIu+p0FRY zmG+|%oGTj6)d&sFRYN#e9&oO@!num%&Q)hPR}`G9)8(A2^6X=Q8v7Un_OTW0qaoPG zCnfvn&DqCX%szf)=MhSFK83UMR-B#J2RmQN*?A~u=i9-~r-GfI=j^;P{1xtZ<#{3> z_zWF@&oCI{GkCyztpU8(HiY-ue0Z-Vpnl#O>gS2@Ub_q4YmdNt?QnRnmDkU|1D`=& zKflWH8QK7!K@mT2zUVMDe9=)HU$iyUKTa$0MRPg6sF@O9v^DTWRmH)L8uDZ=0Z&E( zaqv0DlbOl!WZG~%87<(+R7O0X2Yq)J?UeXxy5*x@% ze4+1dMX3cH40*|J=)1cQc}a8VyPF7ocbB2>E)M$cin+eKBIvuTjQpy+zHMBe;RdJA z(C!!d42r&OT%V!5z9LQf2X|oogX6jWL3v*h-al9#?^Rvjoubc6)4sc3@iOH6t24mA zvR1*r>WT5MdX&Sz`c>WFSM|XZtUlODO?|Mu_u7i$S6kKKSHJSR^86|p@+)mFzY45C zex>lc>TsWlfcrEA+-E9=`%G1V`;6ysA43fH83wq|cEEieakx*?tyT6umdAOmy88+? ztjrgFI$T@Q!!S$ovH2=uPn)V#D?d;2`KJQ9iEs^*|BPhT`sK2c?0f8f{X91R$UIq_ z_$}=El=p0D$!T_fmqqj!&sEH_l}G4>d#{l(fy;yRM3TO= z)~6T|7(#eRwetn$aY`TreOV(8q z;8aK2k$g-zH*HHfd{{-(1%Jd~4Z~Cnsdb(!R0!kHxaI z)Vi{28!yw@V;(b&GYpuFp_bItrVdp9Z|FOdZep=9qm-I8@Rt|gmu%TxB;zPaq< zu&1=Q{#WMP6bt6?C3~u|R~u?n(k|jqhPFe%-sXIZ#2tbzS6xJ@PU9tEMy;hj4YbM6 z%?DAfbhnT@)7+Uh5xT6;(Rjw@8zrkNW@PT0+Q@h-9>{{TjAUz9b(Ag1u$GN$`3l}4 zv{{b>O&F(*LTcU7w$zT@2P)+`G}({duph;+A1t>Y?O;C!z6aSOs{ZE7T1nfG0KwJn=o?iMs$#{0eo0Silqag5NEIx&e+SrbFF8 z5kE39e#tP5U!q)ho&)?6FQ_}efV%TTuI_9K{F3=x-8l~UC3xL=1@KE$#ldY#Jmg~# z2U}oqFa~(Y4!}c}$H68X4_O`u?*Tv2T#1LQ4Lsz^i08dQ*Wj#@u0bH^8YF_Qfui4e zJm?yDfUdz(=y&c0x(4q+*Ps*hJNE%ygF}#)u%K%&33Lr+KwdHybPaN`e&gI zN|nCPGtj?U3Hn!toc>iS(7)Qp>0k9$(!Y8I`d1|AU&-}-s&V>PyFveIHK%`-1o~Ha z|M{|C=rbt#&lUO%s`}4W=`)nqAN8yLK~Lx(l=nx;`v(cGf6!J%{~*raZKQ(V-k}_R z`$*uo%lW&?{Pu$!zg>spx0eF{iU$6b3GlDXzm?CwQt(S~{*@uezf$l^aQ@Xpj(_z} z>K_W;5?&va^Olxkyd}IoSl;`&D*P(H9Q?{x4SrQ#{J`_87LZ>RXpmohRFPi|xpcvP zLV6Xxe(@rKLreovFHsxG*q&9T!|r7hodbl_-6!+O+P5v3u3fG&ZM#foT>a|Gj&!Lf zi@j?myW+n?*7Q(5Td=#i%rd!}?D4xpbiTm_ri-r@Be2}`aB#@z51 zY2`1L1iQDDuJ$n_9sNV8x6xVk@8RuoptT$b#_0vXDOWbk^*N?3oZY}H1j~f0=a4~z9DEC~v zr2m`V((R6|$zbmo%6;ZN()?r)({8IB`y}`Rle}tz?3=?RnL){PSxKU?)AZGhY#FgY z_QklbY@Ag?WN~uoQl3MT{n!Zmai80d0@#noupd`pKVHFp6v2K( z!hWQ|el&pnSf^q?Ektt4@&b+QYf359i7g&Xo|(RS2A`Bsf>m<(#YX z?4z%eeY6Ana0C0u1p8PG_Hh;LqZ!!8bFhy_oP88<_R$HmkMit16U!6jcCMT!K7%~b z74pPnE>Ap&y+^IY^2EyUSGeEZ4t&vA;ETEdUsNYik1*xl+vU7fx^`MaAre&QC6pEwctyQ<>gBCO9#9tYn;pI1Mw&npf3 zyjDV=S0VIy4TCs13gVy+*T>S6>+{0n;Bn~ls*HI48g!%lINd0DUNRkYqxOSt6a%_Z zmpR=iU(k)(1G-VRpo>!vbfXy1#qj`LoO+;(V+6WU<3TrS9q2|42HmJY(8YNPx>0(Z zZd5AhMpZ_Bh3kuU1%1&jpf8#Y`l5?KU$l;f`l70IAYXI(qP0O^R8{>P=aJ$4I2F~u zlK11t^{;S!h9mz#pFxv8`rqvzRP=e3*FRVa{Psq`L#_t=_QF5RZy(L^+kc0D^*}@Z zRb|u%D+9m!74Cz_K{@V&=T`y^^Q(1i#e$x|h=;;VCI>5sa}tm@Wh z8s2Zp@@}+eN&*H^BZH<>r#inNc(>a)oO?czf7DP{Xm)d{Xr=is37J1l8vfCVT;6yS z)jYeD?EE>J8ClnzoxbEbm*`a37d>bFjp_5HC#*14V+bH=+5TbBuEjK{B{ zzHHb;y&lu3Ql3MT{pbe!5dix!6ZWGo?1u~N2Ost$3-+S}?8gY$kBhJ$5wIVhVLzHE z?Z-hlSBv3X2{brY)^M)wz_}`gb9DyJRWh8bDR8ddz`5E1=c!O?74IMA+4&~Gsq14n^>DzcaXhgv;M8(Fu?^sfj{&EapV$|8ukpZ7d!V)_ee{(P&lUQKxGtxn zPxvC}a?10PPQdF+1YTcv=o9t>USAyW`VIoGZ!Ylqq`>Pt47|Qh!0USoyuM?=>&u5e z;jy60spu1~jQmQKUic-@Z!g_oAPM61+l@H=_SZ`K?Fzl{6wq(S^}^-)?YW$O`v=f( z$8k|FHTt6GKwmTy^hM?RK2D%7s;F}+^ek2B`{4Sb>hzX|gZ|YzPX9_-Z%LtlRZ~g- zDwos0iUIvA0@J@z<})bkGbr=OaD4_jPhX+WAm`~T_zZG=205QW!6Oqv|6qIQAB=?l z!3|jd;0fp-eBb$J|6nro4<3X5L3zKLa{u5Bu76P8uhtCu2l0NjdR+gYCVXlN`0Y=C z-!A74f`0)Ax+_|+%CujF`%9KSm93;arsm&oy}eSlw02K;IhhhJ$D&(-BuCzbLm zc|4crSIY4`VeViD-Kk6YRCYt*lm}Zx-KOS9b_|P=+D#cmPVSjSy|S!F?HZKIj0+mh z*6`D3FKH#q2AZVE!oO^iHEZDJ)a=77+37laWIb;zlhuFNiP^Vp5c}X(By&6}p0en? zooaZz8F`tS;c#ccTK*V)JE3vdhd&SXCH3u5n_ zF=GuI?3T6i+#{R5@_@`@QBS8N=_1(}!?Ut$y_0378-_C5e5SK!64x+ZKT@efvyW0& zazrG1BiLc?lVtvZt9;?=>L)}mgWpPK$u>#XvBBicL64~|0vqah{wZcoS_nJgg(d65 zJ1C1Ben|E)_o%GdzR`Qc_+)UYuO-!GUAdAgn%dTS@8{V9veETAgo zIW*aiJ+L1WVL$X>Kd!)j42J!PfcnEr18G7kB`(IUYb|_$%D+euuuIJm@RZhrXg& z&{xz8`iiPSUy&2|-RIzUi@@(5gFcqe(8qEY`d9`)AB#WqvAl*pmR{g@J;3iigFY57 z=qnn)^%Yq{Uy&ky$otO~@nb*qpDW^rG4!7+;>S6NAD5utxfuGL4?(~4P3U*N1M%Y~ z^gFkM_+bO_;~exmM??SlZLa@32l~%d#X&KqQ-t@c$#sh4d}>GF^;rS0F9zb^wsQK_ z( zgyr*bR)L-jJ|9P}CnKMaqtKJV=i?~)gyr*b)akd61pW41oPK*e=(m61^xHRJ`t7qg z{q}aC-@cX8Z?7``r+zzu>9?!X7qtd`(JW41G#T_oU#id-HCNIXB{+RiDd>wn!t_Od zrGHhW9Q~_?nEusOPXDSar+;-6^slyZ`d13Py*zz}ae%kCP@&HtuXDO%`V8_qC*J4P zlhbF=gkPcu{e!cW`UhPxeu<)gPzU-4Rq;zS<+n>Xe)|=S-~Ivk?Nu>;doSR(_XmFa zKqY>=I{uXn#=oiq{HrIxziL*Lbs(N2G zY1VF8!=1C4bm2nQ|I;?cv)NH<%+ef6lIB51_Fv*KvECm3SwA=7JHMMED!;1q)tUWL zqrHns({EoW=QlL9alswtVMsLFZIA;yVAn;NgTZCl%+EQpHr7*|y!6+}OlIcGYOXve z^IkuXxpHeUn|wNhnYJp68nF8=<>&81R>pH^vL6E>-~9ynZZ71z#*pt?L%ur`^4&&| z@1{V$I~MZY9LRUSLB5*~`R+NTe78T~qIUonou?r#dKk{tMZiV%0T=BFxM&vOqG^DO z%FmUV8eFtI`;gbqar=C&IVpzTj<+%1zuk}@Vj+^*EbvZyZwRJ zX9~PN1Ms_FfY&z;_`Canzgq3Kt%x6ZpRl}MtI+q!1AQMw{E*jcKS8~A7SwCs zLA_Q7>a|`FKT1L0M_#X8#no%Cg1!%4uT>QXw_!Sv@;LYkbRgexI*{!^2XZ9nK-LEx zNOOpTZ$Sq#9CRS%aj-~92T~pf2Z9b{WyEt`qfNGBvAHrgV6Ker>Hj%bCI#{mt)pA1 z+b~yV59B2eVXjP#lrQuG$V(=}Tp3@;OZG!vQWNIN7(ia~8k;L)2ym=pQVvj`OGZ?Ulj5s*L(zW#CtpkzYCTmpNFA4)J?` z^b%^XzAx(NuP>ch{isxDUJO}HpiTF3aiNMIJYu2(SF)#NpmDe1x~yZ(o3i4@xw6Mo z<~aF|N|D72Udk-20XDR;E4?ZPaFYw;#a^EmjRwA1UzxR5}vpd>dph9?%Ym;y0bgfotH!1 z*%|82MNoI%1$Adrs5_fM-MJssox7^3JC|o4uax+SO@N=60Q|%R;3s+jKd~P06Fq>R zSR43>RvbU^Imb`@hVc{2vvXDTS_PlsSG+#FURxRd3irFdpo_B(baC#2F3xMv#jyfi zoC~0fvmbPEj)E@ESkT280=hVnpo>!vbaBpsF3vR2#n}eBINw1RXDsOA*n%#OFX-Z| z09~AT(8W0lx;TpXQU6exe&S~AUwxR{*NL0kmj!eC zDkHzDj6Cr#4)>h-i^HkbnfQyty(9kOaDQ<)RdwgTINZ-ZmcKaMUmQ*`x9?BZ)&5_> z;VPqE``^lk!{-mKHnw3D^9TPFA5M8bj$GddpN}Kg_xT+@-05=k+uN$pZ~rHJxM$_) zi*_$ZUsO|miCm8?h|?oerGK>-^vKldUzNv`QRro;(`S(LWN>{31y4p?uTOGpYBVo$b4s2bHg?1OU368y8VN>mYVdXR&+j2MdmIk`cf;Z-;U1( zQ0TX-n+qWCkCM*?sEEF(Lbq0-FM1DjYZdyU<>}V`j{cRRUrnKZrA}9^BKi#SzEoVF zK~>+KD%}rF`UgjIeX0Mne^4F2eVK~B)PKrvSI57qucj|m&g-iv|EekPdR<5__@l3zSM8fmwFERQd6KWbsF@gzJYNUsUt$jWCG9}JL;`)Op`c%q4EiN8oPLR_zSQ#UTvcD{V9>eK1D!h~(7EdeeW|md zFV*=MeW{hiOLd06)XC77`c%WdR7L!-#pd??>AqA|aqv&~rB+5f zH>whBTk~d;gCZ|k2YJb#?n|wV{7O^(k|UrGH}LXsvLB`oS5%rzzsL09YW;>joHyvO zq=OENTp!LDbXW+`VR5OsidN{u1%M7qJm|3W03DW5pu_S2bXc@G9hPL!VbMfS=99ez zl^<}061q&IMjfcb+(@s>+!UEH?Li-I0qDcgpby7@KHTvZhe!eF!|hu5gFOApfLLDD zl6V~)^FQXFtI~(-g6YGln(sVGX}+@`%s)T&5A@-7!F0k8# z{i_F{4`%}UaJ@hu?pOL(`J6sn5738e5BgV08tB8Rii3Ebs7l96RUA}@mnih%6#awB zc%nj&Ox{0;>yhF5aEksxb^LaPKAeKz-htDHQ^jvz&h>wcSJH=5@Y^ece^nXJQPKTS z;8!^qzAN94^6;yQJD2Oj*@MnDZs!|7N0BGtU4HWut%fat{!}Q_wIej=C(1&}5>BA}a8~jQit_0>g zE8@p?P9LrV=)=Wx`f%o)K3sLshno!Zo#py)D`38JMfBn1aqu(f!wms_IC&hD>%+x@ zK3ox}4;O&x!}a6z;qW-9sXpBA#&b>d;krX!a+uSHYXEtPGvp=Ske4X*;if=dlEUf3 zP5ljhxZlaIG}RHl3v(JaKD8q|!kh-a=SAvl>uZ#y;UxNcY62AymPf7mzMsmNJD2#K zISsC$hrAHj=Qp6xbmD)`TRkJUbrUn2bJ~0<#R@VrF*VCA4fh1ORI`Mt7<;ZJeZHu z4(4Df&&R?0yzu#)@;MC({dT;+)*1S|ROz=X=5wm*uPrZr$n!)+{7~o!<2v+;_@U6D zSLln%_UJ*b3g#MKrPb^RWN?qMqKBu8PeFphl0CoBd^13sw&!CRCB%jluY5!m_ z^bfwo`UmB68u0$X%HX$G#&c-8ABs5*x=TH3aZ0{R-k&<=F?G zUn%r=<@pt(Ccl!~M+xX`E9Y0`*}0;hQ(@=wISmRsZwvjLM$peW75X{-xH%1aTpvB& z&nch7TN(aJ+3zaPX^?{79S?IF=EIzZc$m}R4s#j^nA6Y_<}`fb<}`eRISp&LISp@N zPJ=tleVxwDebr=61C7NGep54AKBvJ4<}|$I<}_@BIY06_4dF1Sp+C&|NrX8KFFwUl zQ=LxotIjNxejyU z{?1GNJ1_O`ywtz*Qsr}BE5a95%&%3&7nRSiRmT^tNPY0{ywrbxzO%Bf+TVGp+RPl7 z8~%4*>Ix$Eb35|Nz+xhC%3{jPe+eZ!8%@3HWkc6k<465!9(|uxS~eFtHM8$)mF{3+ z~hNv-=q`c!O>XNP#H6-mGa6iUz@rsMQ)#J2; zM$!ynz|$~s(1q8MN1h@HweAYBY|$dJw?`||-7|~Qi8)PGX`f9sHw~bRLSm_2O>?PE zZ+B9Q!e$betNkDL-a0I+rfVA)MQ;-n3+xV*j;pW(>~8FCv0G44Q9%^D8yoDv4h*on z6%*^mZvECAFy~$$Klc4xya>-r;? zTz!7jaM`puQ@IZ}ZEYK2 zmP3MdzB&?dEnTJ}CRBasTC{cz?dHa_HQk1m*Uzf&CWFr3~>4KTC17$d4=}*l=qtBbNuyJZdWig z{`^qi?Uk?FnTSblq2K-7<`yebp+Lt5ZU?r^cKa*WAh$Dt*7|K$I>VUt-SvGpdTT4R z3ef8IrvLxwK=Spf`>QWnT?vD>GSzp^6j$F_0jj}zGSo!`d2BT&yW)1Fy?tky;pI*UFyB^^X)?K zRh(~+ulFjSM^esT#jgvnOrTO+lUDul~uu`cvyw{B^elt-DQV-A(r+UI9cW=|W+nUzhUbOCB zpmldQt-Fh8-7QJ$?h#sd&1v1eLhJ5sT6cZp*4-Mk?pC37SMDD-+5T~d?H{|@{xOpF zj|Q}V^rHQv3hf_{Y5(|(_K!8Re@vkLqYv#LXKDWkjN3n^(f;v^_7AnXOC5T7yUO|o z6=@%w!}h@d+6P18_CXuA4_>2va9`X$*d?yMfvCHb68pIo`6Y&Ueo21vONNkNG9%6} zaVNiI3Hc>m$uDV4eu+8xCFbOpIFVoSk^GYG2rZxu#Jh5%PdX#;`L5m&t=W69N>_{n>V_9dpS}nZoGOooqZAYha zx*8-5>=@;D?u7B1wyW#q8z23%Rl75|i8~wJkR@xWOOHo~&hT64Rd$^i; zdb^rfzjdy(BiQ=U_bWDjAzkhAMSr(1wzPm#)`mBo^8LNmWxun9#_C!d*G@}*Yi&Ah z)Y*KiqicEUt$tIR_xjKRU-e!50}W}M!t~c&GZ+^1xvdZXyg(b2Cs^lQ=%Ti4-RG`F z#--6b?(OBmby$vM>ElrF$SfzJhkTs$kb_7M`OeR?u2m=Y*X54WL#`6g$xtR^7elu` zJqlM{rh*-bfz0yX+E7Bpb>h=Z7%zjJD(}UcF8d}`-Ojdzm#F?n+9s`aT)$o9 zJIB{=7x`*Jzg^@z%X~F|rr&;w^xNa_=YjF+L2`dLzP_le2N~brjf~S5mHT;0=wGG8 zIE;B78>k-3X{yH}^z_y82Zf%#d>&j+Up$Za=iC3&yvoJuF6E)ROAb_b$@U-WE{S>d zKY2go`KuFDpHsdcqCO{oKjir<@qWnjB?-Of?egBz^7x=QU&7;qkEo9OmVby39*c_) zro?*1*WLB>eSR};-JKcteJ=c~-t>JwpT5r%@~^Tm|7uVI{+0MXm;1*Kwtp;F**~Ib z|2RwgM`hYSF30U3?`i+IM*GJ(+CPrd{t-d@$7Z&FJfZ!=n0?TZ_CZ+}fbWBM{-G|w z=MBm}m=gQ>Nb*aLFu$a8oL@4X{F1A2e#z1}zr=_9lGfyx=*chHKz>OK`6Z9YFL5Ei zWEc4*VdR(mBEO^q`6b7gUy>63)w6kyWnC_GDnEL`2b+q;CfSWYz1CqspYD#IPB=Jc z*}lkSK!F#|I_WS`)weXPBy*>S*IH*&U*?%e8$x@s|2`s1zLb@yHe=*&0u)Rp~Q zT$4Sx=abop?&6XOsi|uLz^KqlYZ-*%zEED+4L7yuGUv^xvHCS$5L+={Z*I4 zGei?q@1V9r`8S$MwM<<{wX$$+Kg!R!kxM1(fU5&-^f77eb}gD=-+$&d$5JPTIZba` z(PhN8wXTQOd~>O{XQsAk_iE%jJ=bo!>Ze~6HdWs&U4Z`T`4Wb?{hR4MGc3?|wHc|; zJl#$^%cr8wr*A)Pm%bBS{d{J*nykp=;%B|xy3f={HuXCVvFjh0!C_M4(oO-^&z($K zZgY9>SU|J(PA}JQQ#0z`Tkh6Xec4Jkth9;Y$uASb!5rxgq5T#bCj2_7uhiMx@TvC; z{iQLhwVLtUbW?iX*B&hY#dU;xCQXq~-tZIaXs_F?CO33m={xE$)rsp#b>ifA zln2#`t4?*|rqFlPdisv)OMGHk`i@#fd}3wd6VKCk)K2=2x=MVa_>S65^=r%1cT{Bc z@N(JCez*O0VzPbx=vm#p&Yhc7*&uTa`czw(ut zo7ru1w}>h^-7Znw*|pJK!;4LY+{*9#zxnoBjWTHmy~wLgvn#+gq4SBG;+;>F=Q5VZ zoy!QKa~Zbr&SkWqa~XH(T!s~$%Xr7mCyH|!yuNc*U7({yv+d4{sJ^pB$x531J%hFU z{Og;CeH=%skCPbv_Gt$z8MuDC&`|adk|DetSyji>AaljCmfCrxwpc zO`k#3?UT<#=oIni!Se@gDUbd?&8udtuH{pzYuTOZT8{aLx|U*I{nPtVQsw=S=i7Tx z{d4(#Op5n@OknTF|KvTF=dZ*$#g!VzN1opu<3G9QLXdfKS_Q6Qn2OZ<>gV|{xOo{!xDETGs@%)m> z3HT+y$uIFBzr>9ElD*`Y%pkwy7WpL&$uF5teo0~SOY+D0CH`Iy2)&A|^(Ba!Bhp;^doYGpCa`C<~!Z}@)9GXTak80Xp>aMxeC6g{= z?aaEIGqUMkc&yf4J$yx*-_KIFyu(**gCAR5*FQO+X}saJ>-RLKE`gaWT-w?DIr&_# zQ+D(KpYq@5X0g3txxnsX+k*~&Sxj_%_^h_G#jdR`D;B1A$=zy^rhmhR+L3QQYs}xy z(v^K0q-)=Go^I-PJN+KN&brOTR_VsJ_SMxZY0yOFt)uN?J66-o#@{8#Zn4XwJr>S& z%_GZ32btK|9hhdjsj8LztCu!1`*mPgMMjZnq+gW)w+Odx`(s= zFF)}V`H8-9e&Rgx6DN|N7(#wxbLJ;*jprvWAwRJr`H6kWPc$b#aY>w?*oXW??>IkE zet-0h$0z0>K5=^-pV*lA#L{tmVngB+mlB`2jQGU%#3z1t4AWmGK5-WDiHC_#3?M#n z5b=pt#3x$D@reoX)JG`pe1+o9=_&49jN;DT6nFj}7k3^`ap##7cfLt+=XVr$eok>` z-*%pcaTIr6L~-ZJ6nEZ9ac2{XJ6EK*^8$)HSDW9Y+&Rxlw#A-ix9|UQsYAO(C!F5o z^>d!Itg&mi;d?aWLNaSMR9T_h@77XZX-gV?#N_z~?W6^Uk)@XyJUY3$IXUz(Rv!aJ)PgWAdHfQoi&3xP0gC@$#L$Dc{*8F5me;T)y+Bc=^t}zVp?e zRUEr(yqxV@m3A5GpGH&7wxf1i?e&_>H>&G{zoj!Iq>D4NOm?@@yXw33`&!0rZL!z7 z`y103?qw>fuky%Id+AvXt;vhMu4?rM2U0!Z^>Out9d$kQ)wbt1gf-Z!*R5;gChG}j zi&szhMqE8%f2t>3gVhsOtB>PM_3qBc)w^3p_3oZ0Q132(yn1&|arN#TsNUV*tlnKh ze951#$C47`Fy?v0ukXzDujVm5OYuCKMCLWbe;$d^XVB+bqPKC-yM=c*xaGT6$*tDP zdv3<)E&bE`v2?woc3Y!K8vcI7*8`Zq^Z>;Bp(Q;4@qV0VdI10Qp3AzH|LHxK`D)@l z7x`-9J(qPYTTxxhlvuC$x|@&A`y7pT-bbvv;=E6~?Xl;5d=ohD6GZFow7By=9&zig zIPW9YU2)z=?jJlJm5<_4YWqk0c$C;bL_BI)-2Sm3ZvT++s1Fp6;{KJ~2lEhL!uLVJ zmw2e~B{Smq60r}aPhcPXvOJSZO6=#0$S;}B{F3N6zvK=1B?aUBl0xK{j3&Qi3i&0L zPK4B+{!~ z$Bt=j3jGeS-F0rO{g+)s9iC6D;I!_?8s`SHzdE(En(10*R#lB<&@i1zcfJ_SZ-{UdE%uWqfN8Pc<_>-#$soOeE)>HIo#Ca3$$BFdDh zXHx#+fN3^A-&oq+EnCsy`|EU$KA~rvX8Jm~SP%7e4zbOznVt87=Fo;=nvbU}bdd*g z>df5o>gG)d(FN9dq%Hlan9j;Iz0UUCKG(qy&S*@de-cNM&E=hG0hg%2S@09H&dXvO z&iq9AJl2z+sP;T&{D*tgzx@FD z?X%+i_GZj)FGYU)GU5}3-|j(t;zZ&Th2JjY&MPSHtY>j&AL4f-%)6vpbt;`Mrn80SuMb5vuZquiF*dKro$`tTDX*v*UeVQEb<5TL8d3iFF3LYIPP#a`DgWG!^3UBV|J;1Ay<7GPT?_*$|9p8|{<#;+KM%XL zShJaQapd>8noiMJ;zb+M`I41%zN9(vqMpQyE+SqujCj%U#EWW(7d=3{XhY&fpAs*6 zgm}>>apx@0$9LQE!gIier z!SQkR2kTM&!EJH%2Q#wzgCkC)(Te(mDN!FMCB~7M=OOBCi{}x)-Zp<8vfeg-9{)-I zDlzlwmCC&Or}yJ_y!WGA-1`w_zZYiPt zL&OKg{t-VuDE1Gv_@FtRTS{mj6mhlq`{4UH{wh-f{8f+&et7sHe)x{`w&|*rvd!4I`JKZ&dpe!m_?PRV*E?NJC%1HM z(KL;=tF?(%t2NbDAGkm}ZFjil&TupB@mJ3^j|Z%B>DF$mYttWhU2@F(SQbzoiv{JeJfb|7;grWxlJZ#0DUam=<+0dP9?PG|cQ!4zRR5#4 zkACz(7ww_v)pe#`L$%i)OmWTAZ=S156*HH_=;Ex1)5WnSU7Vw&i<5_RaW0T9PB+rU znM=AjTSyn@_zHhryQ*8Yrq7SNe!X_n_2;U(E(z%;-pu&LY1Nd2F8Lmm(&%4|bhUqw zLnrioTE){(d={sl=xlFgxZw3oFZC0TZ+W9#HPcixbG?OTQMjK=9@5!fL^|7FofVz! zBlQb7FDen^Qlv>^&A`G-T?gLQ=ztjbUD9J40SuCqvgR{BLEHYg4b?QFX zLeE<2=Jd^>kIubW*V?+CVS#sj!<0@<3|5Ul8uT{{8J323HVksm8#=E|tDABvoBqZ? z2VHc*8k%Vqtu@bXN8%hnw|M6O_R)FKX>sR8WgJJG1JJYcqVk-~=eTnK1Lzz;Sll@P zeop4US%2_Pj>FjJu`q$>QItK85$t(H#d{tJ>5Kl;yc(atyn6i~=GC8iKd%47`|(fj z`KddfU9-2;yI$CMLo4(d=KPc8+nLjAjUAcc4d%pb)JKrw$4`a@^8?z7c^H+Qytn?4( zuja6QFeUc$g#0Vvm;5IFYI~et(w*^FZH(lvelWizCH$*2^pEZnEdCe&$e-H~Yo$p; ze%&T%3;#~q!q1bo@b{!me&04}lmE9v+T;grm$vW+r7iqIX_J4rOWNco?vXb6i?D^? zD1R6JqqKz|DQ)s6(VqOu-ST(xFLz2?_?glc{-(6a??gYz|3v@E55>61A6+NglV7?~ z+QegSmbTzCr7iqbX^Z(GZQ?m`FY;q?FXBD%yYOped%=TBoBUj0MgA_vOZ+Ho;s46^ z!Vi|V@Q0;Melgk;j|!XoWL#hP%d)-jo25j_H7}Xr|&#qMc;e)U3~Y+_Cm)%+VmX=tmu1ipZuM^3t@}zL;1V- zPL#IzUX(U{H=;d#KfwBe5y0sW1 zeW$|~-|MoC@aLs1zTc%y{yo~$_dIO+t_N1)`(Cye-}%y}?|t->zWZU*_dmu(-#H3a zmhXX8_FNNyRr+J*SkLPpbp$?wFOc^l-T>Dm{s42Hcm&*6@CmZL;1#4z`~t9|It^j+ z_h}C^!!BoS27CnnAlryK4$>w*0_};H09M3L0IS_Q58}RpuaJLByaoD9`~_^{F)%LT zGk_KG8d#%<-vCyko|wF*s4FII@qH?7;y-Xr;z4jP;zNLy;6-G6!H-CrcoJYmd0D23fdFD0-JaiU?un#*VfN1FkwbWbM&E5YB$dl8QVOo-3Hy@=Pr?}Fcv?FG*xZQ^@?74be8Bk@15 z1rH?K3qDBNf)|oD@k3}&JP~Z-i*S9x8_D*9Kaw`_Na!>1NwA4m0# zuv+(R5U@HHG7nhI9NrjM&DmTOnABS6k9+A~T*2=-XAVQ(&i^QhJ{Ju*fw2UX>xD7e zZR-vDQgttb99R7`S%FpA`Y!lA*H0g`&pNRw?30CZxM5#J^%6 zq&k{-2dSPW-ocdI2Z`Us7!$h>5)X{OO^$u=|F8ZP@!I?3ocUA!RdV?4#G_+9Cq5l^ zV*PgF-7#KKe?pF(`|W~{m%nqro%nhDE!C-jel z=6lc>o42GUK$bEo(R<^$;{!WMdp z@^6K%qO?VPMB1dYi1wtn2%F+2@CStcqHNE328ySk&!o!;oAV56{1wGru+FRTS3++{ z-uF-OR}{zDE3ZjrxkoF78g2~0?*68HMO;5L32x|OnhbJDMrcK@Rhz^eKrFO0Xi)gahGlxHN{-y=OKX%fZi*1^dL z-F10Qp}#I|Q_?$?c9*A0T-)pH-?$g$Kf$&kJyh9#8tI}+yP11w%z?@t;TYr3StntC zuN|qE?F&%el(e5w{*<&E7rTS@b>3}|0V5U$^(=3xiV$(w*}mlcv%m#qrmDI<%!Am zL6k2h?Pr~pI2YxQ;hl{tJ|E-q$Y=@wb8D_Dz$!v}0a%@C*9BM&{_YQ~x|-AgR`Z+X z1tyl$CgNT>>zu^zT_|5g_N^l2tw`JV#h$&=_ONe*@jhAN3A-xgwa7M2D349rqJF2e zZCegP`|dAm!lt^OxPCXvca!ap2US3SzRy+SbS=O2K>xk(+yYjV_XDgbKMq*Eu*(`M zuPO57q%HF1q#a86bJDg8uLDd@4Bv)(nb>52?N0f1vi&;Bvy*o2Utchmth0hJMyDyW zVOOL)JlWoq^6{jdj`H%P-Q(&iw4eXV7dF+g$Mw5V-kxkP>e@@2>f58ATW>9fP4(_E zF3Rr%R#Deh0jtj;_P{Fg)Dd7c{$mWV8csSr@?NCZgKLsr8tz59X|RQkk8CgMGDw^1 zGwhRg!(V$bM$-9#E%d5o8&SVO+Cslt+EmX0?WwKj<3>Y3DAea8{)IfidcD-GOaNd6BZcHRVT2yD-(al{V>vpgrk?z$P65U?p@zWP712 zAZ@CLi+*O)N5dw)0bmtlz7AM59dH#`6}0IFtUeC>0jwh5D{=YH;WvTR;M&2s=D~>; zz^ZF~PuzC_Cr(7ak~M|GN4sFd0F4p0a)K1!4HThIfYj z^7l2570gZQE(BITy@GMysKATBs%C_8zSQf4a%R;e#tY;6y>m0Ly1e)fuv#A77gz-h zOADW>y1p3jiLiVK`&zVej;NbgUSRcOXJ=rwrjsf9xzBei?8P2UfR&fmH(+I-^9Srv zrY68Adfyz_GoBp*Rx{FP0alwm9^r2njamk*4q9x+eKRgr_TtJ*W6;ljR_W3IT{)Dq zE2;A;b|xA#ul^0|ReqKAstQ}LGPCu{HVNyM&_9vyX=2x_G-;K6@H5*7DeoQc;Q#i0 zkm?-a9ZbqT_;2v9@~ik)TIOF>W&Ty>B=}doli*(^hu>Z_k$(GBBmDMS$>6u2XMTIe zdH>mOPyHT@UA>I?9!v_)AoNt^I!Sfk@ZCgt{_sgS&mii-$@ZLQp!#rFPpD2D{0FKR z2V2yQlYcAf$4Oh%k&`ynlS6x|D+inE%fSZ_dIGY&s5d8V(se79WeQ~LJv&Zqzi^V^EeLagkfC9h|P(g(&f;`xI@FIcu$%O4~iVa$i5hd6w;k-m|oY z?z6N>{~7H`2O2i%LE~8nU1-@}=tE1JbfVE`(u;;oy3rUH>1HC1L-j_071bS4ViTk* zEw3r`rKK(Ekw}|#Hh~H0PUBvrKaJmo4z+AA>Xt~G>X!g3(x=84sh$aJQP)Ja7xhh~ zE%d9UO*+O=VbUgDZu~9ja|0`((=FQwy>4lfZa4Z#`rYV1)dj@3NLLoTDAkk3dq;Jp zft9E)Ew3r+OiNqneoLG5zi}_p0mr>amlnSZU2xf6=z~j}>Qe(N(hJ9UNjDs}&<~gG zg^swig`T*yNmm^0Nnac`>5Ky_p*Jqu3*B*Plm0mROnSJmNsk;@k39}GH(jpL~-I zeV&uPAnd<=f-o-9yT^CUzH}w9Mm2sA3ao?7HY}$GRI}3mtUXz6R-`OIzseOPh4}(Vq18VUrF&uo8Owvc1sd zmp1A1qtB$%51aJ*ffeb*1FL~!s{pI38!iB=!?(KttAe!xfR$6<8o-Kl{(%YU{o`K6 z_MF7;LjPa(P1FI9Hq`?FR#X>28DpNduLsAh>z;eVF6;OXSWz7XVC8z#6IdOzegmwW z7L5m1E4!@(R-)d5ycgBg1twHq7x$t%yZBwy+m-D_-Cb#S9)B5Qp*p-6WAT=wVV|J7 zyt4gms?RHJQKwhhRIeB9sctW9s^5$2TTmTe*yoyE3 zn0b|w>y@aFA)lj%%6e6qtyfe(19Rhn5$jcZBi1WXcSH6evFjDp=fFF7p6!D@Qg9!n zx*vE)_&!K=K!6qB2Sr^FIbKm8MB2%{4&~_p8Ho+7X^J*^RJS_Z>KsdxUVtium03|2CCZ{992EN7|fcp!ztN8%r3^@Rack z-x$yEit!9oM+bjP^>kpbVmyPWuOsivc?PPtgL%by2CBcaQ?^&*uc$5$d@VKpO4RF- z*ZEWY71jB{I=_kWSD}o*>Y~D5Q9U5wLv?|09nN2gIzh6}oWG*FLGYuBF#d|_2m!04 z@S>vbki4%kyr`&4B-@MnMAGKGDAjky7>(gYMLi>V9jXJ3zva9r)j7iYnOI(w>LCHE zRK7hHX=C_ys_%r@1l4(huf_AccpOL6f0ECU=Xp{6p&jyfstbi@!SlRCT_V{=)Qgff z)s4bhLG`1+2~Zs=*rJ}4Y%l6cNn6yHk~Y(7d2t}qPdb;U(|!;(I-}4l;_c}X8NLPdG!8F zUo^ST$xyv6%x#`ODC(BT`OotQsg4QOXJhgQ`8gS?cY?poorL^Bs*i#_k>?K@vk&fK z@xlIyj1M0A7sm%@s>BEVRN{kFM;h_LK2skdK3Kog5cpU912bSfpVYWC{Dc6iH!bHz z)|T5ae||a^z*@TFPA@#8Z&Nd39ez)Bspa3+e%T7^@UYS*@R6c_DfZDE=?${|PO4um z?Fm%JTH2L5o8xak^?rdlc4^FN_zV@O&b4emrRROj?Q`Y7pr7O2Gok-QK6ztYYPxE5 z{*YeZIi}ZFmFe~6{zH0w4^;H}zA?SN-ig%fd#0k-_ixDa@?d#hwT;O0>Z_9HwLvA% z>%7YO_N$4^^P;-$L#`j43mo#qvN~|cAw$x*$oYJ!%?Zrm=C{gY z&ilXj!F;}CrJUawzVr;;8R0memXGCKxJNit;co#HLVhyjB1^|;j6H6jC(YIA|{GNWx0{rcyN~2(RscVnx zH*Z`C_dPwZKd_qcONrBED;9+QpV26149a8}2&_7WEC5!E_m>1#w&6R0)$j~az{>jk zVqkSSS~>4==l3PttNw~Yu!jxYgT8HVHVl2aCIhR_UqbM^f72iM+bh-1 z!G0SS2&@|BP|n*t4LXkg>}#vwvv2lW^tu1rPQdE^+m*n|Kjs{;x@+AYSminP0a$e? zZwY*Qm%I$SyQ6XrXNj2^_MO}dn&G~EJ-?uDrF_={tM>K^7y9(&3ykr^pjWWJXMX1< z=at8x>A))2qn-HuYWK7UWSiNJSMj&i7R&)w;VoCH9-^NOwkzjyi_Yo= ztWxJyEV{i^? z*gn`(WgoOphJEng;9t#7f`2uD`Bxc}*}qC|zun3RzkMz9+t(W5w|8KEds*hU*HQ7? zpQ`xnKUMtpH!6O6>i1ym+HTDEU{ZL72~1C>gNmNaU?cQo8Zn-M>&eVvdNMnip3Er5 zGdLQdC!>}}|3HOjIL7p3sxdtoHU7$&dK1$VS#Ls(zgouXO;jili6>pS=%HngFk zqUSbxqcga&M;3|>>foEx!L!|4SsGm2;T_@NNS)K1f_-vdBsjWD^ZSC|i@vb{zn@yD zXdxbLx&wc^!(t4$$77BBaNm`8l-$@d(Fc`&I$wqz(W55DHL7kDu*$XF9K7g>&kKQ7 z(5JHCMGrM^0({OawE!9DHU+ z2PMbNHD?*%bHnTy?9U5-0IP-hUGTRfv*d!^{@8h7b!gZ_+;?)`Y_LD=D*#?}NEaK} z(NQZgF137|6@Mrn$BE_RTxIzqY8z{+l8H(>Sk z#}8l?QmY{FDOT|o?2l`LfmPHMMHA*jxF_x#+FHqTd{uB0`n=+1-7q;8*Ng8k#>(A3 zz@BOI%}usBSZ*e;%9&12L|LHLd`wY!Ml-Mp?F<39NqgEsV26>nhX)KE6{jxyt@~*HzZTr{+4`t3%Og z=z~>wQS`IPn;WoS=k)sYo=||8u!gwTsix+^kzl$ZSTw9u#eVJa_7(ZI%AA4x4FRH{YzItK9>u( zuEV}@JPYiLy*$vq>XqWKOTBmktoHdR`nUeY3ZM^H2H2p_MITmzeX8;fjB8@`%s8Jm zae*DMn%C|Cu$sNK0k8@z;sdNS<(z=kw-w4clZ<)1aIbrnc4A)jI@B0_D_Sob=7WFv zbzu^Rm=^9B~+MMLyUc8??pW-hZxOK0E3su<|>a3HOccSswlQ z?5p6@C8`Pfe=v)ZgRFUB2CVvfy8x>nVaI^gnoZ4t)zV?U!0Nia4p?cbnkksrkHEb; zvgyV-56qs7V{x-S(eNomVuG6FaZ|4eQkjwqBiO>(y(vUhQS; z)fJWX>Iz%0s;jJ5$C9vK<*BLcgLeOdebC&9eK0%Q2g|U1u#Cz+nCTDggUR7vy-cKk zwNAyqs=@rLIn2L0Y=nRHL&d*ZrQ%<$GQz(~Zol2t2*2G%#c%gue*1Igx8GrY`vw)i zeS#5w`%~t(4`P1%E)~B$^?NYZTjBZ)YTtv2p%hRuv;=*D=4S&U~G z%6Nu4jA!V|cm@OG8SXKj!E}+rGc0F3!&t^MbYnb2IO7?nsqhTmjA!`3cm_58YKIa0 z)to=XUp-dguk?(+I?MR0hm5~^qrzXEV*J&9#$TOe{8cdHubdfw6~p+en~c9o3NJd) zh`6&FFPcRqZ^Dtqor`4b0w1z{pPuj=@36Qt&zp#0ap(6cc@w(=61w>#5ppZ z?UhVt`z4Fx++{l34y;aG2-Df##dNkmsMLwu!Ro~EI1bm@PK^)7&MRZ$gKg%gK~CJ+ zhQ;w6-L`Nj;uHl~-Eaq$y5aV$Zn!_I8~$acQa8LZs~f($S2|s6FVm#C!s>>nWp%?n zSl#ebtZsN)RyVvRs~f(I)eW~`b;BRAy5YlB>V})My5SF0>V_w!F2Mh5^#_g7{YY+o z(VYKF^hJ|$t}n55;wrK_adTLmxa7zmtZYP`xWwiUCf0BNH^c|8GQT|~A<%S zf7=^zoQwm1fg_zfWg6l*RlGMN=H+r=065ZDua&x=lRvKj7y4kzd-!;V=J+FSa{hJ& z_?C4(KLp3y>6Pz(x#pjUP_zm+e)j{PIkQ+1aG@3*8{qd{TV~^L)8tY#Ax{KaCt~<@+Qm%{?GHg99f>1j^%lovOKTsEYIsE%bQTk z^P0!S18My=#UI~UeDW|#k|VUGcD#)+EvrRw_m834}5#qh)S4COU=`RZ};mP z3H)1RaROg$yJ!-gQI82q++@Uqi+H}X&Ws3?bE#sMT;R#=(&mO;V2UN?(%+_AVQ;AT z1oP@+n-XY0r?nC*+%|nb=GD_B%DIRNS(JFCmz$Dr<k#U@NM#OQJR=0)!`Jqu;%&QNZ-e6vBj2e%5HSUlSmtS|WBj(kOVaj=l z@YnP3Ts{wYjCs}W{6x&9NqHSHABujujCoa{(kRRgm#EROz54lJF5PpT)|Dm^5+Q4y@81&H&qG%VJ=4*Qzo4{J>19Wx3C3 zHpctbdJgQXTjv9lRxS>}%5zLt{QhjpYP4@WZW8ROhuwhH?W=Wh-0;^oZ@&haD@f(0uL(?n3$~kWkup0lpBd%HW)d}2dOk^(D zrlywrm?kZQncaIZ1=y+!Cw{H=wrg85(l z8Um}A_KL1@?`i(%&vt`?&(n9C(dW<}%Gs3-!M%XhP?I^p>TqZgU{$k1D6k4DaT{1& z%s3xdJq%Lxge`+2aj(;nRxe+yt$BBCemTesdU^k?S8mFVZZ2<5%l`Lqn?K8c*m~8Ptyk^Xdi8>>S4~yctA|NguXeC~FneQVAI!P=zq1b( zF=8Kl!1lq5Y#$6$*$3zUp?&b*;9seolNrg*$;AAjb20%*I46@FetRe8w>ui)x6e`W z+Z~wSUYPmqZ<*h|S;cRkXN2Egh57A6jqux3zXxO2c4Kru63a8xWjsR-#xs0jJi{!; zGdyQJ!*RwlTwy#zW5zRdV?4td#xsO6o?$NI8456-;Q-?q{$f1C8OAegV?4tc#xwL) z;Td#{XHes>ZW?jEoyVQk&bRZpv)cJ~9(U&F+tuREw;6wxhQ*!v`S#?9J12z~?Z@(+ zTdL$c_hk9bTE>gcRN+OdGhMYQEZ=!O%Xj9wYGqlz^D3sR#(7b$tG08BQXj+^UbH;R zcTVNoW7jKV>UmjB@k7kZuwe_nclx;bJ!db!*A@;)gYTWB)OVgeeY#FwvpuWt zT$j~%&cy0FXJqxA%dz^-Z&`ik4y?X&b5`GZwn}~HTZydioEjgDePYJM2mMyoz`XkY zYb55?-R6H`UbXE%8}sV%%st@VeX}aM_b&UY@09Z-qVA?$(k|y`0=vl4xmx-Af-ki& zuP%0s!T0IPVFBPUYj>RiyW(j@zwS*dYkc!&Td_ z(a()0H(*;%^WG~lEYi*roPdX?6>R?>3jaLBeiyI`j(G{JE|)2b_66KC!|q{r6j&Xb zr{v`Yol;`o#?+%vtv3<-l#Ho2k&=2c*O|WPSQUNI;6&<+RxmBmxQDf?P z8IwPF?Z1>iXw3IuQgk4Be9#yj$UhYyOo|TVDis~b!98vxKKQzE7I4V7D$PY4XY1(_ zSkF5@s|ybKS!pv@xhBu;b_?+igNKp_Wkl(WLIJtvrUy)VKd8Wz^cg}MOWE&j1sRLTRsT=jJc@9DO!K9#Iw%!!WUST zve*Eu8u!outL3Fn1FMaNzX7YVlQ#pat#y_9hHuA4pdO7E6>snwSe2Wa6ZlNn9SPgK>JnVjJuDN} zheDPOaNj|ZF$RfA(LpQF=dqD0W6IfO2z6AFj@%uRXQ~ByG^z*glJJ`$ncE-3G4OYIFrv%&uRvvHq0jr@I z(!oDBd8Op-_ArkERvy7h9(s$sN{x(RAzg6akoTtOr_N&=Y)kv5!0PIR?-*mp(m!Ee zpJ@VoKD3()JKg@H6(olDmt;98?a(TZ@waWPmjkP|7dGR*t^95Rt7mK8qMubarpL1m zEj|iZb!@Z)^Xg%mC%~%kr=h^=M&G}H)wQl=fRE3*XxM|tY{xY}I~Bye3bpTpKCJAm zU-mVSam{ir?<5;?Wx~`v1_|A--E{R4E!9j1FJVtm(`o-Y(%{YcXkdr8#{-bpPfT~!pe2UR z`d7RjeHo^Ib&}~{8B>q`j!Hdx%S6_rFT?85CxsUc{x8*CI?w7ZxiVh#g%Nd^Myu3a zs;p9XDGjT;l*+fqu2;tJ?GxHvM$D_2HUn}7Cmsw$%q#ohLJsmfYXFPmOki=G%-xhY zj+sgvCz!=?_OLik5f;a>W^tTGERHjm#c_OC9A_ts1+W`@2?LizBnR3-$V!Qc>DfpQI z&U;|j_EzfH?!EJQmuzp^QV;vW#v5As`?VS~b<$q(v^>6BYrTuacdNC>IoL zdCZ4^AGol2DSq!ZQ?l}^!ai0^Xs*nuz#+qi+Sad z(Gr@OTXR*xI~bw80IW{6>w zE)r z_}N&<#}yk zd0r1y^1N2vn2*>*{enla_mytm2(gK^^Pa#@_Qe4o*O9qVkdr_Ub|RVljV(D={py zT;{;1P1d!rM`ltqY%7${hrhj-O^FqjyBi9uhW>pB_wAuk;+6Y*E6?}d!kqA7>aCxO zInb-RQdfOq!|XW2uwum`V0Ajw8d%k?*cABmt&~$E=T!q;6s}pNSWVo^_Ty||)x=53 zpM6pJIr?mHoeHc>t`x_3J)V?+-9DlW@R{-W80;e*iCa} zg+1j${VA}jms!#4{yD4w`g7pC4fmAqzC`+0FPVR}iuqSs=3nh&{?$|F zUsYlL)k@}H{Z6ERHPZm~@|{bteCH1= z-+2eicmBq7iWabZ=iQ8Fc*S&zjLCNnWjaM_{M8{N>f>}bqCQSyb+*T``Z%?j&h|^D zv;9CtXFD&ek26U{XL}K=k7JC^_FPsUCn>z>rU)(0+4_CR2Hv&By5aEOI4^pH@uDS- z;6;Pp)`yR3drdh%%z4qGtiE$~R^OTPqIX$+XRADB2I>F5Q>pL#fYo<4se5*pY@f=v z$0A`2-`<+VaZV>Pj^oARI4fBkr>IICXCRB?xU)D;AdBNPV{x4KERNHV#c|rOIL>|+ z$Em>LI73(*XB3O$^k;FLJ1mZqabCi49Df$aNsSN2&MRZ$gTXxyDX~<`_uw3|=bC`{ zVESX`hImNNS;jB0=S?|?IGXu`Qdqn6FGk{hFa02gPQLql79WG%>Ov2EU$_3A z3E#QX9xC~g<*b!;=Gl+cSaaU2zp9tl)Y&V!nb*C(;afPv{t&F6yLTSMeRpnoqm_TV zaHc8xJafGguU{4JhjCrqRTuHWy1#tDIlQpT3f^z_;RV2|lkFkk6S{ID_y@c2I>6+_ z@NKxSiA@IB?&%hzpX;0(VT}2IeF0WkX9WQ(rzx{xSIjaW_+%bz556MZgf95K$JJG6 zKmV1I57pwG0oU*HsSfUYzxp`z$K;eh`nmPiV%V!&<;1w|y@>=?4~nM6T&mT4IY|`2fFXeiM{Vy zXfD{-oh^Zn$Ldhn6OKFvRxW9k+K$>B8Su9UO6~_%Mo!$q`-6bhmT~F8Wfjr|0;__}wgan0SB3+tf+Z^flaf7yao@UozT@{_ zEtLH3UKOfijMHaC1FIc<6pnO3lW7?5tEBtW-*3eSK0@g(d)W;d0%Nz*2muqM}RG7{@>HBTj0b+Acp#1|IawnPl#V%M#( zi|v1cb^iHIC3aJAbq4%x)cgJLC7xtEi~BZdlm@o@R5PsqOSdZVuW7|+V_eA{$0?u4 zI8Heh$H~p&IPNTtxy}m=1BnNl~0YDm{$wyTVnp$b@jzFdN=D7eqX9lbWm@%Er9uOB;P*F zt0(h4F(2+{YzOh>Dn3 zW8OAFpI40N1$##IJD6A1K9vDhH)b~nRx^7%16JoE#{jE4XO;k~_HSDQt1Wg)p1x1L zAl$3Q=)1tm>bN)hR%>H<^!c&RS&U`%{6QG+Pun4|vwa^4Ounzo0jx$Ybi?nnwUg2Q zYmTkn#C2KUVzs%SD-%dFt@Xo#ZQGr{m4SY=;r3#`gTv;|gM?EVH;b*v`< zs{qSYz)D}Q6RJU{&L7Rs5dq_%yUH_4xQgwAvyx#SOb-95Z6f`v zTFk$y&it!G%)eU5{HsgMzbelBs~60_Dx~6HJy-Fs8XDnWC5PXB$cVTz_uCU2cYem= z&ed4ld9_O1In0Q2ee;ZnJEwjR#;)zg=*bwvGi+h?=oheh^i^3s`gALmdh~f!>d_Bl z_2{ixJ^CP4$K)HUNAJyawm&hQ?Y}&gdh~T!J^C~am3s7#SsjzbjAxjoqO<)=rH;uN zR*zndzp^uezjCN}3tZpFHNm^3{}Yvj`py+EzJo7Ri`92t!0J06W%Zr&F#hV%=?n*C zAJVnGgX;`fz7W3CdX@Ul8&v8$4<0-a<4OuIIz5rR=m*A&wo~CnLl`eQkMW|>j2G?B zc+uXB7fq+ai?&PxFM5>mqN#j)>`XLVvaeRDDm!r zg_rJ?EDMkj6iX`f(M+&v55*Q1}?fR~$>*$#GITPMU{3couK`@)(GuwPqLLHoeV z1!4P-xr^`L&TV6GUz1*WVE>)FG}iEXHx=Dov$dNsuB7O<8&lVEFw<|Z&h*2@xolPZ&eyT!%+V;xPCQTrC!yx+UxOq<{Q=Z z@;bra(qTThyLFez|MC~$s?$-@*c1XDw7>{>0Qbhq<&w^;BVI!dyRQ} zf1^@I?_Q>&=ueeLO8ocIvl^I(CNK8ly(p7mAh7BfvH(~u-d_@2mTmY>U^P5L6tJ>B zzZh6ujvfF^?)<)ld(~f22==gnd(gM-&4vN1{dPI=zBC)Q1!HWpFa&nhBZ?l{)5Q(J zLG{cv8CZ?kdIarlnk|Jr(y1Mu#ie3ixUb)nx#*AMG9~_7z-ur1yusNPD>%A)R`rlZ8@II@%l#=xaQ}sn-S5Ra0MN{(!W3e(OfAD`}e9)2cqA3|4 z3?5b-ahyR58(=-p6LlYP9INR=u=llEuheI}e5r{>`T&b}E9;@h1f^!g6pw3IC%cvz zfpz$0w$fOiOI;4fo^@kWZ^U1|y7Yw|esN$$d9PJZvm%Z&bhs;ikGV7+?L!|ngIzdR z9$Y{FJw>nE{#qUM=X+lzkFS^aNbChC8o$KeWPh_VusZW%Ft9poZn|Ce&GLF6u$pJJ z1ACwD$p~QO_es$qpHpNV?o}f42e4}VWfuC@D_0F*HFCxajK$MbiCa~9rPy|c8NlR( zt`xAUQ@sU#@7{bN@QG|Z8n$0H2VDPC@yfWb)rbM;k6WM;=c;r}iErx8XGZ_4e`pG< zPU|KEE3Yd#fK^n?GGI0AfszkC;;SF9%J{7buK7Gz(Y;w0lm)nbti2L_8@ap{`ux$y zxtuG!?t zA>3*+lX>7gv!q%&ziCnM3*ghD*_Cd!K+y~3D zeef3B2Y;}A@D$qzSF?R^7~2QmvVCwX+XsvOp?xqp{Hru2mHjt4;?B;@ze;S}`L4?O ztLiL|UhVu3;NQx*vy` z?nji0?nmnPVC>p%%=e%%Jj0Ht@!(|q4y^tYlZ$i>8#XwIWWl={V#R@+ivOmsqt5qM(|ewM(|f%jo`1|GX5$D6mgBdRxp~8#WsPLl87%!U2x5vI=#_;WF()u9J>+`i$ z_}=*(Vh=t!^3)Lr`Oc327=yKI0;|K@fz{zX7xMt`IFI8rWO1C8ERNHh#c@1Y9A^=W zdK598K}VZmUZs0F5%cPNH!Z%Yf2_^6OU^y-BEvDSzE0hT-?Kk!sgrHy z^v$7{_TRZTW8Z0QT@QQW0`K~;r*vw9J*#NrkFfPO3&CC!-WlyjIOt(_UYi!zpK>Z2 z?t5dP1Nw8PU=8$nnni2aA8$wQl>Ia&kG}RF(ycwibZZYW-P-(2x3-cIy0x|{y0u4{ zZtZ0i-P-F((5;=`#u72Ffn%#+E?wPl0qfP_+g%VJELbZ5bIGZ14ft9;*5$>sSbkZ_ zTP(KcB!1WFdf=IQY|oGR5Y|B9yDG111O8-fp0=>>HtYm{EK8Gg@U`aUu*UCg?hZnG zkCyJR?>taAwEB^Gao?ct70@4TW~I*E)e$}66IN?_8}CJ8>rIql^(LyYdK0Zx>P;lJ zuH{`;Z^D7qn<&QWP0VBUCbqJA6Wdt5i4I28o0xC94OsDd6KZuWo%?>nysDGFFy@l~ zn2q55*5-D@8kP5cPt2u|%1RxyV>Q2G{(NYx)IH2vd^MiY>YEkuOpm<$4f{l$`C)QR zIOFRKfBWS&7udUh=`fcr+)}h3uN}{V-!Jy^K>O-fio-7c;>kXF{bN2~abN#pN*&}Y z1C+dv+z%B#{8Z%~7+2wW^^g;{XZm=8nLR57HeSpeO-t3ym-FqhV*5= zzu}Mm9G$70mn+bC3;LY@XmO0|f_@aRx;1$judT{7I3#4+tE*x&&qpo z=(!%_N}X4+tB5i4DkayeU2MG?%+{++Y`wb3)~n8Jy_&|>tCDQJD#_NX(`>zJ#n!95 zY`qF&>s3@D*Q;9WoJ=%3Cv!0c&&i}@+&L-xU~>3ZT%W-h|BCA~JY)IJ4~@uoe#!Ek zrzJAqnfq5oz(?!Vs!!3{B~n>wmUMN?O9A``vlY3&dU7utxRV-qe@+X zlB_PkZdMmytV&&g)bGLAwcVI{^v3WEzZlQ(i17@W8P70=@eHjP&ya!f43!wq@PhFS zuNcp8gz*et7|(E<@eCap&(M|e41Y78p%vp9+!@dCjPVS$8PCu`g=Z+pcm_58YLyZE z)m|g`s~kq~S7#W1b)NB8F^s?3&-knBjK8|Y_^a!TzpBOfD{IDIoniddEXH5mWc*c8 z#$R1w{8dtTQI|yWqB>TG*Ob-a&CTlY-ekO}9pgm{GhQ@^@uHg;FB+=Ci-zQw06+5! ztHaBA(Fj(Dm-C_}SsmU~zCCumGKO#e%<2!WQmH@4<2dfD{$L|kf6#QCQh%_6O8vnb zERJ)U#c@irI8J>Q$EnZi4_dPNgRU%&W6kOhUSx5c2P}@Wk<}l3z~VUDS^dGKD)k4u zvHF9l@xj=6WlVgqSBZj%rDmAr4$h&Q_B!HUtF!cRh`nN(G+B{c^!OHhxRV8 zOST#RdkXmcb3YYLZ^w!Kb+S$Nc}4Wno?rA3zEAZ5oxqKk$=C&Uw>~|=jXxOp7rw!t z_OQe6zkNrc{kMfmOm;wx?6`hdprQx+{#`Zn=f#Fr=<~C4N`7CkCJM3C81r?&s_B5M zz^b54H^eDE4*UVEBHt@{yPv~v0;^uNgMrnKi5B4VyVmzaAC}}w1AIOn+6X(cXI-ql zYwNzlcrQG75BuwCCH^wzP9U)Ay&w!&)$+~&K4IfyrIx5k-G#s^?Z9B%H!AQVu+m06 zM?bwzq(T2pV!SY}m)oRfOWjjw3Gnev+Zr*Qvcr{p;qXnf zaIZB}@1PH>HQwmw>o?^v#%(K<+Pl#K12JBo;)7vVh*t7btW0x&&k2h(05`KWlhFQb z5l`6Kq51GE&MqsB`)bZKLVq4+R^q4Yo_nMJWgXuEtNv@20IT~hr+}4JbPI4<{%2nS ztA)Cpz-O;}By9Uvir#Xz0hyHN7+fFs{p=BgzJ1BJ0(}lVSSd`tkM%qrVT}EbJ%*jH z{0lePCV$jqVDJFT z`ZyM>K2ExR4KZ(%QXi+$;4O$dPYJk-HOk{nKg6AfW=MxM%H)+2m+xU7>4Nt$oZNj6@P3u7k2vnNAW)1 zUy=p9acGst_}f<2%Yjw<3rc*Xqu)(DyJu_OqMubarbquni;u#%{#2bfYa{9p=4AB; zAG7*{`IDjk;478-gYHSFKlrC~AXhVe(J@S4v<}l3EvTX|`jF|1u1$izXiy^cMRPEH zQ3KN#eWs!>`ftng+W&|02R9@`{$OexCw9d(CXSP7*HrlGp=CqiCzSnG0rA1oo)@sT zFPUnhk?XnV!R@fK$=>#VlsbIT95_P(VeZh$4t0h=5|ofB{qtsF)QKii$a4c#IGC?Dft#{oQ6D z9`AkpTcbzsuBzG9Rcp^#Ypv6{z)EQ^bACzv+h??8^I8l$dF2iC?Vf))`aE!qF|Zny zbspn2mM?<6=!cLv`g{^cpHAZF z={~6Oi{j|(!oQ;V+qw8xG=F;v@vnZ6{OyV)fBRRGzkLZy{`N|i{Oxl|{&wnL(LCF1 z{#9N0?Tbm>@KRDYoXu~ib;Bb`-SFY0Zn!V08~&cu4If16hWnAa;jf6_{)MG(c!LE@ z{flFyZg>}#y5aTz2dme1F8>F)@C=r|so;%=%U%Iz)m1$L|DAm+nY?p4+Y58)Y9Ngdv0lb6B=7)f{rb;2{q6Q1ESslz)XI0XNl z_lcQv+U0MU_@Mn0JL11H8-KNn1Aj&HA+zyUrQNg978`#>^C5pE{MAyD5BV+0hb%+# zAv+TO>MP-|Xg=hPEcuWxO)>;lT=F5;h8NvgLtgYH;YHuF@S=SPFFKjc7#(L0(Qyv5 z=r~D4$B{b9=r|=r$H^f&&OM^zG)ZD~oRvh!nMZV-{zS*gB|1(sqT|RD9p@F%aeA}p zIEqBasn-Xq=M@)yFkos2=!0hVF8CiUnsW!5PRf_rX4OxWk~*Fqi9IoF!2tZHUZ187 zZKzK)Q%_U$>BGnxK!S!6M zus*APV{&gc_x}sOJ=Lxy_Tn3tnf$9C0v*wxg33|QYaTsj;%Zx6D$ADi=SOxLu(}+3 z3s@zTd4YQmo!tU~Xk_W8TG;9VwAjWW~# zK2thhhCRVN5tzg&DBwM|j2eh`y*xglZ(Rbmq0b{tdt(kfe$M3XJ2|@?IQG*ZQdfpXx^z&tNWsEWG zavHGe(#!?py*|bjww5E4XYb*N55TJDN-fx?N0}Tl^S_Dk+m%)_c>bNS3TW5f${hW< z``!+Ho+r)Z(;I*A9I#4Fo(!z!Nv{W1M>E<(AMD*V16W0Lx(TcUnJ<^}N=QdR{X~UCZkvubMqeUCRWP zx|a3z2dh_HF7*fN^NUtv#U;OJef(fGR$Sr->-E8EthnfdCT8pKzedmUAbhH!9~}2o zKSfGPI{FUwL03;XzU2Cn#z$ex_(fnJX=E;qeaGF_7JEv?-TT=4!e&Nd|2ox;XIq`*+14O= zwnvaW+kgF{Jll2QU%jkheP?Y_-#MPtcaA6Zo$X0|=a!_tvpuQrtU&5JYq8XKe#TPY z`5TA&&UN9p*Crn_TRr-^uEWbEA9DTw!Roc0%l|v2q8Q}OTsgpB|O7I!ZYk7Ji~XwGfXEug8|_g`V*dE1K}Cs z2+weo@Cp&xS9b}2)rIg^&k29!K=>;@;jfkw{wkR8 zSEYo%aw7cIBf?+#6aH#8;je1Li;k=zFFKC!qS`FHXer@Ej}czMl zc+qZz7tLegMK`kWqRNC9t>@dT*DEf3d&?X~$9cs;$8jM#P6^R*?h_qn28)i9Ms%Ef zqT{3z9mj|0I6a7t<41IyH$=yYAv(@RqT?JOI!+SNan2AOM~&z>{aAFIe4^vj>x0$v ziiL}y^PxU2wHk-|xYTMK>f=(YaZnyP z8Cvtgs1D%U>*G?Z@i||(6xzhCvvI&`ZQt)da2Q*Uh2sI$LgitBXt3+NL_#~q%J@VsSA)r z>H_Q~bpgiykJd{)Me0qQBlRX;ka`ojq~638Qg7lqsW)+j)SKu{>P>VZ^(Ow?>!m&+ zbxaPDIwo&P9h0l1j>%9`$7BSlWAcpDF&RYanAnm!CjX7~Qng9FRBxRgh?mJA^-?$Y zc!bze+nvu4N3+N<5HUEt+%s@}E2)>dH|sop+o@R?;)5Li3+ts;kb0?H>Mo69sk?NH z)LoJzb(bMmuHx=RaK>MqqqJufcxQtu3JgZaRvp4VlEv6xG*9>^fhtDHkU zueOVtW8Nmr(m=bkp4XpNFLmIjaKyxUsoJ5>zq3xqCdF)V7-o0 z?YDE$aq8m-tFht|?_58xxX-KKSuZu0)Jt7J>ZQt&da0MmdNq#JOI=OsrFJ3pQguna z)U%{s>M&9-wH2wCdW6(VefS60OJ&;!m#$%Q6OEJ&Mof3Fa>h0nuYu2Sn$!(<=`|SF zCl89oZ;J*jfgLJu2A`oe`(R!8S6u3)Qvd2CsYm~m)JuIp>ZKMF|Ehw;zX~DsQg@p> z04wTWC9?Qee{#K4>bH02t-^b6aHS*0==i7;?6JgeUq|Yto+5s`Jn`H25Wl@Ssh3(b z?E!qe|CV~G|Be3#|Acy}uL#d@obU{^Ug|BvGmIuY!+63oydgZpFv2r95}x6|yIUJjZV~>fgz#5RgugN-{MG+bz0});7d0ciXa~ZJMiO2$o$#WW zEWGId3-wa}G`_vQUTU@9USBV@8i%pl8X(tD;AweL^;IdU>$A*+5}S)YXw~C&s^tE3 zGfm`olDA4iuF=V6R><)?-FY-}LKeC(^*~p5s>qf+N5yTxUWq+RD?SJIO+NZ&8vFrv zx4q#Q%aW%?;CmzGOkk@UTZkpk(RyT)`l2+)6pZD|;nR0AL6`2Bcw3xidLDRM%Vp3VbSzV9o5)dGWL#GVY9>{y?S<>CM{-=+C&!O!V{k?vt}}cn5Zbt`cmW92eX_?XxcIZ5>|ZN^rirLkjKQY0Bi0wkb8o+`II|4z~2O zTwrD2Xcn-Vn;r$Mb|37F9BaMuvw_uuMh}3M{)Jdzb-9eG^Ly*ZCA8(TxgG5Jv-Sb2 zJp<>X&j(FZFb4+C--R&_i%y4ao5$n@eH_~lJn$sdmDUm*mhR5O{YC@hVK1^6fp>AK z1Cy^i=+OrB$9z*V`q^e?F6>lGW4vp%-dBK?NkJpbC5_=>!0Nk~7QVZbuDyXzKwwjz zq@UhSm+{QUibA}{QQE<1S2JH5__)2i4*P{VlS^E_q2?jUGo58y!46Jo3w-21<-qRz zwj5Y>d7y{;WA4bomMJ|3td=gjjCMZ{k%jFjtAajHP3izU{Om@IE320=^42O17!Isd z(q00q9S?kg)$${Wz$)e9Xkc}Hz7a6Ve-VkcKF)ZE>mx4sqi-wJ%`ryp50?)}@M+V1 zF~(^1Ue0%In z^!d<=0N84GzW}Rt&jNszSUD9~O`6C@j^6~GGr($x))!!5yb*{#Yu@j0P%`$OE%Gqlzub<&4tbsrOm5#853B|(UXSadAy;w#30^vE z=ZABFm3V3Z+BN#h8T!g*P&aF0;@O4?|@a#b3b6UGF=I4l;=|m z;PWxzGi=RcNAS!oZ*(x{6;>`myGBJ!ZtZnm}f;5p`1pOPNH zs_fYuV0BSZc8_GvXk1$htRgkDFt3D<76PkvAG!mR_3cy8R;R+RxITdB&XfNo-T6Z; zbmw0c=cV?=4VXMl&IMK}5zSz~cTB{4T$JFB_xs*Q8fy!UcmC7r57y@wt^Rtrs3wl!JfZJ9}NCQ`d|^+2b0M@=<+Y^gSW^&_>Js?XURU8ME1djWFLG( z_Q5@Mun*RSe^r~jwZ_E1(j@*>A5w3ENBpY*;$Lkg{#68ve|4M1zv7a&wl4hk6ymq5 zaq!zG62E;c@!Ojczg>y=?IVcazKrT)N;Av{AV;TbLvp5X`K8O9KvA(-$CI)rD?B|L)-;Th%;p5Za! z8LknY;V9u5h7+D4j_?dm2+#12@C=Vwc!n;7XJF&63^?#tp&a-tPY(RmYrp{$SMvye6+`%|+VG<7YsibvAiQWQ z3oq(Mcu{x4i*_fxXer@EJqa(mh=muOLwL~w7GBhdg%{mKc+q;ky?VXk!nZ3C9jDo~ z|E%LA5FN*l=s2T@j&q(x$LU9OoJ6AI3?e#?2hnk2h>mlB=s3Pa$Kewl=Md3x`Vk%H zG0}1Ih>r7!=s43^bex_<$Enu`tLGILeK2{_5ooEh8gIdoDyjNG(`k5I(X9H3Qc^C* z%)uu=Y4QnnWZ>a!$vukqx`3k=J!5KU>fCD~l-zST_Bia(MH9hMjHql14m0?^9Bc!9 z1#p<-d8W`*6Zc=6`33w&^MmQ&p!Q}TM!VU&UJ4|?jSiDVpTo8*!`_k~ zgmD$;I6+Hw`tAcR>zPS&@X70rMggla#z%lpMxsA>EtCAdIg)lyE?{&?X`@DH*I6bO z{miiJk1@9X{s~yM2#>&c1%c~e+cw(>eB|bsg4>bt8;9#&#anQHTzLTO!EeNP{*(`W z(eB+|%h4a{(@Z_w-8W*<=dJE47}uSbg}~~bb_2|%K7&>RtH@`X<`NuI$8-liAM$0P zQlTe*AM1P&SeY9aqTQ@jKY-P#m-3i<>l?O({mLf-<2u)<2lT<{yR(7S zuH`b|NZSe50;{$I_W-MyD+_>C+s@sAN#{w7F6p+f64$>E4o5#HckP8Su3J+Etg@yu zXGf#lm|C&r@u9$Hs()wjgmc{o;d+x@QNU+K_r{=i43 zLj>%zd^z<0>y#8=C4N*4tdw_*2UeQjz5=WCK5c$W@5=adqs1Cn{gyZ8oUv>X2p_Ijf)){=V;8-xKX6{&-`e&=s4=?ao$lGVKI6y$^s}?GJjS@zkU6JOG1wmCU9{B!cEuQH;PYeH zOW5{uc*@jMTle4_unIlK)FCaLWQhKJ3}EzvaSs?i{BW~Vz)H>gFJL88 zu>x2<@NWSfCnRbUu(~rlA6RMc3gSuLb)OY(z+|N@qf5@TZ-zNG_|0bYElJNESc%2b zm;+CYnVPWEjH5C39hc*PNo##Rw409>Ubr5o#MGi)C(CHi12uXcko0rtJ~y;$ywo54 z@imM(E;hy8$+Ol#nu%5eH z_5eQ9hcx6%-q(cNg}`dCmj&kh-G?jCu5w8m^wZt#66`*1Os()<9;(pwj<~gi9eq;+ z_+0Yb4ZGvPN5JY?HWNG0Zfhg__R-se!0M6wIkY>tzZC4gs}#`ZExVaI!oeNaVO)P& zJufc0vjyQrYpOffh8O)+@i@^g8kj#djmO~H~q6@5ioFg!w`!2bS>upbXqi;?-4Dsze^f`A>@-3%qoQ-ei zhw)t4ij|A--F;1L0gZl1v^B1;7p%nnpIZ!vJxi-Ko;xe!PwDpQDe((xeuh{Z4(DkY=;s^f(ebDV_9M%&q`k)or2Y;tNSQq}) z@LKp+cErCrO8l!B;$K}M{#7U9Up*)Ol@^PC^_<1O>c_#qstdpU2=UvEYUsCbBYwM( z`0a;@-~NR7?LCR#zKz9iKg8mp23#z z3^Iuf&!A3thEl>a%qKj9KH(YG6Q1E4;TgOM&+vip400X}&)`IO2AO^g&+vrs46%e~ z2q!$lCBid&XW<#n5}tvLzcS&#Uzu^>uPQn4SGx#*)s661PK3XTBmC7d!e40;{;HJl zSB-}={M9_dUu`G+)ds>}r4s(?DdDf?5dNw*yy)s0@}i#zFFKBe7ft8Di%uZCs2AZy zWmtI85rh{VR6}0$7~w_h`S$AdiVNTVis(2V9CVyTM90Y`I*v8baf(=UoIym#IYe|E z1ES-!B07!@(Q%xKj?kGc_+~yFpJHmE1`Xl@F1p4{;Y6pwC0TOoZ)y>jtpmk`LJ^ z?jf-1) zPUV4E^1h5s{D4*G((Sl@Ecz|(zpQ-P>?^@wC*fgitUfaiBmW6niv)pi#H=oG>S2Y{8;rZQmVp~}QvrZ!jzO!}$cKwG>I z9bx+<9Y)_ul9mH2qYfIF1B?F3!gw8gvSB|h$OR@Pn+Aj1OoG^1 z;uRb6B;Q4lS0SD`xS0j!ym`zD^uf!o4f^SQ?;`B=XBPsiZp~B=NuFuepe1arKqfEf zYuVkvDy`ciVD)}jC)^)7l+mCwS04mc<#9~Br%f|P2cKuHfIj;SYYThZr3j2`T~S-? zeLJT*04wuO*MU_(1utNAYjgy#+OXUSShZ4T&P!}rAB47o@16%%J6FvBK8@_PF~%Qn zjsUAUE5>5HQVl#|>r9;te0n!-0*+lx&lK0!MlmtJ)=OOQTfb5zJim{1TeQ3D40EPp zLDW$6x!@|Jn=dyh1y)?@q9fLaldlFI@pb;^#fLKOveDLDZwG=&mM6c z`uX@x8tjaT%o}@vGvU>mqJqa<5XXSN{E!utsg(90QI1Ool%8KF4l<;k)zduELkB!>+;ySeNWO z^u}6h@qQiV^H2*C@BfSPY@a0g`kIq`eY;7%z9uAJUm?lYNAqm&C3&`&vE`-7;x@0S`QnBrhwW8`Y9@d$5n>HSlU>^C@ z5*p}mH6Co=aU!fy@B3YcJ*Y)<*gn^p+>bAen6nLRb>hCwXU%wo>A%43r z2fuxZk{tFyHov_$@!OS%-@btO?HRM92z5f4T_1ezm|6omd zhM9zC*hYAU4TNVHLwE*0;TdKTo?!*y8R7`fU`Kcc0pS_C5T4;9;Tf_B&+v`#46%e~ z*h_eZH-u-fBRs<*7M>x4@Cnv-bR0XP<18XNjyKV9<`5m{7SVBSEh$PQx zY7me6rThB8UNXxH&p-0C7uuDbIS>80dM^}dyl7Qbl%uI9VvB|KBQHOl zhW()9MvSZHMmOlr=RH;cs}7Hqpi@kL9uKTW#GC|HFV%y9)rw66fXVm;`_R_%bS73Y z)n+sLcF=kV#@KzA6y`v|%8eMWU_}({MLKc7$6*W)JeY;qR9sgZydC$KPhACjc~4us zi=h_>pxvZ$KlG;}I2?WM*FF*UQfCc}tFTu-u#!Jl39P=HTnVgP%2e^)`RfURPx@Rb zE6IGgH0&gvIp~HV-ebsHAGCW-lhMbQ#h*o=yXwpYR>|cG_`joYQxSH7jSBE7ev}Hk zYyaE8>ebG6xZfn3iL(o6oCB=m3X-+(d}UiBv}<>bncMRBW}wf7 zU75VHnuERot4_y5fz<_-m^z!B&0GUA7Ig)>*9R7&o7F1oZO4&`!e@>%iaO@7#mbcV0;9JKM6B`V7=;5d;|S_q45TGg4bA# ztN)x`z$!5GHn4JdISp9NYa|0dLAtyH@R_Li0JcLibAD;Cx(2YCpFR%lroWZNIxKX^ zgsoxv7xwpJze=phqjkQ)z7{48&Gg-f4X|Yn9_uQ3cX#8M9OfA|5AoY!`UwXl_Y5ye zL%Z%lCBW)Q(rfh7b_bIOAfw}AU^TiwbDs9T)FWV}^?p-iJOH^&bYT-d9Q=mW=D{l?Jdg${PZo(^F$$udzP^ ztPEV0aQ}`M&wCl1IqQRQ)z7QyH^XIK{mJW9 zZR*j}_3BsEqyH1~i?$~9ChR%Xo1pt3TfK=>bx?1jF8r(i)qFB_?YGzTyy$##UX=Rn zwK*>uz~Z;p^t@>O|H10Doy-40E;TguV@C-u2GuRWJL7wmotqITY zi0}*oQrA+K)U`|`buF_>fzltFI)h)tbbtU|j z2H~&zvhY_|2!EwZ_^aCRqRBPnMK2LvbO8%5n#h3{y+C+T9^plwvGAhH2`{>Yg%|C? z!i!1~UbLQXul@?T@a=v?$LYX9$C*KN96zGt$c<-o90e8~Czj=(axK;)>ib`JR%qfEpp*bVwJ`DQz*dtu)%_m2`u#^T=L z7Vhu&W)JMuflKf%iW&u>-3!Zhpg-@u52K&k^De>m`D%x8?M!P5eehk0G3JuS+JnGK z>VgZj)XWG*moJ=P4zA{Qv!-~ysv=Vl)Ob-Au7{NLM?ZgLHpdt><|YHH<;$4Z+qg6K z;8Gs@Isue!Jz|S76o4uqoO-l4gMZ$Y*!M-0NG(oC8TR z&j(f&(o7xR2c!<~$8@F+Zy`$^-kRobuW23L^(23LHp$;k>+qVB{OxRYc<+$>?T1MI z_M0`#-@e%C0p^wJ9!1QhlOLnO`$c@v!x~jM$PIJpa=fyYWd8fv-pBmWc4XpV(*~@= z`x-yb5brd+=M&iTHU;gMJg2XANBG;GW=t+M5cKWJ&8`^ZfRFcq)%fxNjPY#23fLKyLDmvH zH*{zZF0{>PS6n}|YaQ-ytU4R^*|qw3ex{}n?JnIu0sZmX;f+3bbq|Ft%x#GN*Tw(A z2}F0M{|DK0XZnBeUM>C)=GO85!MZ+&%q8A=BRPlMlbl25k#oqM$T{S9Ea#BFkaNgU zEa#AG8t+WcA#=%pMe}UeCjS+eJlh{RMqSCb(bFfOLdpDBAwx@?_2GQ_1x!7b7)@QCq~2PEd6l= z>$#j|08g^sE=_X6dgyMw2m4N=qm5vTcEw^{eW=Ogj4fCAazOH&BNj|d_b2`J(5-In z-iY;ll$9AYFVCf(xc(}Ti6wVmz5>6sKWdHVKPh&?Uf^i#jsA=p8;X9eTfxMMx2;sc zxVXgQSduvU;Utc}D~Y4`C2{mMjmPmO@i@In9DPp`N8g9U@ z@+2PTGl`?;5|6W=#L=fFPsY5OC%qo?>S#uL%&Y!gGcd0bI^D#)y4i%OU;HX!67biG zD8xHDSEva)_ev(-1@Y*2(e*u*SB=oh52*V))Dh+;YVLw-&t?~ zzy0pZR`S4Z>&F9(|vH$FRDNIC-_%1zvveZ{uNt( zQK?^)UzE+is%yWU#t*XPDN11R+iMd)7{}tbbBP~ZP4W~`zrFtdVD;M0MIWpw&oG$q z3~q#Hka_vfJi|-EGn^(o!%f073?)3nWWqBP5uRZ$;Td8G&(N9h40(iSP$WFV6~Z&@ zB|Jj_3(sIjcm^B7GqCYjB^>yxTO9bSy&U+fMTEa{CH&Q7!e7}C{^}v&uNo8nDv9t{ zeuTf8O8BdDguhzL!e0dw{^~p7uWG}KE~sH$%WkBu<$6-r(wWq?>__Tah7w*horM=Q z;=qeuCA{c<7G885OI=F=scTu!w^y%MT=;fPqT`5bsN=LII?i08nLu~*?-@7<`qzBN=O&VSDjbx-y_bAG3p?$33^d1aYnp)1HyY@i zE%~kS(U*LQ9ifsSkl3vQy5axnu`BoSUwg50DQwrYr$Wj7-(^;UCwDH{h3gvozTp1t zZXt@%XsS;4~_wzU3h zVAVY<8CaE8UI9N7lMi zM!Vka7#&>C=_&fzez_Fp;ln92F|Ns-+Cm>}6mE~XG+uBGSmiaF3f;MFUO4bsp3oQi z*NG`@&{o8cK(ux18$d{M1Rn=iaQw;GmvQ zG{N;B0gG|}muP3$bM2Jy{G)4``nGT1^hAGTceta^AI>wnc{2Y2uo`wb2v}Wcnhvbu zj$4EGi*9@YSe52T0iRVHGhq)h3j$WT{VLGzk{wKr+%jb*E_-3gYGCy+Q3rG2XjVSP zD3Ur2``rFQv1DG|-{=LbUS5yF_0!QzuIbZ%W#P96m6rmmQ~iU`Zt^W=Zd;ZeMxQGz zFT*aF*c;=jso#EtMR%S{bZ6CC=+1V;Z?CED98LW8n(EFU_Wx(y`M>eJ=xq+?MQObA zuR1SU*LjL+nrEBlDRLxvik{anPtgjJr>LfRw%PI&)wDiNE=zsqAEdtXb5h@#OMM(# z-$%48FvNy`_tL`Nm)*6u zm1K<#2yDue*r86$diYvVh_%#HI~e=5X1+GoVYippVZT=Q!8+Wcp(eDL0kW-NuT5zS zy+-9z4s4^hLOGTQw%L>9J-tP1)(FR26U@Ut7S&RcqY z0akq*Y5}V)OLqXPZ7r>VRhPSyfK_@AChqc5@6UK<12-nWcZ-f&fz{TMZs=Ry^B=HJ z^<{E>TnMnl7%MWZU?2Q0>?(OL*KS;ced|Os*w-dAwX=I)>4@JNKYIkM&iZ^tyCEIg zz%H3#1bnpbGkE|`_sGJyYRb3My5Tjg=f!rOA%fKNqURZwl6qcmNjkOZ%WIhka0u?1N@xA2hDxeeh5Auh{Aj zp5#z}Q05oaAEf?OUHI)INPQeG`9*1c9O}2T6A zTl^pwo?$yV-(JGPGlUVIfu3)t`rs6DzI`J(-(DMiuo(w^aCR;9L3+NOjlas`z+WZ& zBL1q3@K@&uf7OHVSC?7%tG9%|x=Q$~^Mt=TLHMfz!e6Cv;IAGL{_1z~qUMAbRjLIq zdW-O)k2&z7GYBtwfQ1+RnEIc2(R#kUdcESpw=W_(P96sxXDo}3vzq8Q#Vk5bJd2Lw zLv);>M8^>k9VeCOI2A<4DJ43N7142Wh>mlB=s4erjx&nrILA5YIQ9Bq^}OPu4?c-B zhn8wpGzR?4lBjq1Pu;D<3TUamXSPA7m@#z%w89T3&7h+-+Y66EJ!{`rQ5+6E_;LS_=JdDt!c4=|;Q(R$hg^&~*IgD4I(8nK{ZF z_)PTq2s^6%VLbDTe-~&U{LzchhrqQh(9b7k$6*WmPuwSYexnQ~C)@7zOdhI$TTJ{~ zQQ}r$Wn)zgtk&FOa+E2QG5M@oc%%cX2N&b z)X?Htm`kFH2G9p{V%7kw>0z0`r_0It;A&R?)eV>|%-n{yjwF4-b?1Fy=;vP(7;Wz8 z+NZ#3XK@gCxtIg1U=NfD1wO?WI)O{sFnu7ddo+r|{hmgPV9TvG!Slm?x&d1suW9Jd zI4^(nImn06&80UtMgN2J_W-M@tC%`yE@S2btLbYS;k#QgKnM7Q>OX}oJtPy)d~4nY z?{V9$$>_tERZY;(w;Fq4+dg;CmCUR8I?~{p9(`x*!z~&DpNwhIu>HQD0#@C}D&n^v zraS{ymzFZzEZ;X1?FLS|3#<+senLMN+BZf2+kf!JxY+!wzC?H4N_6LDEV^?B(VcyX z?tGr;&TRfwIMJQWiSFE<=*}aF?o9owd&Ix0AiDEgqB~C^{#6c(fAx&`SJzl{=h~d> zn?}y{4VlcGmpEE+5AS7C8$H-;=lUGTxxQZHTwfqL*SDRV>+|v)0d7-|oa@`N^gQNO zkAf7~7s$E3Y;vxzn8Z8NbA5YvpG2Px$+^D&#(XlDIOLNtBzd;EL(p}sS%V{)!h5BLeucV}Zg-?dx@+C+2V zTI_ww1NT@;*5Q~d3#=rza_8=tx2-27W8ZPxSBdMN1~YXK#&zw5^?CK0GOWYtQ&%07 zJTuab$uV9QAByj8f`4b|5nk?ta9w6s6n?v``(oH5oJ{fjK?Ay@-Mm@Tu`ewC?vFmp zcZh&}me1ts*KITlSdC7P0#>mHI|D1@{A^$~snG*qrGFt7Se-0m&f#46aS3g?Y;Fg8 z#;kqlTk631=<`7n6|608^LJs4?$PP6yXP@^K}%!%0V_|{mDUn$7wyi&{YC@hVb8G` z0jvr-%tX6Ek2at`Mw^)T+h%4i`kZQMjCai?Zi41-Z%^{7)ii&*kmOa9C3)49NM1FX zzuko7RnsDQ)gnkmd65r`58^&FEvPZ!8>~CP=WXOw$*05-{8aDF|YbK zlwv+iKK>B4n&C5R$^2>kU?t|&yHDx39`x5&+<&R(dD!I#)?!}uYr)j5xEFB({nU{V-43Ud$JGCCHvs+e`y~a$YCFRO!mPEWFK5w$NOMi z_*b2Ok$)9M{Ht=}UrpxVU#+O2f91!)zxtE?cDDM19;E(Ym)}@_u>SvG_1ezm|6px+ z2AWrm3(ru~ylPzH2Wy&FjZ6F>l>MYsiZ#5ni;OZ?9gjxbW@TM8~nOp^me%7CO!kqT@Ia z9Y=xaIJrc}SwnQ38$`$HM|7NxM90x0I!UqUQA1vN@IHme- zDXEJJZxHjC=xZ`IE%=gq z`ky)md-$aZ_cR=b3p5(WcQnJ|+du>x?*dt7XFfN~KeW9f;nc)M@p>jhrXsOpVqJY)K;fH}w zV`YEv5BHxq0u$w&-DqobbVJxJ-DA+t>HV0P&_ypl0xQMW;TW&p;|SOzJtKk7sy!y) z2lfSx#r3ofTX6rfp#iX+JB#uB2kL!+?KtCQ=+8i-5cD&`Bo=n*K4px{NwE-El|@K1 zbLmhpu-a*>2`#letQ+uY!;^(RI8v(s&rE%6hWDs`75s)#yhtl@y>f#;++SOcxN4!c;|j3-Z`GcJ8vTK&Lc^@bEP>G z?|hlWJBO2a=c6RvIh4dZ&nEHCnk3#?gC*X%HhDktNS^I0B+qt3l4rXE$+PWE@@!YK z6!fy$7B@u5PM&@4hoi%b+{M*B<#v%OkMIJ>9Sa> z!+q?rt{(sV1ncmDz!NW^w?V3pZ_1=@XW#KimG^}2{YTi7nd{xxC03N(eQ8BAXB zYnB?or|;Gb*xq>$ft6JQCWpCoi$-|Pq0R?^mANrfUts5|AHeF=OL_EpeZ#h}U-?8} zT-`fM!>8IW(+N7xfO{Fhs`#4?u$sW139L-rb%52p5GMaaPvg;OE7Ng1u#&sp3-}~| zkzvND8V9V5%tRRD@d;wst*&+lK6Z(BV29}{!Pd!f!Tr-d>%!jF;RUd|yF&`?-f60h z{@9c<@AuLZCjY$jvs_@cdYA^VnzhUZSQV!h0jr}o#{sLheL{hig_j+$nw6psOtxQU z^zIJ(PT{(_a3cEFb5CpZ`G9LKuo9*)H7>WQ4aazI_ZtIDinVjto zL+tU}>-U=B`7VX(Xg8#?EBa$6=Z5!NypYK&+w-rRz^bCFF0eY1IuKa3o%$G9z1X`1 zSnX>U2dn}b3)V_g>HZ4X~o>xaw&+B9j>v^%|XQ1`yxzzKb_2}#8RrT(~WnTTx^-4(AD+iYK zss~xGQptLCkHdO3lEZrCR*Ut@mF$BT$UZpnH|~QXmVGdvWgqNA_Q8nXxDVEae-&Q~ z|7uDN{VPA>Ux_*RR{|FQ>H-J-1P=b!6&1rVO0ruDoc2+t5qcm`U}%YlVwp!r29&p_*WvGG@2 z^7XYM`TBkpe^t|beU!hV`T91o@K;eR{1sdL;5(A9uQt4>8i~i@!i&;)9EV>NkF$pG zqBI_d@}doE!Ha%MVB&G=`Szdd6$idOhUhq}Ip{cLEIQ6hqT{q>(Q(=l9cKyAaRP~s zqd{~W3!>vpB0A1`qT}Qf9cM4maaIx?$DQanuZWH_i|9DRS#+EiM8~Pu2dn257k#j3 zTsLT`d4)5<`;8vm0Qy(EAECz8Pn43%IltRfVt>k+2fp;Fe^+RZDPNPaB=@+k`;6-& zG{bn3>$>5#e2J|Q@dW?n-MR;Xqp<0;3iiy2Ap*($s%<)fqdU3cFI-MUPC;`_|1M`HRs-0v@2Wo4OpFPB#%D7k!=I}!P;<)i%oZK z9?9s=`5bg-w)JW|(Vc(QdbOsG*Q;2fJJa=wE#7%4iFe*W;+;>EcxQS}CW*v5%LXv< z&h{+v&RovP93tmr!dcGA4CHW5rVBYIvx&qz({nNoB;MJd#5>b-GHiLaH8Qzin3^dPn z7Rk@hh$YWH;(&bpZ@WU4Yl5F2E>K7hn*n3$TvV z1)%kvX^0iK{@B-4`kun|S^Fno|FR#^8oI#R zXZx^c4Ky8gK=RDDaUQVy6_19NF|3&k^oYDHJzVcPWH#=f`<#h~@?O^r&!4`KId5|- zqAU8-B$BCrJ><(o^gra*4eW`AMfG`fAb~I*!lLC}1_l_z1AdP4ov=*7<#b zNzsB#wAIw85$yglvFKZlC8MEq{Qe1JX&D}Y@mdG2gKghzBQQ~%V+yR4{Knz>tl}-W zKcPGT_SiRKJb&hgzIaD3dM!tPnw}0pKM&ks;``FvRWL5L^X>8(Ox^HOQa3!|eFdj(!=5qwh!R<0O*$ID<$Wy$6Y-k0EjN2S^;fFNve)lQ{ZAB#yoxiKBl^ z;^^~89Q`8_M?am^$GJe_=;`@(HeU1r%XtQSa-N|-InSW5oH@@hk?^ANnLkSKqe5cPD$Q1oj-qWX#pW{>u1&F~`LNb9=L@ z6y|^BksYv0COPewtWmq1-r(E0caJ&C(Ikn$}?`3>-2#zoWt z_>^eehkd_nC!RTDraIdCnmrbMNE;)Ie&z@4hMnr*2CRH$GBtU7sC)%(ezMZQ=gt20 zuw$O&0jrG-n;n#3e!!s=zfD@a30R#`PD8tDvDblBzj&tZ!!*r?=zo5TMHpB8ysAc* z%e?v%)+-&B^~!~;R~lr!;?-ikx>t+!N~wVlzQJbKw%{B5U)l%Df6+cz7yi}F8v0iT zEdG@Z@voeTf7P-U{?!5&|4NyIe^u9hyA}t(eLV-ieeiGe+sCu`?e+f$tJn65u}od9 z#_zPTcb9kEi2pdX;ThQK4|=oI9~Auo^#{4|4BH9MKey@FG~5VUzJ}}k<^K+4KGUbK-QEOeajL**t8b$gAuOovUQvCJ zjc@-|I!-9jabj6?oP9*c*-UhtJ4DC%Ms%EFqT{Hu=r}uxj$=l29BrcG^d>rvH;ax_ z%t6Pg*9WWT6&HQ*NW;wJ>bs?+)~h{0u2GkZvvHPtK~_U!$vrYQU7)4Pr9Xzf$Z~h4 z#t!fX5{0Yo~TJ=1H!{yvT+vyK)HrpAPhdkSC`P+3l)OS8w2lbr~kowNE zNquK~Qs4PAsqgGS>N__k^_>$r)OTLRp}zA(Qs4Pk)eSe5mcsfOA{d3W`cqg6uJ@4c zg*7>CvJ5!MD-&a}hBp|`#1cBhh`^VgmhBEcb9nk~*u8@lVMkqY#{J4Ry0A;N%JKhh zftD27?L4$S`lHz19DTm0Xb0O=D;Mj0P@*07zRK^5a5m=lpvKS#hfiOJ{qAAdKJdu_ z&Ap-NSnclxObVPBKG`5h8tt}^-+;bFed>cgUmRTltP8=mn zxJj&sNV1p78pPxNuZ}*jm&~%l^N&33g?43U&O?8$-U~!O)uu5zi<|&`q8-=Kx0`lh==0{shPjgQ zy1rpzzVsc=W4y<7F9Q=b#ks($C@mh>#|M_;{te%mIJ;fGzQF3l<`A?y!ge?MBm49O z`uX{43G8oMoPbsGq$3Pg8gGG>lByrDYIs}`I*!XRbKq0bIfrs(TR`izWiA5tU7$DFok_gKeO%0DPW&-3t5N_F`aVX{w3)i)MZSZp{y- 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

6w7MhEXEF@)iF=@{ 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

hC#Ql0Cf98 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

(oE}`}`R7c-l8{ea*=Rx%csq=UQ{lV)R z{lN(64?55~0IEO8+^g#FS6mHWHG?wvE4Hs%b>f5Z-=*+X2k_aZ-lM4a=$%wo#l}|! zEdSlD;ImzwIH&eBQ1hJ396hzCAr59T?)!aQe9_B7Na zUsaZOHTN{6K;AtGdm8q@o(4C1Ps4uL)9@YkG(4d9G>l{IX%N?7Ps0?tew=_k4PF|1 z8h*l_pLVe4XFk2BVR*qpytIaU8kl`WR2^&vb_2C4$^Z9#sq;6jBnW!f zTjVrHF1OXP$&%_6d?O1;VX(m{1vO~)c#pK3-d>44G{W{5`eK3okE3Vm z-o|FP7?1r@S!2gCJ7MPnbz*+8_VFkgAVD+ZHuUtsqWJ7W&K(RhR9 zKd|15Q!wX)*RfaU!qGX&VW?kxQ|qrc3v3!^f8k*93wWNK{=DvYQXQA}UM}pK8zh?d zz*0KMAD2CuyiC3UQ7HRdU#Rpp&_nOPsEgeg)dPu~Wr;5vITpYB-~#qxR53pM$~^qi zenrCnTH2de2uCD|5I!^#!=icD!+;MdQ zz88F*Z-cM19DJSKz}Gn*e4VF&uX6`o2xh%gggeEBqeN&QB0hgJaRzTlSkGxgrn@8& zuZNEz;Y;cokzSnBESu>T^7X8(ifJ5zp3RNtA}kHh#amA4;< z(aDszH=`__45d#j&%Zss4FC3u^wj&o*SRczQOehu?Jv5Y_7|n})MfdLR>qf6nbz?U%oS4!YTYr~(RHoiwq&V%uLW%TWo-z%kWpRb{BXZ&87 zdsUYHYANVm%eq(Wy#SH)UI0daMePNk^jFc_E^`kq~ zk9JT$4nzImL;ctR^+ONphdI=b%IYAq-+*Z9juLd&fteME-40FVh^~)7I4XNz$LDLOG*Hj zpnywE0GA8~T;c_|N@8^3WwVmb@1U9@y^ zeQzX8(n}NDxn7gx4s0#6^1dYhp4LL)S+Y@?`EE5bH@H+WY}G+@ZLtpKYdRXWII{># z9@-SMj?G4`L*Jv@Vzwfml`%-jFQL^=KV2J>55}CVB^&KiLxb&eZ{8L}eoJ!tJ}^dj z_oS;t*JzkDkxY=er1w|c{T8k0ki|i^cv+ySn*)@?TwSp{$_UK9^A{A+YK;4g+kln& z^}tS@3dFKY98qOI2Xu>YkJX@s!8Tdu>o`99TJe_b(dDHY`Z~t(1;X4=OHtoXS&}I| z9!Y)2a^mZkAW?^~*o8W$tv#{p&;rQCMX86&y`B=!a zy0~wfU8w1@B(x$QmMIh0ir#KfN_)TUB@^A>B=-kDWFPTr<$T+0-aK#l$fOmAAfVA!j7Z(3B=Y*!HdY$dqj{`16Dp_#;y< z{N#?bB?xW}UuJj3Az-qa)loBk#2zu`p9IDbsz#9#XV;KUVx6LreLi5?m_F`9)F zEA#iM=zUN(Xfe8Fj|btib2V{ts21^XWDD|zXADs?!k5s^SVFW9mEk+?iT_*QxvKk} z*?ngPYriwoH=y=Ar@($^s&7E`oh#cvXaM^MH+nsmpMm{@ZHn(9j6RXlmr(k|s_Y-E zXg|(&dcRs>KvP9N?8jL(OCQzTkCR`{ew??g{W$D-=d%3UBf-BtV-{cG3;ylK8vgCn zymLkV?aaJdRq8q8FUstLEYDw*!MlvVD66bM>NcrhA=fT{o z^7QRGuy;xGUS(_ST^da9UCM;LOU+q(mwM8Bm#P~d)PBzD>aW=PlFH&dKXe;XQGZa& zpeNbBjQ(J4eT^!xcUct2H4u) zqkim#`jM$q~RMlK_`I0$hRsE@=z6WH8{8AAn0P04})% zxWo%^Np0Y(uo&EO1lh!T>Mtw1ITyEaM^2334(w9wFso0RN8j}rj7EPH4K~6&9Cdvbi@j+o!UDgSqB~5CFqbZ;kxm1$ z5XFN|R#SaVZSGETYemjfkd8QRifzk(O&tu z?>;1Q;7&9*Tn}k+Ee}g_FvY{VF2*JlM&UELc6bAWBCOS&M)*tZ!)SQBG&N4_5z?5e z^JoQ+@pV4iJytk~#)$-t6Pdjk6i#dgIPr()KYlVyd~g6K5`YuO0#1Al@gaoxSPJn` zmG>xWPWUCfM`h9PQ7OPD%7ITD1$-iVf9(Z$kK(|46bA26QNSmTh4-i>@E(P9&a;;5 zY_avanaWLQj_?l=7JUA~g-%05Jw>xFlH#qqo=Q7?)|IEdYOkm-*G5`@#gKdbv(dB5 zj$(aK6I9FeDeen>XMslFdEhBCqQ$LTEbu~3rTWBVTAwIl=@Thk#$eDV4lhTSu?2J) z&p@9@=`vhFmr>Dv=XF=p#6Ga!dBmYW`2^VS{Dw0hX=r=^Vf4F`C#*t;!yHRx`<Kk47j>@m^wZ?6r1(c1VPH8~H8r=Cmi?W4})GMvX|IFJ6Yuc!$2 z72VX>SH#?_vgQXf={b7MdqvIBv-ett(|avX!CuQm)?UkWdaq@5;zNr&A2DLZ$25)j zC{N#BnGU(UI3GdlklFexMu)7azp9OVRaxF;{26|*@-CadqVg`&$0?7$V(=AJKTKHl zqoADnQ4@SsSsf(kI+($#gSVj$hR}6TAL?KN)WM~!I;ch0!N*Vsmq8t@je5@Dk|i`Q z;Q}ssTLvzXv2aNu;1WL?m-Gi*G81sg1i&So0hjy$T(Sai$vze?sSSLUMx3=Myt~dS zsVLbNc_-oyZDGny{XWydA<5OzdAh=BZ`wVP+i@+4VF#5ou-$jr-D6Vu@x#Xy;M}d8 z+^e}Fn|lxOcw>!T%3F>UM#Q4|dxYqVnWc#8j3N5*LAG+kyG&&f$H%hQJR9q_PY^qE z=VRQ+gK^v@b~=J)ZkHWBY_push$o0AW`#)J&p$71^*C5Q6F(u>d+wnealI|FJ7ANd zAZk4N({&e`l4Ok5%MoDSPmZ9|qXJNE^DU@qYY*huf^Nw0!PhN+CB|95H%YgvJB73# z^w7pWzjeT8(1^%zZV~QI}Hyreo{nV?kXgJA55o~o{IjT`6GAF6E^5M-A zbng@=Omr;@_56~IrJE91%;7p%u)783P>_#g9?DbW#Jy$UL>n3>-llP42H?bC7Eat! z4o;i|IB^Dz6Au7RWWRs3WATaMEIx4r%_lwpKCu~#PrL(s;yK_Gb%0Oo34CHh;1k1W zJ~0^h#IC?6wg5h{BA$8>-FNN*edl}7caDI*b64m)cY?li0rZ_OLEkwP`p!YncfJ9A z=O@s2?gf449OyfLg1++y=sUlHzH|M~1FXddc(z%uoVf*)Px025Ci14q8#=|Iw}fP5 zj!38N3~5NiNLg*__Ker_|wFQ2uPb-gN-3rYeMQ%d+q z{OT!4es~?sC;9`np-TsJ`jVE!`aC~EEIfgi=ZjMvza=T`6Sjwa!u6`KPk8H{@x(MI zbDY{ITpeFd6!zWyfPHtR;1 zuMrcP{#RdFewK-F9?ZS!1o!H9{TUM9+$NljClIGft%*aM-3db@T|CC59$uaJ_!?aw zdC{&dLdAzc8GZnH;0JJ-_5+~egYpBI3w{9AnO9@>T2gV&?AtC+-=4^tSF4SDRh7J3 zmfq(f_crs5)31^_;;a6KPzs9dL=I1}+HzT%xt$ywnzO$zs4IMu1EF0hgo$ zE_n{PM9*y(dJu3)6Tl?{0GG@MTw(yYq%+`>^MFfg179`O?PS5-Z(=nkRbX3^xrei< zcpc~Xq0juJX;}h)w}XxsW)BeMY+NYjG|!ME{+J`X7?vvg6ig~&^ySKhjw|IYU-U;V zpW2Ev-)VrH8ES=I3)qdgD<>iGn^z<6liDkXWwcXHe0j~{V7EA{^QnhyXEY+YMayis zhw3bLxYf|xvGi3tr-afHQABh@$@Gq%QjZh5a;^F<@`QakiUqMJm7jXGR%rJwK_(bF zp`8Mwkb(`#s9q|L_Mch@4SQ>j&K;Gnyw)L4jT5Q!@M7UaKHx+NjT0+7kH&BwN6I*l zzVvx8xLuP^Q~{sp1bkv7%_ma0JsJ4KuD~ah-H_+0|{T|eM=KhgYd z4)D9}fZwf(4xl`JVr$R=90nZ#4myDUV(+`7sz|o40TmNwkYEH61d%L35eyhmQ88f7 zIp>TDsHh;Qm;)+;V8V3!;)^OWraux0xI%Cda`J$~&2c*phu%;NhK%iJ@(7qGQPUiOPR4Y}-;{^OLh zMGGURte&6h4c=#8-=}FI*wl|RPoY%Y}YnE3u zfaMiMlDr~smRB@^omBzq2m$cmJFIgY{Vd!EvnrU{@La z2fwqv$bUzFoWJ8a{@cF?@3$@I@4@?Ri*eP7?ce=x>tA(Z`*#ns{ks`VZ*Rc#b`Pev z?`C@YWTv+-WqNyF-j7f0{iyTn{owT(TKPcYw|CB$--}Ap?zWPt|?lQJ7 zobJEk`@-q|s}wfxwq*0}yI=dSs+0X!-+t}CqU*Q>wb-}Tzjh<83#5s-@&sI43>Ki-FU7O)J;Zq5xD_0IWe5rWA;g8QT zpZSR!{)L}dhWUxBnV*okD~~1SS02kzmd7%V<+0?jJeD|?$CAqOSbSI>%YU2iJSnTb zb3)=u$IIOZ)m!y(OT8hbD%3NaXIek9&VhQS-KN%yX}YG~B5P0QNhU3w|C_ovSNwvV z`qi1|Z1}4#j{mQ^IIUS-98Xpkrvs~tv-wwDoSUpJj;Np5aAS;#MXZgP{vmy{8KtJx z3G#EdGI4dZUb+3g?J!Rb`w11@>c02Rb-3zp?-&+%#3{D$0q3J1SrEC>{d(vBP(QKn zAL=L4I@?uQo$ZIL&UO=4XM4)8I@?C9&i1Z)#`ayWkEy#Zs+!{w|Nf5prf;3f41MD4 zQ)X089*^s*9y0|z_wF_{Zv89xA*Y-v0U7p>| z$@5;#`Z?{!*WaCTrJhTp?E0p4X4mf>WLLkZd9V8Sk5s6)F{IqT-6!+MeER<8qoYuekJLW4n^X>wcKgj1@O*`rQ z!TEp4A513sgHr29UiP<(^@HwjuSM36ysm@A|HV4k_&@Bw`a9Nh;g>}H8~y4w)33N+ z63_gSTf{Gst6%*c{*@a0$F8%U|DXS3{@lj@57>XWUnem4?*!(4p1{oC+a@sc`*sM- z{Xc=ZA1E;Q2L)z+;a-86f4EOz<|pnKnEQ(YbH7nw?mr65{Kz7G& zxt}R8^EYuW^E+`a^FI#=8}5e+%>M2h1ZMhWxWHV;6qxIo0&{;=VCJ`iE2eXTE3S76 z8?Ji_%=J%!**F4M%+Ccs%-;p(`lztyI;p_i4;Gl|rg%o?7Xx!0RoHMpSzxZK3e5aw z*fakbnEBD*ko(iZp1p_QipA@}75B4+4UgXo%;We1vv~e?fmvKXMqnP_7nu9y0`qvk zz|2p_SYrM<_+fr~tgzwx0R-lLyuf^afWT~@0G^TU7l;?f`Mv>x`ThZc`91=H*?t0? z%k~xET(-XeT=9Jd!k*2G8wFJ`&Ypg+s6v7_;-b{;rm(z z=HD3tvwg1MihXy0ANKtL%=f@Q*%O3+*JdaG+Grs}v9jiY8u6P{+VZ-YY2+Zpe2+ZmefGbv~09^6!JYmD@ z76{Di7YNM!5OBr51Hljb9t7s~4TL?fb09GPP868cJpe!KyAhbzK@c|lJ5pf&Jt;8z zu7o}Nz6569nc$6oZwh7fmvN! zJR|e(fq9)z)TmyGctV$nCnEshU-NF zbKOW_rXRtc=}5p#Pr`WPx{|PG`-H(&db#i5%8Kn97B+nUu)sVIMc}{|=fD-)R}8MW zE+uSuKC{3)UqxV+-wdvp-UEJ^eg(|)S%f{$`x2Pu>5FY!}FvC z=K0bBk8RQn_Dl~0X8B{_isz9Dd#00ts~$}?BE|8|9V>vV0cTc#pJ(Izf$v$SgRAT# zQQ#_N##(Uo@=OD8rC*~bxcXUh6S#Wx#T)$ev{((?dYAIs@O#j96(shvQ z!Qwvix(+hkI9{Af*TLV>zvB9}c$PooUopKK^O79@sv!97OlOBL%Jg>3?NWX_*Wm?M za{P9#(+hjvuR>tzw=?}7yivcM_p=c8s_#Js6LP)>|4yBO$2r8`i0TY1?tyW|>L&tA z=?uKCqWB%EGq5^~7#loZB5ZiwMS*$!MS)ozM%c4>3NWk7i1~`wXB75-m43zIGSC^Q ze#Pq$iEB~)iq$3BFOJL6uXx=eVV_t1ipPJ%xxCJiz^vX8IAL)iU@85opy{G49t9sY zuevCUTj6F=Dcpq7O5LhaX!{dhHcW4}k?Ssd7pm7|&FJ9QwI1bw<4|}#> z9+>T$$6Czy&x>|Eu_5_rEAU_$rU_!IKi>>aU6qvVD+<53)QB=zct3LySG1 zw;}L3mcJqJ7PYyEd9i#BeDCnQ4q?OdI|QD|_EQSnvw5q10yjFUiTV7KW<%h$Y`>+j z8PE1z3jBuUg$Vr7I}`8D0BuXm)vjz`rm(rp_Gb#5yH}~(drnY;Jw+!}6VhdET?I=lRb9^E_yQS>6$zv5@;t;JqyGMcD8>X@PmZw7@KH8ul!I8kpr# zgMXe+E$rDo;f(^bIy~Tt=g)}aye^NxygrY>tWFQOV)c69U-7yL7b%VeauOB4r*}iSOcdYItbWvXCN!ajwAc1*3N`YBjN^r&UguoTg7ZNt9 zY~Q!Qyl$ny>l;LaD^|x6{IGhKz%Hz=rLbSl>RSrDi{%>$+^b2G1c9$RE&?`W`^d#{ zdzOzRaC?@QB=E}~9bnJuV*)2-)&YmSUZ${T`{=*N?81iEXBW5{tA{GESL@;!OQ$psfS((C)#HTC4OTBzU_DkhRp2r#Z%W|Z zo~$~+uYYw+Ujg4_`})Q48Z56$U^TYSU*L9gV_?tf!2`cI9RjWOg zyW?(yt9X`2ChS?B3FfFN_uqpn-cM85Y^WIwet3UPah&zp1XnLBtOHjygO-4+?$I_F zOS})KIG6R~1XrvtC-~Xcdl9f*XXX5C%JSF5xt&-Zo4~8>ZSah&k0&ti=P7L3usk<` zN3eW1fqz_dgFWl_30(F@74Scg<;e(pmiGg$##ST5qT=9H5VH3{s>I9y|^6LbC*7Gd5dOBqu_|YkS47e-HzZ3Q;EYC<_6PAxBFzZ*3 zXJmcrfqDOWVZ-~_3(Wi33*6OM$!+Je8*nb`a}Ta8Sl*JbXL(rQYQft!;EMNE5H{;r z-k-oc|4(4nZvkAfz6-m>@uO;=!4X#%r))R?1KJvH#d>Qe*r`f9?y0jskn zFz??WFsuKAXKc9a4)AuC7ba|YT_AyZeQSYPoom>K4L%Lb>Ry8@UjJIyv%ENPrEfF= zTn#T32(B8k{6%5U^B4tYeQ3eeCfCZ~isv^9o5$DpfU8G!FMz9)S-Rk=-00KbCnKQD zL2)jx3m`DB10pc52O==53xa1%t*ntKju&D5ZUyFjZw2Q4Zv|$3aB(iHF97UTXg#>% zbwz|d%TokbCC>zat2bj;fvbr{D}yWZ98KWq3%i4>l=&9mYRjYQ;A(ll6mZq~;$v|2 z`GhIB8aVnMxQd!l6;Dwp}z*XB$ zw%|&wwF$WD@;wb)8T!2jSIdUg0atD>o`9=%mui5k9j}z%CcajianB*Wih!&7Q`7Lg zv3}Zk-T@8$z||VJrQoMZ_3FT1%x~k|H>--`+^nwq!Ijp|J-DuFTq#D4oN@KL%vZdg ziFg^A^{YS_gT4vasQK$^t(m>tF;~2U%V`-od|W9pv@y#C7GYgRCAN-YMSS zNSrHY9c2BFaIVxk_`CR5Y5ybt%8vL~1;KCEC4T$9Jo@b$WccmviQhhk`0a%*{cFEn zN5XGceGe+$R5{;+f2YpC>#c}6g!P5PHxBC$2mgW91AzY^r8DsUapHGaoffR`tX>N+ zuiGMQcz-#8c^wylS-&~hQ=Ng;cZnA^ybqnga`dZY8Tu9LuL56->Q}tqintcluUP+; z{o=SB{fhTz5%#=Ki@>aI4xX3Q&jIFjbc7A><03Hc=OQrc>jHbKU$H(f;EL*3`K^oc zy5{2Es4mLtoP#Slx+t%ME`BGkx+t%gF3#n3(*>rwD669m-lTL8Gj>GG4iQ}vuSDxZHyk3_$m(}gsCorqug}IB>@dD=cyo3#}>m@L+?s?PuV1e+8d^ zCV!CE2^POY^9NboV2mqPKNxctt0RnYMe_%FU19M%|Ev5#sric6FBbR4>lh0xCqBsQ z91DA1?^xjch!3)Q$#{=g-DF^1KUrM&uZj<{I*l8}Z?gK!&}VoZW^tU?V-}d#Wfqv# zXGYA6)oF&$!0R;&8(z0rU|zpjU{=Q&V~N#shJVHCIs^0i&cdG8c@~)0dls10eFi_Q z{xjAxUI$v(@Osb!^SaOiGtUh6tWGpAs~3$qkk^eC_N;Cu;yA3|2x1ewj;65T{YM1m zeMkgm{YbzS>q`Qzc-?7X!~2v7%+70`q#E0<%6R zct+Om1eo_d5jMR4iNL%MiomSSHSAfvYhczN1^n~6pTeHiF$GtwzaF^aefES6ua7M- z@4F{3>%WIM4y&7u*aYv#Cv13MK7n~XRDoHaKFmw3J}UTOb++S#4e#G4Fz@3hFt5KY zFss9jXJqxbp%w7D+`@*}=N6dP=@yvv|HHYgZa2i5sfD4-$tPi!oye_!FtUfrnVs*m7533gr%xxlQ>Ik;l=&cP3>dk)O&p9_0l z2VG!Z4_#nZ7ah;Y>Z1emI_biO*Gm_e*G(6g)lY{#tD_Fg>ZyY(URPb%=eI8U?H?4! zVRf)EuG;mC#JEa&6pwMWq_HdF5m_sYf#=_zi*a?kU;EvH|8OgJtbGPkvM{bf{Yusq zHfhUSV~%33%qWm|Xx@y#Bqg;dSr@=JoIeW_9tw6|0XA zu6Uh%VZ-a?3(V{03(V^0gDX}?AN;U-`oO%dzOd)@^#$g2_6273_VJ9Y?mjTDzb|Zf z9e#mbSlx7iS^ad_vpVX)te!gf=XKSEJ*yKBuFekl0Iq7-m4I)MIW8FdOih>oJgV49 za5ZS?I&hVCYYDgtEoKX@f=9IlR~__Mfh*Pz0Q|7N0KmLIfVj^VtS-I4ygt3atWG_i zu}4FH;4kqHVSl}*dIMo^ICi0nz^tA<>{*`yVAgK{T=BjG!k*Rb2UqvAG&hUmht}$W zD|6d*;HPr6dBCBkZiB1bxEyJ+H6r2d=v4yW<&8q%Q()(=!M5yf1?IodBJ+E&}_zcZ5CbmjK*lhb6fBs$+rQ zVSN<9)r%=5!PS+-D&VU6xNz`ucxw>w*4mH2Rn>sK;A+g&C~(F5Fo=6Qe{2M}QeP7T zuBz4=1b(Xghyea*PzPMa^r(q@=KXoaZ?ZnUct+N*7nt|$6*d{Hf3LtVSRY@3Uk>UH zd)C(%nDzGsSDRR$UtzBrR|+QNjH`k?U-AAK;&00PXb3DdU$Oog7#rWne07t|S4I-^ z)mAcJO(XLa@5>>sE42>tejUPw_w5jP4Os_M$U0bZdBI%=dEXFm|Ga;Qze z`j=piVtq`2sei@$nuupKk>Ou0ApRBaeEblmubJ`=kh55d3!5hXvm? zFC_L~(ftheWd9ZG*MfOCjqJbD`V;%Fnv(rjbU%aYdr&cIWgCoZCQ=&7h zAv!}BqBD3Aoq_ku5$E#0IRY;xI>Q2@Gu$OQ!$+bs3?w?k1)?+jAUeYjqBHRRJK|b$ z^ef(+2IMj#K@L_4&d3NcAh;_ea?C{yzd=Ao^8tqF?nO z`c-+NU#*bPuL6mF)t%^9ypNE$*8fTuW&Mfvi+hmLMS0&MVUr)aDC>KKIh^&22A0xA zReHPPuOUZomx|-iJTDr@;r*Y)- zq=XIcCnYfNDB^^Z%Sa^cS>O1e@bB1hYI$r9~Cg`OLb7#@cvW+tKx$S zCgkKh%gLjkp2zy4(RFD6h*aPuzG#N^H{G>YJdA*mFKnXPvm*!b$@$a^StWiG0%(j zy+_QeZjlX$O?ckehjA6nTCa#PcF?67u(_WfH01t4t)L-KJ>LKt@}`~7@ZPofqFGn` zPV$?kc<+kVEd+n2a!x(qdp%Pz{?9K+#5>i)Sr5mH=|97})7#f9QT)D5z*4+-2g+`N z4&$Ee0Gwr#qdYgo0OuOqJcoC4!PzuiH|??x=BS3pAA_r??&{Fn%?8Z@Kb6Z51oms4 z0In7d4h2`4bLWGr1Cb{9UbZu946f?+3ISKMlU%^hbDsd<5}!)pJ_oHUif143tsA&1 z=WK#!tbT1g@KUFA*f&hg20w2m%m&_^X$SkPh+e=4%V>kc=J(3scUm9z09R8A86Y-s z&e9TGRcO8!{Iqjk1Dtj%2V6ZcN(EP|(v@|by!-b7SECO4gR4>dlE9U^=}hpWqZ_KT4F~*Ee7$G*{sIdpfk2D(x`)`kz1Apn+ z99(@H>W=Gry3Yhxt*SHzS7+yU2UqHQGr-U1KF5J0bgE+QyEy3!xH`V)8OBxS;9zjI z=vXAUvJJ}yR|#et!OzMDkAXY99s{ms)*OU;9&;%kT&>Uw#xsUIKM#CZ+ulWRm161% zuD0sk$MLk7Rj@aHod_J?Y&y7l8ax@-jsLbBTpd*#2(C)c@&i``0}Iy{*S*m03Ama$ zs~)%tUsQgNu&KAb82p45m!rT{>t4sfRjs+D;TssfPXs@^!ZqW?@7$@ZtpDtDY##2p zjpJ=_wO~*bp7E022jKPNI=YD8=~;9fxO%v%5b%wv`(b}I;~ubs(=u>XTQd~by|R8Y zxO$%91Fl;93;|d7yO#%7*3P-$N+;VBT(!M!2(CW9RMxjY>TnQT{RqDXt~C2r0ax}> z7r~YKc4gm(+nMVyt}Z-R)|<5|{|;QGCdJ_yAEs&^7W~{^H4I#ZhR+2*j$Y+}-JhPo zxf82=0=C@|0j@&a!ogLB)pl^zceg*diaECwT-h|&1y}0#G=R(B?Fg=}H#Y@Wez}z} zu1*g=0kt23_;;~D)uOMXF2JbwkE{CAAJdBkN!lvJRH%t6T@;$U68oAJ)PC66@fkJg$Q$$vU{>PppIg zB>&2Z_*b=we`QSktNMS!zxpTn?KOzszC4e9`$rjmyXt#TF}L@Y@jaN|Is>gI)1K6m z$tCq<&Pmjhk)tzoCiP_6NaWGqBK2hIl6o@kL}#FR^y4M!$;i>K{;GZxRKKeC7xkOy zPWnwOCjBNZ%jh>TndnzPW%QfKZ(YOh*3I*{*V)Pa=BceW?_&O1mQ$hM>o^L z=|S?HLr5J+)~_DlL^DYp$Z@0&WP6hDT&SEizMGbiI*@xwzH=*52eKon1F4D+D#n$Z zI@?n9+b88i|H0y<|6mHK->yUY55CW1|G{1o{RcbbL;pdk`V4yi$LfnF$*3=y*Zo(M zNdDkzl0QiIU&a6C`GcLv{wtb4DCJ*C_47(6{k+CX^z#}o(a($eSAV9TS8l7nrk__{ z57wLMpjcBx_KjXxm(e%fN$t~ zLZeIAG8DSsQQaRn-t=({?2pvG4y>i8thF-s>q4xXn~r3HD>vU*aAn){9JrdO*B-j@ z>7=^AwJt6NSI@kLfUC5KF5oKFu`u}gsbv6N)Z%4daJA%^4)`fDv=i`6_Xpt0$>uul zdEt>dINtN2vL<2rq(;y-oA%uTP8_ZzfvcF+?SKuBmxg`VW^3S_cP|sf-=fTvXSlAM ze4LUp@^OmgLq5)18TmM?Nj{Dj$;UZN@^S8we4J+_ALkj#$I&49IBpX8IIjoKhTh&j zq6PH!+b{Y-Z|~vu9Ajzmi&MaF2G)Sy-g$@`^!85EvoNk!*9yhBGHSIA!zkAPvkr*e9${xkIvPoNl@o??VRbU&VdM;vYeAem+jlKS=r#L?8 zLKy6$nz z`uc{5O_VyH0fPCSNZdoAraN%m%^LT?)tZLez?Iv= zqu{D$g{I)AgpWD!ov1)?mGi1AxQcRU1+I!{eF0b3e9JnBd${tV1LpIfsaoKtoK*|p zgKd<3Jb&CejeCCc)d*aj8U7j1+huB9Ja2M#7`Teh+6R7$?`Q&S^r8stU+=96?9pFY zBXMQ5o4D?kphB3>Yuq{ou5Ow>0#_ww4FNwBs(S#3hDLy^g+adHDmig9xLVwbIs&-e@pG_`8uGG%;A+D2nZUZ^Enz?5PG{id!OB{}P9savqloKcR~T0tfC*09QNWLc!Ihi}S(N)1M~bYTVMs;L2!62)H_H(g6JUo(KSr zZ=$Rnx9(|C+;gMx-N9AyWhQvW(C!m}<94LOKG@@31Hsk3#M!_G?d)NHvPy5@BYm_J zg}s4gdHjxQTq#(QGp>G@`6`vnS7{RSRVOlERU-4%XEI-TlKCn^#(edb%vVzD;24Q@ zur65#f9CT#m?UEzJWtla9un(dB3TEuB-X(!vJQGmtb+x?zp6s~tL_s1)x$sGU!5cV z)m!3Ug~;%)iV^>+p!w~?^XRwR$?)5Ah~Mr?{PwBDZ{J4z_P!E+yXt#TF}KV49?Wl@ z;XKh9ij`984E2c4utq{>$RIj{8_^k-5S?Kl(HZU&oxzjn3@$`xI6!oUni4ug@%Kud zL6_(Za`Y>^m;YJ6a+1)m=1S;SJ`(!XO$q%fhUiyOM86tO^sARdzj{pct7AmJIz{xW zmJ<3^S)yM}BKp<;N*6Veh&#L6EQ62Qb!25{;S-h{r33#nuezv-eG&MRF1HrrTY&1K zStRakWl|$STzCGV>bR~-Z&$EF>-9}`6Z5L8!y9cSW{h8F+K1Jd8{+r zJzk=3c($#wZ}=_JH+-RnvbI3KB_Eu`Z#s~^;dLMBU~Y*aeZzf7-|(ZPZ}>RUH#~>* z4UZ#z!&6D$a39h){O{}wP>}l%I?3rjm=E{hqB*4Q2dyvqckb)^tNO$Z z`HT9*~J zeQ)it5%cgc-L8mD_`LOjM!Ift`~hLp=FvpNaaP*x0)Cj~1V6CKHf#8hW)aFByOu#+ zpkc1NvL5(o{Sxp$t4yx~Ep&gw?Ku8?;4s+R6j8>`Iz4Q7NZi{SO;=nuKk_D8{Y80R zH)P~_1(3Xn^CWL#Ey!Urk0En?`hczRT0M-kQR=yr2i=h_)hdA zjH~!(doix&r$=F2m5OMEIjU!qkr-D$zrIV^lMo^jXlUBF3S^co0GCN{MMSMU4}ZKz*Tamo8YQ@ zYt^wc5?F+8nKj@5mcJthc`D#y_Ie5lIo#ViZU)5?L zxJnt*5L{_Ay@cca92dcUx5FObPy2?0D+`AqxNgmWN#Lrqy$iTnd$S|BT5;);f!4w{p7@GDsd zFXY2IxJ$-57(mv+-4g5I0lXbAP#5!2e{41$_GVStVpNxTweKIa&pG-mU z+pUS;9-T+O-BgC(euwz&b%@_Si1_Wxh~K_T!f#i74=Uz%Ip2f%tuss_I>SPuGi)I` zLr;3IC?o9W$)3~#o{q1>;JGYdGJMWVbcUG5(JLk79DpgnQHOY5QmdJOGA$`N^ zcAE(QGq1YnS(5K;Lh_xdF1nKR4IfVOo#%Z}=4<3fo$Y_B-Yyl#dFVUUM0`(m>h%*^ z*4r0%fa`CwLmkLR)}^31blzIXTAVv8b|b!b^4i}yG}2;C?J%x1eBv;c1}Cfsw$xR} zxVrc_4cdE2yTevu3}|K#!niuVAOJaE39VE23!4?E{SOHIvrhtWt3-E00;&49O;2?STJKf2%@{LrN(-oatHpTL#PqcYHwBQ!e1if3$Df=vi3f36?&~PuvX_Hu$R-1 zKEL}-JZ+f2{Rf-nL;t}i68#4Yay^;H`A}c9u|$2*0W#{z6y*J)a{77wo%w?W`Fl`K z9mu~kKIrH76l>q?ue%T*)GKll>)rLet)Lqhb+iV4+jbG=^HOeop&^$k*&g$`iH#aG zWSbs3(2#A4cgGxF-?kjqo!Kwi0A~!jg*EF+#6`@>btlxq@!g3(p^cvntq&dec*6*2 zzwf@qLpR>)))LrzXbIRyyVnL@cIFZ0{Iua2xNiBgHKDhwndE}2;U>!3<5{yq!OyIj zGl0jNod;KI3vB{dHrgw}RrR4x;A;0BZ*Wz1VHmh-a=#t;*?MIeaEhL?KkWH(74hu- zI*tQZ>hB!!jE7$a0BhWQ3HwSXia>AwFl9*tu~u%W+#L2veI@~axKRWAM-4Z`?<{lc z4X&zsUkh1{FP0!O!V!+khXOErHm?M$=p1s`jWe;Ob`EDd4Kxmc`&IwMII) z`nX{s__;9f6!5(H9q>1`E#DINJj)~kT>0#pjA#75Ef)A=<*E$?C-17;gR4akl5zZ4 zDJ8d!GB)GfB^#8zL_c-wit8HfUI?xxUhoE2kKT?0S6`#PfS>UO*MVoewFFo0(~9pE z_r{_)@Hu^_uLD;T+aCZ|*}IAy6!uLT>;XTGmVO7;Z8H~KS?-#Ndv*>#2d+j`T!&}; z{`oQR>*meDNtdGi!BysiPdHxs;}+O&E_(@hNwJ_rac|wf&c}6of87kO%!khaS8F^M zfve&>%3FwYA0+33tBk&Fz}0&zBXAYeKo?wvtUU;>#_3)MS2g3RfUCiJm%vZo@7f9C zS_w_Uz}5A7D{#+IE8c;tj>ZS^j1gsu9ueod=nn@cdtS~3S4TFM1Fq8HB+ji7`3X3+ zh_VLtnU&$VZqw#*;A+OJAaK>ubv?M+@yQTe4X&&OZ1J=|xZ15}2d+#tOu<#+tux@t zbxtO@T3X8zT$w+43a&2BF$P!Fx5j|0>5n(#o_D-0g5x@!&)^wH8S8+nLg)R!)!U4v z;3wolbzr?pcW|y>onkmQs9J2I;QYXty|`}UF^9p`kPVB$)$>IW;Ht?GQ}FZoQdwZ# zMZ>|>o+{4Z%4CBDxJuoB8C<=b^$}d@7P1Fd>Ctb%RWB`baMfv+^4lb1vU1;);n))3 zYOBR%Jnt@313d2|^8j$=b#oQ?ad0#N&h~wTbL$?{!nvR89s*b8#~cJ#s&S!5c&tb>&$)`KXGKJo;CkW%yUg68_b4 z;$QtB{#8Nq+jr*CZ!b#x_M^maFGBqG%EWK~B;mK8B!2r>3BO(SJ*b%5<$Mq3x6aUk z^qc5H`c2r7eiL;_zlr^%-$Vx4hdhh)o9IOPP0;%7cgQ~E&14_)KvKW`DXHInkMx_M z_1o)_eiK%t--I0f>d*9}e=gCFzGNQz(eEYw=u76YAN?az|LPT~f0aqIElVXWhMG9os#Igq)z%Sbtiq7EF}6aN$H}r&UOXTcgdghT~g`oiusE6cb3xI zrQ$e!CE_?vB#x7q$2d+s635w1;y4{i9On>;<1{02oOBY$u^@4rEE2~VOyW2`B#twc z#BtV>IF2@n|%zH=M_UyeJhbY~C9u9uW9s zX-#N=X@0>@;&{J0^YHgIY;ns`9RIp|GrqO`OTP!c6xgAjuxb5s48FBJix&d!&}|>= zH)q}jp1EQv#?{S1OK{yM2dklG=9K&I!PVMl#ZfbJL(O1t6>mQQIC|{~aP_jnI&f7p zXbHIL9&H1DJaXG0mfG~hN^n)e$pids>%9oruCuc5uxV&nJbS0{L&4!{dmFqv4qufu z39Gq2gngU)%Gzinj2D8d9~a$lZhY5~z-4b#0dMpCD&cn)Jl+7V^o=G!pBY{%5L`8E zT?%<{OD2B+SA{M&LtK87Yh~y&FZPzR5r5Nf*Y|*{M|CfNtCLx}7)#|wp9Vh}0cD`o ztn^)pzv-^{#kl7>`(A)6?SXsnjH#71prsV?=?6|0YxqG|Np7hHJh{kGoV#^RCa_zf z_28=1jl-K&Aa_SU)Aa#lyNSz{DUzFAeM{<0L~LS5WFXeNGS5mO9x-V4N5s6YZ*PvZ@6wCPh)pbL zUmk1U={0*1n|Q8w5wVE|EA+759cz^af2NvoS*$@zO;%wobMLYQ>zCucmsp!do9;z? zq2qQ9#23sb^ha#s`655WBPKuA0=|CzD9+7U{|30{Ze@=7M(=gFZqfc};Od9p8gO;~ z@J?_w_NFbkdJ|^=d}PaXaCIo9DYyz7?gXyZS9$=hPS+>|AM#$ihTtmU^AB)!etTVT zRVgJ2T-CCU!#xK+tAOLqff;zl;(Lt2m9O_AaCNa&1o&CG)CTxqsrNXyVxNjQ_n`Wz zMB($aESZYyR!)8ct_+$V09U#u=fPFdkM`i_MSuga!MJ7MDyZF1aAmxtE4T_jRTyI_ zHP!%J?RwA;Tx}Ux5&Ya~?+qMX{~e65@)5W){V@dm%ntDY)_xrU zuF^00f-8-NW0YKNEDx@}Uo!_+W(%f)tK$_+z>oR%5x|!&eFZ1lo8RD`HFh?{@wbi2 z;~8fx^ad_>C;?m<9!hr=<77jp!NA&HRbgN9X%pb0%{4IIG`p(dcWN~*2ChnKT?AJ* zTfPEUPcM%FKPNi21D-o-E4XqonG3G$I!pmqjYD+7)%#`E;A-SFKX4Vlr8fBS-!K7q zM;CrUc!BuYyT|DEQ<2`|s)Q{mA=RUaYD!9_FJQ}!pL=D)lp57ApOSG~_ zZMUt3@jI$NT0K9+3I!GMTSZ$$T}0%vWw?z6vJuRV^9wmDD=; zn5={I$vUWUP`M7?BkN##KCFX=GS)#CvJRFY>!3eb2QQO#a1B`p6UjQLOV+_d66;_= z@UKo0|H@c~f8{FSUv(n>m4yud>P8;@tAgOS%c;+hL+Ud$lHs>6CG{Cj5Wl@J@!R{$ zsLx}H=nTV1zVm95?;J;T1~XEpNRECrRYrfD!4my(!X^6SRF~+FBUNWRp7h6Q zPWt0GkviM=NPiqh(jP~v&h~UtXM49qo$Y6&KTdw@qB|l@pc~tnHO9B0b+3>E!atmy zN*OBDBzMfyAMFQa`(9B*>39ImU< z+ZC+H(c7isI7cMnI5$Wf=V%_|IGsowrwxhY=#n_jJ`%@iK;k&oB#twH#Bm}?9LJ5s zaV$w3$D71)CXhHz@k`1$&M6YdF(7fA#UzfSiVrHrm7MsXp5AH1QoGGvjrgGU#uyXv z&RWFU;5%CXkUsE?QqvG04DxeFe9*+z(OR6lZ~J{)f%|!CVD9p*=!W>vjE8J(ww#ImN6N@l#ReRkiJmV{kUBEZI z^uS4nd37+KTkcQ9@vg?o*lXvr8*pyrz>eV1Vt^N}+qCs{aMiA7B)Cd?6c4VJGA2WcOV8_U3lgKytTPH>`Q#92JDfN4z5OrUBY!+ zANIg|H>HpPw5)TMme{vYq4{3$)6RJfaN4aLaP`0_6f~$d-d*d1Fnk#cd%pQ~mCq^fXpg}om?7{IP z&Bo!}Z;zJ)f9csA{C^wjj_XSG$MGfo2d|U$dj-!8g3aIcuFnCGj^zKrYsE^(Z35^v7e!`+LA2F`hrfW!}XW z->!M!X-mvV7}~XY4+1G4Q(4-(X+LxeT}(o3z$dJY%^!onW8&Xf|-{ za4T>%`?3Xor|VQlaCNYp7PyKSS`}QW*VqJpjx}Bg9Blj;T*Z3q16Nn9qA{*~%C`nr zcBv!5m0g#e;HsJNVDNK#Pb6^I4du7V?Q$l#XHT5~aJ4(66`s-2b2;#wY;{+`NuT1{ z;A;N2jX2(_a}U@bX+IyhyjNXtH8dKghnmJ`(%- zRNsS&xn0ipV1DZiNu(eB5z>#|hxDU&BmL-Cl0GI=NI&|Hq|WwK(#NDP=|?|_^rP=Y z`qA$seN22vACqdN&h|9YkA5}L85)r~+j8`)mooG#cM1JU|9lFxzF^NM_%^&`R4Y#S zKV?XN=ROksou85Z&L7*T*AwS{ZIgm;x2oUEz%M!-J`H~C1=8R79qI49g!Fg*Jh>3g ztwQvxQl!6ge(Rzh61r$V8M>%J9(7SWqKldkU9=j}Me7n>^bpZSzsk@>ReHN(gv!y| zrQ$e+_WbKOPN8ASIL^;J#&KqmIL-$W$H^jboa!WwGl;}-E|EBn6^Y|GlQ_;N632N+ z;yArX9H%~stkYtO=wg#%=5eb`vdEn zzI75dWrjXM?8eL48OQZkYaJ3c7H(~TTl?+9{C{DVQZp>vuNS_%&sgihexjEPaPE|x zc=4MK$)9lD|5g3=k231F$CCQ(4M_d=QGZciOShCw;3tgKZy!zSw+E5>?XzQwVk}iK zy8u18Ma!3nrPet+8v4wvv2B5O#%@7;FlX5u=rbnqTuP}bc(|snmYE`8%w5+r9yCasWzBdE>eC~4`I6|i?-n)yFzJROa zd!B)-%)!CnYSFPsaAg~o4XzT*HiDm(4ITq`dp!pH%&a*G_dMoOJh)n+6^v&Ld43-F zu(rL6c#l#{J)uEu)w_@5X)&u{Z~QtDIKJ6*aP>5JGOoK><36}r({LNO>ay@CxYDZ7 z6uDj1eawO1L(q05%;#xp_Q$`MYO(vt82bxq5EBV(E;;P&{QqV59O>{04KG% z0LyPMlXuM|IFH36WF8w9dNa> z+D%+ns_#-k=s%d(zDqF@eV63)AEbSkr1}p^)m8i5>x;f2b=7EnQCe56Odjj1N##ux zg#1A{c@t9kgMK7$LMneSf#gld$sd%`MGIP<7u7{+o)^_cX?*Y~(M4&VmsEU^>Y_By zi^d226Ki8WKT@d>;y6W{Yh%3|n7k6Pn{ghqfv*K!#oA|eDH?H{uo>&%f0`9`!+icR zq?eJP z%rbBld9n|lQTtvbaO{jSu7Z>4Q)+-Kvy?qJZrg4=>>U=Y03Pnt0$f=&YKrULiti1s zrkphgS0l|Efvb1>Q^Aj3vF*UgdL`i}JXwDWT+O(923#GwJ_TI)e_jl(?yO7)SDCLD zf}fdJP62y-?*Oh&`6}zKpPm%~t~4E|;28&&J^(ypd{tM$)tuS(;Oc1W6dbSGIRN&W z^`n5>>h%OyFE4ckS9e_pgDdSoYj8DlOLK6g)9ozyi9NX+cy($SaP|H318}u2?lQO< zxyBb<-MY3MT^f_ExiEjR=GR4vS{mtdk+1v1zh!L?u%!T>)=AN4xT6L;2W|I`jU097+D8LORR$h!M{2}^5_F4^5`d${a140&c}&= zB^7sWN%mh+|BCLv>P7Zn6$HQiIH~(_h1C6^etT_F_hTWc`ynUa`3lK*UMrFBtS6E0 z>`Cf=sJ;gkbGw{=6Zx$(=ts1IW;LS8NcayWzsAIgHN9%oAm}g|og;x`Nq=X{xSH@E z49?E2C(d0+`aAC@I>VA}>R9W8Nq^@k(%(7vUU&Eg?MQ!TZPMR4*Uc8!m7`zPl%Zec zNa$DE68cq!gnp$fp?HXblNnbP>@-I}lxTvV<EmUy6ADDi$)P$^c2xW4T&zghv=er zi7u+r+ZAuK9KBsCj?<~cFjFxntP9LSoa>>}1>lHzwGf*~7*iPE(MQ!jTZ?mPAKvzn zyPzlMk~q#e(udc){d>$~he;gAlf-eRkvL9|UMmiXYqeRX)PCb~-0&TgLHh7EAbof} zNE~MyiQ`Nrah#GXrrV?7*{@JLl8?H+{FcBX^dR}@Qf{`oW+>w+P)~(zMHeV zIf>(*_iAEXse6qF-kqY1Yq&JZ#uziLGaGndkR9xMn)d>}f20Dw-#3Po!*!+d=so^K z-P)YLsBZ0AQnz+LsatFRH`c8!PwLh>m#vPmbauc8#8PY6l|alZb6ha=nW+gAfJYTO ziTP^K&~=!v(rzt5d@!__EyhytsJ8I6I_R%DAjXDCln3;gYC9JJ7vH9fziEpHWicMA zydR437Pj0bQT$GihW@}`;+6I5uGduhT83j6!e7d9ZV3CWw?_g`v#g3S7J01_uAATe zCR&hw6RkRG9U6f-$|uMdy5EDu(YE4my|`U@ zjHP{3&EdCqSDS`;sZ@MT`080^BY;PHe8sp*HF|@;Z<>2U9545-9DMKgy57Kgof2Hc zJ$z`E4j;bd^+CYlIaOd^Zh8~ohd-5h&~M8tYjhjub_Q3S9vdTfX@XBZ%;6{Q9RWXO zt8NA!<)Ml9Zbg|Z;Ogwf6mXU5G6r1L{161LE;Kj?uG*KH4}QWP90QJsZVi6Q`!>O| zce|nN-5eG^8qc`v_%7h2FM16GR}-3ALJNKCe;CKF?D2#Bu<09tzm4mJF}BvDJ+Aw^ z^z*tU(a)>BjQ)eWNk6Z=_8&Y)`g#2>_4?E#>Wkhd_4@LozGw`oFIo`taSTZQU~Be{g6%=MU0+9GXA)yXfsSK1lWUO+;^}@xlE>Z+7P{6PJFOS;n7(8o=tH; z%xiY9Ht?fnI$c4W>)ycwz=zgoV?H0e_yuBK5od40SI>Su2lKgh#u`U4-zHRh1V8Fr z$chAUd{*!^;Q3SgVP37=r3>cdO*?jC&No;&2eGOTvyKC6v@pYbu5+s)VqSr9mvH>} z+(oe8v2qXad;1ZX=NrWi!F3;ho(-;yXL*3Di4XgOtIP&3z|YRq)4=cbjKNjKk81nG z^TztU1y}K>Lc!JkBHO{$j&nKS%BE2i_<8y2HLyuV<$nGyPehKMAUEdCVMnC)j{LNL_ zQ{zeIB;2!iuag*8@ts!U8O?v*1)k^7$W?F^U8M)On$|N5$BSKzfc>|YRqQ90wPAkSApWWK6S=Bo&a`RWsyuL_g-N|(%63(0(yOy;W?GGBcl^Hno4 zUrDWl@noNj57{TvjqH;-O7_Wo%!hq4t0nfy&~=dRlgVq`*^aD(juLTax=*Gc_*YW( z8K{3HmG3N7pFt|$Sxq9}nbv2Z{uRx4E(m^m4CxE-kn{!kGj+C4{E0f-qa^wQsJ;gk zbGuYOdip(>-#SA&(HZIxo#77A8M+ajA(H3}TZzt~OLT@lL}%DcbcQ&hGo%omVLH(n zz7n0`Ceay26P=;Rc%{w|PILx2`c;Wp|5?9UD4}1ikj?;w1ajKF2gXc;AL2c51a24r4c$V}Z zoK5-<#*zMm9;E+ZB@)L`#RnDRN=|&xPPZmvsp;juBmQL-SQ@cZy~j(Sy?+?$102}m z9Ac?=+J_@f(P#7u#8TgFaKv}C%ezj9e_3a&LoBt+x3Iqz=^;jo?z0DjC3B0&-0PvX`FJNEWz6i9PhPM{uyL)VtX0ZRJ5EH@GT!CIE4YH)B_UtBFM`Lvt|C(FC5push;|Df2B5r`YnSx{bL1<^58?Rp*P3 z!PVyzrU!&g=h64T&$<~^q1DuF9SyEVUEF|s?o>=2$B#Zr#xqWfDTA28Q@v^6s>`Qf=4cujiB{=-5V}akfvVJqTdY<6} zu3G#I0ay3Cmq(n-+Bp|o>12E2y=!~j5L(v9mlYB7I_hu`T>S{Y2Cg*wR>4@ZkGcqc zG`DNVi}7|la~-(4@_ae&*{b|IaFv=Ahi814s_ZRwd(|*-vN(J$xN`JT*8OvTdIIN8 ztnvxiaYqEWTIv>#>&mGoqua|DT&>XS1>Ae%esJaWE*M-L_!D(&my&ui6G%OocBG!n z-&wcTh18QN2>o$rU(0r+ujRwszWAHc{y1(j`r|Ai{c%!Ae;f@N{c+yy8;&t%LHgq~ zZ61gDe8#IF#GO03uE%<}wh=ZUw@;JtI5lL^&ixc(SNWo=|5Ny z>Oh*3`l4q^ebI3e^+gRyeNih?U$jRa>x-5r^+n&vs4x0Y%JUkO&-sJDdmJbGZ;TI` zB`kqYRnxB*;)9Wq)8R)gJgHVk%%553?_qA=ZeJIELgt{-`-IK#w8HSI23FjJ`MmY5 zL`PwBVQLA?=L=TEVLsn^LF16H@zD;%yxQv7Y|Pc^KhiO`ABqXboV>brCUD!~Z7_#h zm<>mK@M8Q=9PgvC3-(FDH-KjpT8ufr--BRWS8L-6aJBi{Kya0%XUXc~xZUIZurGS`KJfZm%fOXcR4A^i8dnPD z1{mN8^e$`(>zoPY!_ej)3wv(ubO!X@{^^nI))I;7z>LE`d z^^mJb)I(k=Q4cx4bl|5_JSC%Wi0qKjUT&_$0EUGxFbMXwWGG??h3_CyzL zM0C-yL>ILsx@ZW|MOAvcV!o22w@bxww8#DHI8J>M$61lbIL<&4$0>AD8OIq&;y6(x zj?<9Dai)+sPEQiYIY;6+{v?j`k;HKxkT{MliQ_CKaU2^G$B8C!9Q9|)IF2els2Epr z;)8o5%n={#(NqI^^5%{e5FZ?HW(D-*XXE^V?^&iJmYRJe3UP{*8EX+seR-w<^kn@S zJ@HNbv*xB)#a*hYJ^JE}HL<6~YT(wp3=yxnINks;9jhTzoy57Vyc*zJd&=!V;M@DN zVc&dbajc;$4=Uq9oikg*{$l71;GFPU_?Dk%WP;!6IO_noy4gMmT&-Uc2Clw0HH796 zGP@-3!pwe%54P=O3+-L4wTX>*mM-7Zz?GrjYjCw}Se*mH#_h!u@YC*64e0PYUhM!^ zzE+!Y&mp~v;CTJ1X?Vt1KkY>En*$mudo!(ZTMDkKRId*F#r!tTeY2`4&dut&A6#ke z+=J^{?{PqU@Wqsp&}XhBRzZBQ`nYiLb9ieI@YdRoz*W_Nz2Iuh)F^Ou+pZP(Ie%;f zd@c1gG2p6dtwG?Y$`557zmEoWaGx7EU)n_;ybT=m`U53XX)Ed^IL&2frH zym!}|n?lR-%dLc1>gmBpz*WkPyWq-vyAj6HjIGzfmF+hDc)>{}`%U0#=esqy=fZV! zz}1=8hw+U5o+aT=4wya;oOG`i2(A{{RRoS+eh%mA_x}OxW3d%nun+cl2Y&7)D)m)^cJ{D8S*17d zkv__I*}$?qey3)@Byd&Q-Uac&wKqG0s};9yf}dLx6M;uI)yI2h`1CEfIvtS#uA=o9 zfGhXI8^G1+MlZot1CO=fXH?6(z};621y|E*^u|4ZueBds862CBXWYB?6tLQA%LZb6 zhCXiwjWo>j298G;RqCJ9YRBQ+pBu&}igT?BkHK{tk2wskhHO|2uAVQ709Q?hm_j%H ze5ow3?xNw~YEKns#8OQ*SYSR+-G3Qey`1$CT(lSpF_t|OIK5&&W zc{}deaBK-2-)eCg&$!Ff06Op^^8j$-b#oQCa&R;O&h~wTbL$?{!nvR89s*b8#~j3U z3qoDBcv4r*U!tzsC{kCA)~)SL`gzSE{k)P$T{T*_R-5$mYEJ5^ttS1vXx-Xwq^_E( z|Da+N%jrL;sxPYGN=|)IRsNuYD>?ats`#LSD>?DO3cJ_Br)pHh(-A*)TvH5q)0YI;zwP!6 zc);z|SRcPEU5V?e#+CeWRgmYaT$1nnisUw+Y(%<>KM1SYIq`z}piT=(`68)X~k^asL zNPp+n68)Vkkp9l|Nq^^p;J3@EhfMoTNYz88{U-9G53lNbP%*d5`5w$~onbf88QKt? z;U>`;niHL20?`@z5uL%8=nNWWN}Zt!(HRaAouMev8P*V;A)4q6F+^wZB|1ZijY^%t zf#?i!^s5~*^s6KZ{VH2Rzp5>vU(J=!uQm|usPa-3<3W{|s^CGDm#W}Fm6xjEL6w)P;355zFXGM` z4aXqv9KNwU^!D%9%%QiNEtrP5^Kr7j-CSaSyDBeL!LuqaRl&pG+1FB)m#W}gs&1_+ zFIB;hDlb*RgDNjo!NWf_-&vKHs`&e=@=_H%sPa-3JgD+g6+Ec&QWZS>j&+Jud8vxO zohmO?!GkI z`j{LgeM}~jJ|^!-ACs%3kI4wq$K>a4-Y@kI>6f~F#XIEib|n2$H6d!BWn*xan#aCN zrh{#8u2kQpg3!-PPQO&CeqOb^*y0(>UGN9)xAzgoRhND0$n8=m{k&FcHG+M^j8VW+ z{k)|5#6^%kaRW)8xaOo!+(yzT?oK}Ri3=rt;+pky#IsBFiK}=o63=^p^h@=bQUhGo zPTAwC@SN1t>}B+cvu)HA*ZsfTe=sGF{Re;dI1Y_F=XZTkRsNvjjg*r=s2W!auH?iA z3-Wxmi1bUXLHeael76X`NPp+Aq+hBg>6fZc`lSYweyOQszS>3lrG6&;QaygdeyMaF zR4=;>{#6v|8?H;%!8o!G&LHcc1z86j$U5jm`lXI^Y5~8Lu7d@^zmn50wWzPMugw_J zkDmHh<%xeafcRHkiGQU*{Hs+G{?)15Rl(IDzsm3#ewTi!n#6CO_&=y$>Sdx|=@I>^2hpz#iGKBi=vN(yezk?@R|Z7CdQSAK ze^S5H1wKKzbkT=I7rjAr(W^uk{lCyJHNW+CsW^_RU#h~NSM^I(@GvmQ z4mFYF#0M)*$PHJVsix*V^B8K48eY9+B97O~>5V#vIma3SdoK$^jo+2qC!>C*@rOay z;#~U=TF5uqT+bM_o(5kZ6Dw>&qpG1MWfP(*@v&d9_ftHf>B{)P%gJ_8D9yCanNhEh2Y;tB_t~J^L_GT_y%XT7eXkXG#)ix80B_H6t1o{4N^Cdyla|*qaojCs6YRqVp9UWN zb}s611$~%}>&}iTim_C|>;kxI(efp@YISxr>V~Zu+ZH$_b_=*FxqJ?|>gGP#M%?G? z=M}+E+jJ|`&$P(&1y|!U&5_3xxokY}l@K-Dr+3&#;5BWUfx}7jDk6@s`eF}Y8>^$> zBr5wBxN^}Q1)TEM2=)ipdjMjp6)ZjRjVqEQDg1d{O+jnTV-zs_$kx( zIB=X!RlIj^Cw&1|_xC&lSDAx@!PTN;k>JWUEE`-Um~8|G4;eZ-B!K(IGz@>3iigY6M^HKO$S#`gD2yFr( zt2GU`fvYhKkAkb36`G<}ZCxL8;Ga=};40@;SJb16a%hFRwMDePfU9f1Wsx6uB~7vuXjH)aDAf`f=+t?)lAEBOE_J{4<`h%hbB~=1tBH11IrW`@mK49Zi6Z zUKD|S*4~=H9{rW?^2%yAaa}hZN4$5QsU=ajwnl}jn3txcg@YgSPeH(6qaT5*3(xj~ ztFZJaa8)Xz6~I!B=D}Ob#R~NaW(PmI%nsCtAJ{)@Qg9v zlr?*Ux2c1Z1qUnOdwD~|MjZciuRG3dT})Xkxa1pq@c+fl7S}b}y%1bYyxPsqmU!>Hrxi!8C98&v`P_H5y{ib`wI&VrfS*Q7zXR*G znG3Egcg@5-JBObGS0gH}!}I2Tehi$|yg4}OTC_j7%6{+($IE`)0{hKnF99zp76h)k zf1Qu(7VVz~u73Ef0auR??*v!#Z`z{vqsBo4;Cox9gRAtErr;`UxD&WqU+Dq3I$fiX zqj=ZuwQC5j5@KiTPy4TukF?aV`)IGHNal+M);e)8CwbCWWL69jH^@gT`?XqlY)R3 zHhvHL^NUL$milJr3h?IZ+6MN;>}LUwjx)n}yJu&L-;s(t$CJ3T4~aW>BXQ@WB<}n% zpX1I=B;w9gZ`UDu`(G7zwjy!og4}=5qk#1vRMi(%tR!;ki>k(zf-55FpaE(Z^$|rLe{|x zWF5>R>!3eb2TRCU2MdCKC8uufMAC19)~%)f)dJ#QB@_Q@0r9W&iGS5fhJV$I_*VtN zZ$D1__A3&8du`&kFC>1u3-Q}a62E;m@!Qjh-@cCc?T3lqu21~-L&R_QB!0W&QS8JQfH`2bcPI~GsF^|!IJ0<21I9ANOXq%L}v&kIztH28KQ~K zpmtxWGqfW*gEr9_a*56$N55(yL%*u{`d{l;+7kLzhJ=2lE1_Q%xvkW%-Vy!kI?=Cs z5&h~E(XWz-epQy}S0+Ti`atw6FQQ+C5&bH^boNXkIGnvG3 zmXbJ*Dn6(fS90QmdU~f3OYJsyHR2T78)FblwTQKW?x%l9A9zNoX^5o;`ME=TH*s~e zR@{M_+P>}gZ3XVJaCMTSLPHS^I8Q1kM*BPb+B!jCYhtbgeCUp-2SI>H$1y@g}%mY6< zrH=u3J=F^LnYOJlp1rn37`U=sHww>~t+5OEu9qG-={m0tG(-FSiOS=~ez5O+b_1|+ zU`KFhH^2+mZQA-exN6rk5?m!ciU(Iq8oNRx&01j$JpcAwaCN(1duXKLR_=%o8cfLo zSD}6-p}nUqZ;i3^F03f@=+4 zCIkgV5k(BTn+@y^L)iu& zY1q!Gz-m~^9$=;EFd6t5o20?EbEu8`6h;g2?194;0IMOVyW<(f&Lwl%Ty9kaCe{b6 z!2^r5wxK+${wVzR)15`IKX+{a{51#p;kp}&wgRi&Rc8RJ;M}Fa>OvP&=v>wP%EHbl z(*^C${k|*o!DN{ge3Ze79AGsk;4ZK_Xzhr$R;l1R@acTkJYD5y_HEbztnwXJup0AVGVGe8-Esby ztL!(w1>}#t#W;uwR>+ zD^&IKnI#|E&AeOLD9<(s!})b?u7ka3Rmm8VPn|mAx;qxE23ApSfxs$p?QCFG>AnGU zu705}fz^dg4S?0D0@GyGz0GQ61b==wIvH3!sD2VyDHc~pyF1k62=KABHOx@`pC$Gs z{@JfX6zvtWvbK$R&|=#!S)yy2CTX?Y7MNybp3(VxXDGpYEaDz zBGo-S2@C*M;a=r{Ph7RSu%mC3j4_*;mW_L!scnw>=63rDo-zBG2e4Xdy$o1c2W|#F zhqo(WH#?_^^ILAPgxxdg9I!GAJ&o&f@uHWA?tJfbiSB%W=+4uL?kxWf-T8ZX(Ow+7 z^N-rki}IrXmiai^WIoOij`=urzH?79ABWC&)*$n77L)lnwK?WH_ayUiw5EEZ?@J3U z3yr?8ZVkjyO|Gp#yR%Q30lQoJRkT5IU=rG((cW0J!KC5-@KHDP`k@V8OWcSy=)Sr; z+TE#kt6-1vbVU6hxXBW2$|gMoZSZ^6fvn=z7VYlw?NHb|2YaAhhn{xDb^q)?SnNUR z{?1(c5B{lF#aO9Rul_Cmiq0RT{>qiC&p_u7_9p&Ho%w@xiNE5SKgiV&{>t%JT>ap- zTAJ`zR3E(K&;b65OCO};uYQz1_&dZ`b4h%)kt4o}R3pC1CGpiVHR7x09Pw2j5?|Sn z`096v+fR_V-LaH$dmu;L&LeUALlUqPozpBB(U!CIMuX=FsSN92j^^)*cZwY^8PWY?CgugmP_^TI$ zzgkH6tJj3TG9&zz0pYKHHZR(UgBR_k1}|zscu`LdUbHXaMZF0xYF|oT^ey2<-w1YP9LJ<_!1qbC(&_w5*>#}be!5m$N8fV7S}6v^ud}P7C}q>TelB% ziu9+!&{9vl)dueu*X|B@c)e5!wA9^CDua8ss#cCyd4(v{s)!-D}8Yz;FHjOE^P1iCb&J6!&Q9G zT`EkZZ%edM2cLYL-|B`2zLiGUMgS}AQ?>Eiy&Z?bHoj;E+#*71;s2C&9(~lf7r;vU zbbaW9YkW+>Wfde>hCcZI!Zu)aTaX8=4n8qKU8+3%Fz~q3}Ce+!3R3m!y;SQ zJ8Z*%)va@_fYrxnKj?$D@1Fpxg5%|dsy33P6M%N-_@HdMs(eFY9oV~u9|Kkijk9sj zwUf+H?$F~2o-uKL3HST*#8O~#$#^rca%rxB-7ivex9YkJn_I$85}(_pDt9tGjq4g6 zvqQVnu>T0G2HRJHUwRTcANWj}{1@!ePA7oXa_u$1s$SJ4z{+x<7l9-XEv)+G)TlG&~wurN!j~t2y$;z~_7R;oW1rAJ4ns zks~lUFv1sDmGM7?@;;)uIDe~f8|+spgMpQ+Z~(CS9r&x#>drEvJCEYvuc+=^K=`Zi zgukM?^CzM^_u$~KxaLiqAoHC^lKIY$ca+R`&LZ=jcYViv=N~n1f@{9>88UBTIhi*> z=Q~$dW8TESWxYPGb+&Jj_4>YNooz?5ULV&w+c(Z=!=KwVJdE)Sj%#njw>x|q0R1#H zvJvd6f5#!F`kwur50d?zJvsJwuDb3q{D#(MU-6W4bbV2}FTfq*ug;fpebKpOeNh(kS{h$L`_d}ieg9hI* ze^8x%@OOx>)X@j)bBybw@l|^=u1_6(@G8*~AQNlCu2+xp2c!qt1XV^-320y|x@CeV4N_d73glD)#cm_V<8HNy^VHx2W zb`YMylkg1c@K-@<@K^mg_^VhB{>qYrzZ%WKU+pFQRRH0y#Du@PPWUSk;jcas{;DqF zuO<`zYAfNd`V#)Ci11fGn-@*w;6-_A@S?he7wyNvi&iGQs3qY=7Z6@lPI%Em!i%mU zyyz3ci|!=6XamBF{^8q;{gpa=JC}}=#i8R|Bs$LCQtCKuiH_5Z=r|@s$4MbNj)Leo z0;1y#COS?$(Q)b#9Y;WPoK8f?2_ia9C8Fcx5go^Z=s1grj`K$!EUs7T=!5HGn?pvpMh9avotiw9Po8GC@0z1$D{jLm*0*qbWN z239_wI)HnB(V;Q4)IlF#0V~hjm7r6^X|+yMJ!6xb<-sR!Zqop^c))33b?DO}+_QB< zYn0#U`U=n6C569B^*=}Z#{iR|E-Aoj{`tDFE40_a`Hr7#VP6|{1z4qfUBq?EHth!8 z*)z=vIz{&5+R&Y^j?4i*%ZlP*2MY92m*OOsfR$q25ny%CcO2@{Z2ft_s=fRSunO0W z06w1K2VrN&w!(ex5j4WHhmKhTtm?;(#WNnelL|X%M2W63q>DFV{!8Uc^q|m*({X-N zmvyl3Zte{HFAnX1>x!G61Xco_Rlq9XVhXU@U?henxKnNc+c_izSoIEX0^Tp^gaZ2D zn$7otRl_&B&?&MX`=hOu6=?5N)d$meQrLI8<^rn|vodkdT_n{}UarP{JY)A@r%cuV z@eEraQ`y@MHv+4=*+SS)?BC(HeR68zw>2*v2UfF=9l>>Z+k|L$1>?(uBR!L82ESB( zR4nk>9Ul%m-sLv1Di@XvtVRT_2Ub_So1iY8*f#`NX+|djD|5$wz{l)U$@-8lYr5e+ zle*a9*>yvw1FL0Q8{-*UCM<-#yLZWW@9X`mfZM#^WHqq5->);y*UFj!yLNacdsjl63U9QI zGOxyqoCGT10oQMReyEM0egu zbmu)pcYZ;1=k-K){@up6=W)z;_A2Fk=a(Gwo#&GI&igp#J4ccE&acRPXRdYCZWooT zv;B5`$vWGk$vWGAk#)BHeuH(kKah2{|0e5fcOdI*7m{_hE0%Jd?SIRDUKhyz&g(h$ zca9_bJIgutcg`aFJDasW2p?rb_IJ)D`#T>c`#bwL*nybpuSem~Qrq~fM9i7^$_n~v zf71%EUGMcqoUpaJce2VKI%qi{rpmm06u#YOS|NP<0!MfBea?69!JnU;W}Bhiq-eI=J&_lIPgeX-1r|9Ma=%Y zJM1@M%CX;s{5$rWC?fq}Y4@A>-QugCy`Bt>uS&a~%>OhQVssfoP)o5z`<5VR&ju+8!3W$z#fao}X z^ugkKrH(#0xkg#&gH;-wfTk1JxWG=;7c4k141BWZ+-9(2KW<1=ozuR|H0Tr)g=0Nb z<&FKSflnS?)dSzukv)P_Rp-3-a)wS(Fnbj2g<2Y7)j7SQUcjz9)?cJ5m)|>4J?%v-J_Ti~I_?DkGQyc#$f6_c)mA0Y_xc9i= zAZV#=yL|>eXA7>vwoCAamU^3K0Pekgyf#mDpHtFS11s0syMR^arg~|rbI#~)2R=8F zHNnH*ygw88SRR^+d#>hj23Vy9tj04693H{G8Q)Z@`u{FY1JUo7oAVLn?WZT<{My^k z!+v}?5?D=4jKFoftTjYkdUx?Eu&S8*7FbEwP60pD#J(%+R##Gh)y(#DfK~J3p}^{| zTb975$0!*zoqHo^0jp@S5cqUB9|F6jfgbMj<|8dURh4)+g(?(|vf`ll9vhkoDWQk@edzll9vLWc_wOvVQwovVQw$vVQwqvVQxT ztU}bQ+QDhy{k;5-Lw63W-U^!F;XMM_jwctuN8N8Z0KDIkxDL=#Pl(E(E|oK=3Eofo zuqWDG^giRAs`gT4U|ZNX{cfRN)%LuA_ZyYvhVs7o+Ti7GjI9GZpyx)^ANiR*;OkPB zwSaB6zaq|$TgQW~`TQa3mC5+~xNd=4J+!-?n#Rxv^QJk%FMXbn2zfmKA&Bw)31TspAodOHyKtnuCg`@s`2?$bJfhi7+>iv(8k@D6y! zwP#A!P(3Kq2PW1N&A^eS`tAgr>ui^H{VT3@ zw(0s;be(Ow{?%x*{#Dzbu>KX-zDtH=f9F1Af9D!xf9I=Yf9G_vzw=D8zw`I(yF~YQ zF73WcQDonxIb`3ZwPfF=k7R#mb@pAd{n#FTU)wvj(7eV>k|K^ea6Jp-Jq*p)!5-E~ z7yf*4r85}&k$N%*@#k6j2>5fi7vVxxe|J@J9C1`9gPG~7^0l}2!H(O|6n@ntxE_3U zkBcQ^_SVG?hi;X+e+%rKH`U?KC;7WW=XyJJH_9(<3&HurC$5IAGrBE&er%&wxbDxM zkJFpXqmLl-=(EW@dUfXGXy%v9$7w+3Xp^KBGjwHam>!)%D=5O zW}#j++r0|)>QbGDs84&tv45Pvn9_^Wpu{%VvO{)(#~v?2ZAc+w9#lYa0m=?C+ELO-a^{)6*Mx&PpL z(ht)82V0T-2TeHkAN<|oE4scY-N%H+S6u6hjwSKc&sbmdcb-2;*C|qG{veIpf5!a5 zKi`AJzFi%C@MrT3(+JP7obU`Ogl8DS!81H2Jc9$_8N3M3P?zuw@q}kMN_Yk*!ZYL$ zp5Z;=8Ki_~7(jT2w}fXz} ze^r<8R~dxAawh!MM#5j|5&p`Y@K-;Z7fsl+7#uR?MPG94Ygv=*Ye{)g#dq+cX9zFq zPI%GU9K7go!i$CzUi1&&UhJ>b;oG@%oO}))r-m=rxf_x_p`}{2%u7?Ml){n-OrYC;!X=oHmonm`}Sp0ONQ zrG$sUK7R2su$uRN6R`TweKoMUwyz%W(KYS^KOe8y0IYn|y8@qU?_*%s&$h>Xt_rZg zv!|>K28Mm=)dN0PL~~&~Hhqip#hMktgS8tH4cv;lw8r^4Ia6Wh7PLDJlv9}dZ!&S?@qTT0>&&D(Ab*}{drOUjMbzF@cBZ1Z8#Wi7P zEn&>*$s~atE;VI zfz{~Yi-Fa%RU+Wi{#je-U%ZiSo)*5CkRpGDGbR;nB>?Fc7 z&TAhA`}D;EobSTd0SD!Kc^8<8Y z6($G0W&x|DN};&t^=r-mtI_LL;~5`rcm(@SjR2YI|Log15Lg{D`GoSucam^^mdgd$ zhSf{j^4PZ#xbDx0+wXGd&YvrMTX&8ky0gv?(w!TVxLqCHIflgTT)OkWal9y<@BAyr zi~erw6qR==ppQ23Xb5{xvor9kI#&+ECqH{@jq)>tUuUZRXSW~$ zw3tIrW8lyCJV}9eW0+VEwtayP&VQC{2fJnOtMKzN7MF0{GvV6k`)n>B0#>gaZUZa* zDFcAd9Lq+qH_VR%RuSRB!0J}!a9}mBg%LEbtRQD#)mdW#urf)v13s^uhQJ=)=q)fg zX8joVe9X@mF$9`U=9nWA^%Kf}jZL6VPwXA&?^(uIcCgP~X&C^hq=Fja5 zdveZed^HHzXoScbz_4Knn>eZ+Pby2Te5+hNsj@c_vm!=;GgPmTl*RP`!9GZeOE3qH<2Vb&dXc8{u=s`Jg=jqrc| z)T?4t)Y&KQclKA~IQ-Q~4u92!_$w>ouRalf)rR=1jivNgT>an((hn*~KPVvm;Aheg zR{Q(M_k+1=^n({jKiHF_AKXv+K_iZS@CE4y+i>)Qzgv9uJMTaEJH+j0$o@D#V|`Ig zgOdGm{J&#;(LdjV#lBsg`GdcbXE5Rz-yTPJ20Fg|0U6)Ur4Q2a?ds@*yT3ypRENLv zR)fD1bMRNwIryvTrR1-+5&kN%l>F5p!e5;r{8bCWUmYdmAO z(fFqB);Kvub>H-|Dp}f8M$$&W{-oUSbcHKp&Z!D8zMpCmdR>`k%`@mjSEJb&`OUO&d>e zSylSifPHpa5VTagYJSjkOfCyORR1&3^9Hc;)766hRco^kwA7emAApa)C4al>w^7zv zz^Z<18t!@eIwO>~h`o+y9M-r*tLkT7G8e4ggIHko)Q|^z>W3oyc4PIDxxl{74gjl$ z-Li3A;jMGY^K88`tU|Sr13#?8x$pKasD(nDO5yQHpE*){2 z3akS1vw+p+%6|c$2`y7$FK_3A`}}ZPAW>l$eSAK!5?}9@p(?L6E)I4B|BAq5ZdGgW zgl2WNqI{swNSr^q&LY?orqwUOa6vs>cZ)O=SQ(|v1y-}CtpQdu+S!B4a=u%#hvOrI zL1=fHPekCd9#3@F+cPLr^wwyseep~BGdHnWo?F?WQS$7An%N1X> zCc3kZ8oKi#qC5BC(4FNRx^oAjJNt3OSCvV8^|48b?yOFHWlwZxInkX5llbZh(Vaa= zd^MBASHE&xU&FOqpi}%!#`R@qC7>?RaeYaHgYixUWL)2X>IYD-T9NtAzGS}hCNkgo z7#Y`RPsa60$+*5HWWMuYGOlk18Q1r_ttUg*+2&eLrUO}L`&X_f^KaS5q$khp;Lpcv*Mv54+}$1hU6lsOm=E4U5)J#v<#*`&ZdvDI z?8nlxCF9fD_3nXo*Kg-kfy!?WOW6Z|{?vZ*PF1W{+tZ|^LE{ibUJ`1$t({czm?zsbO=iCJA> zb!=v5V5OOS6ZpLDu^)Dvu{rv_lVjfitNq*VBc>|sKL=P%-?tW6dBr>hR$HA`1E0By zJFr{-Jpx#bv+IX@9&suiSVdKsgJ%qXZ~}HlRlZz>|9*!6V70#b4U`{BT8i_{|IUQH zt^Pz{b#2Z#T=!?pn~-v>-|kD+Ra0mE_KRd)HM)L#1G27~I_tN0BXPQBs_ClwaK3N_>Q&x@MR>m+M$b^M_V3w&`fw{(7aHG%rGrp^ z=EY7&y%M#o47<*~1NiMovsbXa65~*>B5TLux;H&G0jr){rvj^_;|qY5X9E*prFmTo zw$ZgV!0JK+2VfQQu@>Ub-TkwGRnEn0z{+xyHL&_C{sORaOQ->?s`1wVtN3TpxaTs0 zcfjh<-@EaQ!2#ugRga0IfK^9}*}!LxcQx2?i;m;B#=Sqm9_JbltllK7$94bItKwR$ zPQCh_{S{sJgZeA3{U%P4bw5^;bs)PEf0a-C)x}c!E3SU#jzOp9qm59Vw zS*47x{w;C)_v}CDOZFdp{2lub{`np(_U-DdFZ#22hDB&(t0{Lu%C>ynR8I$1TB8-Zs6gLaRUW;)3F^`(y|Um)^+))^4zoH6tOk_dk9(fD z$rRT-FX~`?wm$+XLZJ3)m3A@bEF#co%?ajcfLjD zJ6Bd?zVj6_-}x|^@2o@SJGUY8o%P9l=LnAZ&S7M}b8|A^xeA%@{4>`5=)tkhc5AZE z_I0w(_FS^gc5|}Mc0;nx_EoaZb{<)0JDjYu9ZJ^OzChO5zDL&CZcEnLK0?;neofZd zepytq&h}%n&i2pVZ$hWe&)wg-_D|T~`3A@S&a>{Uf_O!ww~+_P1CGn7xb_88B2+RFo2&6v0pSRLP<1bp)D z%VEbiD48dy|HcBpt($WeSdED}h3keUm4%K|#VHS188m(ftlW+b2R>6qHix}AZ6mOH zw{RM;>f|>LSpEH=8tPK>vmU_8wJ;c1jV^QsK5G|_hJ7Yd1NYf3<|XXtX7z#9*csLE zjLS}Tf$izB7g()-dKvi0O@_hFDYC}-J6AS>UDa3@_^+;B2LDH5XbG&2^?3oTY`pam zM-`5m1AKxq#=ss{?jW%0H*f{8I&wJ*Sj{iz1+3-_YYwbh*H{Xyyw^7ZK8~B`!Y-3g zGIp`yEkoS1+4F(GDrS)CQ^Kt$KJ5A_ZRwEG(A^wZ ztvz20|EJ4d9KztuI1H%m9y6h;A3hr1NQtwSAf;W9f`myrcx}hYP{4BSQS+4 z3#=}^*Z`~~iQRzD$Bipt7X>+>E?IrBz&)>Y2?16eYWU$951gF~yII$FIRE5|iohz& zc)47K)l|PWIA5<#DC`c2?!fA;u`B-1&z_I-v-hJ{XMKj7WIwM0vY*#OHTLtO`_ccY zSH-nVoqF{<`zt--ubQgiueuR`^`7{vOT=GUbNH)x;;$wUe-%&s6<0slko1F1NIw`& z`oSF150+o_`}TwJq#vyP9sS_%5MR9`@zo=a_{xC9SN3YeSF=cbb&|war__kA8j<*F z5{a*Vhq&FG#O(zfaeFF>+xaAJuSw$eBP4FG@EvixKZ)CoNZkJCd$8EI)BOjzz6XCL z&+t9_dEF*F!!^P){OtX_UK5@{9scTj*6SNZ*6XAERbR4RALXyO*6VX8>-F6s{MFB1 zug{$DSN|(s)R)Z1;o?Q-am>g0QM{-+^KmFI`iE~X_E+lg?OZy}a1I@3J<)M2OR3`o z6CFo$N{NnROLUy+M8`2EI?gDfA?z2M{K3=q$*PO%4*&Zc zu-e`t4p<#c*$J%1l~;iG%b#Tfd#A>9=+2k)TS7}MdR*6Cb)OrG3W3$!7=37|V;eL{ zQJvFxuWp*k)-3A_dqeUOU^OLnAMW{eTT_&4w=cvq4y)>(uKGU>r!D~|SECbwm0pSr zcGoc)I6vZiDYwHFRfZqC0zW=*~aeUsWXjYS(x8tBxH0iff!q zY3DopkonH;WWMt}j`_}XoJ=B_@7$cscUEVdOdm2%W-=KkGm4CpX+_4#XjkTeKcwSi zwv%x(O~`!bHe|lDI_ooRRb!p)iDaGa2OR5cbFI(NjI7UaUybz{c98WM29fm{ZjkjE zcw~JBIa!~f3t6AxHOKl4N67jNb;`|7QEq-`!~eeQ^AZ=g=v#?(3nyTV*!~`sqdf7}$H4 zA3)#tu*wR|W3mg6Lf_YUgD3RCwjY~8r)YLy3Hmz|aU=9QDc$G7RXGNtF;xgfY0NBYhgdxt^*xsgwttY_33Rku-YRW4y>kh4hL2*x*h{o zPsYyxK9&{t!R~jc3HtX_33YML9$;0r0W6w1lnWas|JAwX|%e>RrF>m z`+wxGY7u|M)epASAA~kY`@#3(Jj4t;XE>q_{to?MThb5iE@eNsRgHe|cZjcEk@(7u zBfdKSKZ>tvllbc29=FG<5w~|DaeEMn+beOz?G_wy`=9T@V&Crd$rgQL!Kf?gsy^|6 z*G2TXKbvP*n6?^Rs5<)(-YDh%gE@p}XiRv9XM|^<`wv3`@~WHDwXULNBOJLt}i;4@K+BAf8|T~s~@$#=>LirbtLl#DKARbfs9dO z{-8R%=#QE|_=j&V_DobCi;<9 zJEW@Y7Q$@;m95_>9-3fLQaO}wnUaU^Zhz0}`0kDgoF-EJ*7g2kaD%}$Y++AdeiOeP z^GYATJ#%I!zU$vq+m7p&wqDI7y7Q{<(48w0-FX?&opaRCoriPi&Y2v#b25kSEF-#e zG|`=}65Tm~=+0c@8P5Np`OXVD<~x7%FPZN=pUiiDz%k$1qGNR4&2-*K$79Z%NTjwI`BbFJULtd#pZ@8j6tc@f9{&KafL z-+8AR`#aC)*x$J(+245s+27fe?C)Gtjs2Z}#=hav!m;q@jr~g2IUHTp0~~2sk6`%l zr(VwRrI%-qg1u0yWN+eLQ7_<=g=78Ux23m@!C@xd=nQ*m*FE@-+pBdM+~%k%Lt(%3 zvBvp3_BVu`J5>kYgOg@zYuR^w!4WY^ud#N zj)2Q5@4XvX=|1g;@4@}E!hlsq(_CP+`0!NV^SMU`>?WChz-R1}lJPAWnM;7x>CXM| zj7wi`ggwBZid5APTFr0(pS;#>JIWn81>yW8|7h5Ac>%y`tbJo(RkOn)VD-0dA7GXK zG#FT&c&iP5FRtAkV5OHT0am-8RE9oiRjnLigT|)oft6tPK46tpU;usaxosx!IapB_ z{rH)XlJzKhxy`^mTQ$54tUhgBhi9Bx@j2}Cvs+75ST+4T0$2s;X~S;aDFx@RE4&6f zbnyaUb*Wzzu3NqOVPMs1`Z8eUyE+M2xu$sns~Wp%!2Zi%0n^y&utD6cxs4{Rxi{c-#|U?t3ch3h^DHiqUU@xKGC zsu*j6Z!a{P27GK5^?`luUOKSaVlp3C^_0y7R!NQQftCB7I>2g-VI;5`)jpc&`!WA;JO{2@m-72u(#%v>`N=J^Hip4j}C63u)BwQ?1Ci?<#?Yop5=Zt#Q#a|0r>bf>nP_OzN zU5vVPf7Ddi*WJ&eUOmlPk9w8!*K*XWhes8tS2b+9qF#NrTZ4La`%OF4rLL~aU^m@T zGA8!q=$d%H9s`0W|3{_4^X@>hLJ>95r32c@JRd`J4hcBCI%@;~Ya%{ltP zmfz72>IQwgAN)7QS2;f@z8X-<`096v+dq@I{iGUkyJIQi_BJGLZ^;q2CvwE?*GSy{ z=X?$;1x1|km@+;M8~Unm_nQA1tm{|4AS0FwD&K`4nplpP=rR zU51$1-n~E8{>_~B4u=ozbxzya*L6h0Q*Or&SLHeR7V&O&UE)>qOl5v8*InLP7Ow;| zZBvE(Lq zjd(1xrz)GWd1t1aJ)ZO=#%z>MoaGtbO{*=1F?PF>UpqYYx#(!vzm98*zUbOUh zS#Oc&K%J3Z4wp^%XBy8J9L$vosuqkDP2b5EANE}!>Uus<(m8der22#bk_L5aO4*dn zk7ml*<5Q;Vo7a9{(Q19HpY`ofef!U~J38jaE1a&aj(7cR+1S02-A<3Rhgx3S`ke8K z@|e!IZLT5QvvsY&che>fAdjdC+8rlug;Z6I0F}Hy+vB zJS%&URnwud)}mp(?PqpMcD$3i+{vkKdAFpZb?(+~CcNku?Y#DcyLn4CU*?A-wi0&Z zmld`<>?s~$sU?Z8*hU%^E&%At!Iw%vMDq0z5PZFjP$e@Sfz@%*H z`c;>t70Rbe*F^=&*p$tOFy-v=P5w?6H+Q;Q3mT5FNvY@L;JAC5Q&diW=c0yrZZ$N< zdAR7_;-$T_@HTeR-8v&SPlw6)L^b+P_5c!|yRwrw4CKm z@%*h5Ez<6WST~AGwt0~>(P3q`T&Hu*5}h4u)pUOvyThY>69>=e8$-QAEBNxYKR*?u zSPv9!UTG}4v)fPNsbMHxn=nZ7CcmDHccr6jgF+%Zd-mm*l+Ekkt|w!UH+enVB5lN6 zYma)lHnU&OcIf)-lG8T-EN7vsvwMYuM?8Wu#h!KBg?e{3YQulDLPr>}Ggzc2wi7+^ z?I>BGZ6SR&FGRv?-a&RCYJ@CvPE(owuCj7AW%GVaIeT0)ZmvZ^-G$au?i{u8jGgPS z-v5@);3Z7sXQ%ynT?Hb0yxXOI7i=lE~mM-h1+pOx<;QTaaDl)evDy|Nur zT(8bB^=dLxuQHf=_2{d5mGWQKtJ1cQ_e}e+`>K6hYLd$YuJEW6J)6&-5RMnf}9?^dB}%KXIPvF9Mi;qmb!8*p$ull>Nug><9ZO z`@vt)pVPRceAkV(^}mWs;z(SQN#c@yOkC26iA$#ZLtN61iA&hyzk7V;uV#GJ(1>p~ z<+{Xj(TXWn+J=0)7yLO6*>lD^Hkf+VMXzV5TZf)c+#@`kJs0-V^NO@i^3FPHFZfXH zJl|-41<|GoCq%Ay97KV36(oMwYDw14C?hF%Ys;6E%?B~%?D2{9Qq3Ax&afPu|JkZn zom9KT&IXRPPrY(nlhwub(==`Ot80dPSawVBw1}AHRn*dr-|6jo!K{|;1WO-8h_wBi ziH(gmiVio4klZf2LUL=H|n_5qu+`EyJ;d%R_VqxqbU?p7AL!>v8bjFr#K6*mH8Up(f!x(y9JsG>zqC$$SYSyJf*=tanDI+;@g4R z(l&e}>Dkyfl8AR}zocyb5mU|{&$e4=e(B*-tE48Ut@Ugd+Mnw1!137yW=Hoy0=HAH z7u`Ld`tkN@M|kx#?&V!DqM{&MGE2C`nkP(H-e2rG-AOXma<=%6>GD(Rc28 zRa>6!J^AK9LHicBgsYa#6Pns)iTk>QORSFOi|4l3Ev*!BTAHYvA|1MDsEke7d^A(e z9$)fEYEiGq*E%&}n$6$>sl(q3<~#L!JjJ=y-8*iI9y2|xCcWWBZ{&FoUR{yjW@n1v zsEwOwhU~g?19i2(y+auo8}Pl z%D_4P#%t$^Tf4efGcLm$7(c@EQ1wmTm#t^>&sB04Hr~2H)L!0R^ls`LiLOI)srbl7 z$>h5cvUABRWD3P}S=rM(Ih(Ti*-SZmywK&2#qw#7toJ^(vNdqJef8jRS%qh9D zx{o)=imr5%vniW@#+0+iy_e`(M*OXBBQ&UOyJnHDW3F*)XS;@CmxPmR-FNiy<3&75 z_UzvOleb~ttP8c@S#_?uR?OJb@zE;JeFyl8S0m)W1w+y`9mz{{VX>zOvT0>4sT zKL5_$NMT@tp4ca4tLRq82a-XC3DSpA`qF^*_hq}+YRGrwT$XKeiu#hW`QA)9d%WJt z8kVExncHlu)XBEZiW-jYg(IA&w{7Jz%`DS>uwxJ2P2n-mW*(LKONTw=_e)tIeBZdD zI5uv(sESjOWXr)VQg3M`=>@YVvY6LpV2r{RRL44>NEAqpwP?tI8(3YG4<;6SM}<~H|o{(|4^^k?uWBFvZ95;$(axQ|(awK`zxq#pcNyb%cQAg}it)R1h~IT&{O&Nu?>aGl zbs^(ljTt|?jq$gEjNfHbHouxFXODlY|0sX)h|^N0|0pE=#|UNrag^ylVwL@ei0MBj zF#W@Grk@z9>_5&a`wup+5#3M99#^*?oU7~y+c5ng{~P^a3#Q*Y#`J?>Oh3q`Y+lt5 z{)+yb#w9!^E~zf~zj4V}CN7Cp#wBq~Tyl_!OY}|7^KF>8WQQ^?naso=&6qeOk%>#H zFmVZ+viWdjTtef-((+g8##c1ny*2yW{8e3szw%-DtG^lk>IuVNEoJzt?S#LwQ1VwM zO8$yXS^mmK$zRd;A^3;*ipRuP_x{WHYS$RPxw)Uz%DHN=b?hjMyiBD| zC(B5i*4g?cW%J%lIeUD(NxV64)@G|%-6HFD#_{&omX>kiPrvU}&#<{$ROT!9{fBz+ z%IB@}IVtkm6|v^tw?kG*uR5E4ToHwmU9JfLF;_) zt4ksUjl1iK_O;q7)Vy+EJToO;;#*%|^8VsI>4a_?vbq76rM)lD`;xMG!%O$1?D0(@ zqb>Gym}o6Ln`m=>@@R(@&$FCHr>=KyTHV;aQT#TK+{;#;Gi>^KUpOw|kG6a$crmA^ z$a$Zk$f1LeWK7HQQa8Qck~Y&6vNgG_WU(S|SwCit6E`)omqYnXBWFoX4VSkzechv`m*d&&9q;+#;#Th=2P64G1>QoN)=8p(@!dp={pL#s znzfULkKHWEi;a?5ypEM^+A&KuI$J1bQ#OB%DQAzDwjZ=$;*y@qxJ2E4aD-G~>1iml z`D=BsZCkOxvA=bC^xpyb)8*9`_s6$MSj3U>isCHMYV1`#2Vv zr8rOQzQSeKt=g?ej|55Ud$C?s|BsaQx26CJ4JX&D{j$}>A!9x z9h>VZpOfYYplgDGc^zu6UL8Eh18v$W10+wmD;juFkzI4_y7)8)WN zTaWS4IlSSf-d;}=C-Y@70fHgnnxd}JL1H(arFeW?E2*(-P1!5OM5%FlOZjY{fpXv0 z_2oLtv=wa1=B=4>_ITw(3oU!kUuI+Eb;h>cfrXB}+7~!C+}_EG%Q&4UDI zu2d1-9T_Q}e@-YqIB0}4_qB(tSI@apY4_ps_qC?W3%c}@?_~C@XHz!cf+=T@|BC1M zQSW08gTEj19?CNBgH74I>V4396~ojkUGo&@xlFw}#?-61U)8It|4^^yG4;q(S+CfX z&8zBFY1;>nX&-es+Q(L9`(RVrK1$op>Gy}KogZbsGuZgnMEU)}rZnFD75++Hzk8eU zyHgpzs~y=>>%cg98FjLMR|5pDI#q=Mwnf{~t zfa3n63e$i1Df^FBO#g9A*?-Je_8)poKQWc*FB&oZ#}KCfU{f})>Oa)&2ahZJL9?&= z!BM0iJgw{p*_7=EuQUB1d;C}Q=QJ+)7Vq;;$@{Qz$pBI0oiy7W0mf?L28Q#Z| z;dM?i{7xam^E_nu9#@9fn4?XTRHYul^ouSD)rB%rf>KaP+D7{dP+Qn%PF8ay>GIk5XQXi<+iMcBWU6)LZ>Z zy3STlRz^}F{jfLsOUmXuGUe=Xs^cUn^{8cx9%aSoQ7;bsUp?yiH}t5-jNT;T(4!Pg zIeVObpO=RB>7e9&PLl6)xsvx`Qhhvk;vz+%< z9^tYo?Y#T*i&J>3jSD>Yq}lO959)9sqj^#Dw`M#UJq-_2XQ_ddGluoj|>^jxPQYXbWQZ&gi>`1P&eo~^#py4$=+UoA) z-CpnDb*ASq{)Rwb!HCdj!Uk&wiX)4R#dDnerJtG^$_!ivOFf$T$@{hHBrh8$k$39+ z>PyPzWlTAHJpE+6<-mqpY@!XG+HN`#?`Y%9tO7Rmfs4iS<{o#ByylhN)6>gp@@l^4 zf)IgQeH+oZK@17=Y*P^aW*k+|v&v}|W;lq4+*sCD<@~d_VHf8gbnR52{ z>9Xf7pFO&2)8~PST^XJ8jy29ZxU>y3axEwy>JjH)>Zw;R(ks2e5&qleaRRf$0it@o z2gLivP8LT5Y>?J_Fh&+R=b*ILg7tFUy6N(((_`cnE3{OwDVrb0l(WazP5EFsq=lBP zzR=rl@uUxq@f!7A0a3{#gn_| zO2>?yC+jl!k@R|Kj=WanW%GJfIV-;-5<{vWU?D4>X<*mZ+RkBsw^|wpuU*0KT zT_=|Zw|ra+cO-bs9NNUwu1&g^`F?G|^u1>VoAtv)^{h1|>3i0Rdq2M;7I- zc2(n&ykq;P@_mBi@~O@<6>Q4p3z%~DxJC^_tL>RpZ9j)Mwev7Bbc+7e)1_5Yf7gp+ zwtC#H*UIxikf_V?SnfJk_Y`&0rAM9~e zy_&_;D+{Jxxij@@AXBg2GWBZvSM|!7qh9r4>W@BCk8UXI6`Qj8k;;1YBil!~vVE{A z+dir(+sA*~&X+0Mc~#QR%PZSCo2uG5d;C}UtN-M8TQht+kKx-}GJHGbMSC-Tw>!hP zf6a@&CVcyA#_zJnztw+yYdpgMW;_Gie=JmvXZXmBXNY0OGrT7KN49c21Dmqr8JaNt z2YXzdelUdT2RkbJ!8iMjL?65V|NY=^p9JKo1T=efn8nD^GhwB2mG?R)NU(4n^T!&~+) zFMSueXI}E;ebQay*}vC4@AVoP{8>E)3FD6567793PvjAiC7ClWTqDx2*o> z)3UV#Qe-2Tz2w-G&3iHB?C}W}4K3fyYi6@ZFVfb|tfAw;$19vGYtC}v8@_b+(3;On zDx>4|-de#Ql2Tn@IB2ghyqiS)p|DUCH_TKT`00++ZLw4uwYQdhq}WX!+o*~>XKePD zl+7<^%Gu-J;!EB~o_2ZALhh096<>0g@Fja0zGN@MmvmF|C2tvi7!^5Y)m1nK;3%newp5j{`-zdmV zX(KB8@R-g|6 z$gE*|aByq8kB_T5SuYvrqW`#wtEBgK4_@1jo*JKXz2;|E5V$nCEvUwyD?0j8Px7S7 zHnHxd2hs^c6J%M}^kw(X-IrTF(ohVSUy)Z2iu#hW`PWQ2d%V|9nbo@NI<^(%)9uP^ zmpP5(FL3D>8thv0=3S2sFK2pok9g~4Kgd&%B(Eft{*@}4bjwYm>2X86Ez?Nmd;GjC zPsc+xsD_ckW|Flc$5CGq-f_p5l+BN3%Gu*_fnBXWE$(AG)jh_}aCBFvl=vi<6)Tpw zu3TD{7rY?Wvw?RN@3sLg1r6Uj3JVL*iVUp-Bu4ACC0$M3WIG3Zl)aeHOtz!5tD@J| z+KSyDtrcejE`CYb{6VIiJsub_#>!&IB-?pWNp>-_#yFkK+2f)$c!TTwUB?OgVe} zmpsRJypO%g_mRQi-jBh5FY`VwFzUVwdyQ#e?a<=WM%)cRoQm7m%Gu-U^n;$vxYq#XxYuc4jeBKz1a{nO784hyG4Y`eGwzj5*}RHp_!a#* zjZ6M%+!CuhKV#yOuXX3ijIR8S(Va&!I`d{`ywc@lLm8X0`Ercz%pU(0@zwW?vkX#m zeEWYI2k;}tU#ZJev-%**Q&W9#yqfypfBKH%8n>k4uh?-(x0K_SzQtd$$JJ@)s`!d+ z=l>L6tyIQWY)a#+>P^;K)>{;B^ITY9TeHzx$LMn!F3q3cbkXNE^03Z)!aLT#lUL39 z%lTE)CkS4?G846RUnH1x_^vN4mId8t*!}-*t}}A=5lR4}0oW zXPt|n=|X+sp_Q9Ono>tet-=dp*VhIzhf{g7i*1}_{Eh~SFmE$OLV}LMr}wrmDVwj& zl(Wab)t^^q;*xbtTvGUrxTFdbm+b#4E_tPlOWrHv5;kSy5*=k+GS)QOD%EI}?aKX^ z?WWg^cKVq7)P=8g#`V<>Id9C(o1ROqH}#&qK1yKeF<6-5T2*{uPo!j(L?mhcc!aEc z2cG=Qmbo%f{&2;~KGPLB7ker0Pp{^~rfj}GQ_dc5nU`jDJ${$1qrRp+|9F~H)%g`& zWl!F?c8%-CJGQQjm+rQa-d<-n3A{393um2h7aI)NC~0}+$SOgaXX`h)qW!3Shn(sRH*;M%QqL{yQXtQ2 zf{|DL$m!lKvUUs3@|Fp$%GD7cf0Zs7v~8Hg^2rKWL`GlvaF1QG$-XNT+YclumhNAm zXl~-?!=`M0HdD?XZylOvmEn2bwspfQ_9uh$oNlIDyGji!y4^FK%p2Fw#LMLIEbl_| z9Kn-zD}^7YH4xtr?v=Rj7%LefSR->EJyfnUVV|rpI95>@lcIQ?zElymxv>wMviVm` zIeYw9JjeIE4=w%T_i>%UeI|pygn19S%==(dHm`ags(N*fsaH#xdQ~gssY^4aUK#9^ z^P;}0SDD|aSLaE+I>^+g2TZ+UQ&qiUkC(Q6aK-J5m2tbqmEyRa&8y<}|E8T=G40%w zv~v;Do@XiBc^zdtXY+NH?fh5xtN-M8?=gPYmhroGjNkoC{O(@H@8&Un*PHRH$&7zB zX8i14#^2s&{4Sfa`F%_|d;DAdhc)wk-kSM7ucQ1vS2s?KQ^tvGO5;Rz`$3s<{B964 zez!X_epl5GvN{dh4~8(hjfl~23K%|-P1(Fk$N3fgIgLwtG2_Dj`f6M_9iOzH!(_^*hszGps;i*o*;n{xhO znsWXio6`A%biAniCyj4cXFS7o<@l>&Tm026 zC4a@Hl)w5B{^~#JYD>!2wYpNjq3!7Hv+U$Lb)C!{mb$o{o93z;UFcC`-W<D>E4n~TkeVdHkrsK>RgxYzt5LV)G|@0{?=s|`)Ye!H{5gP3D+I;& zJl{V=Vo+!&`QYA3mbcA9e&2kmj4$t~=&)?0;>yqf#h&KneAtxD*I~-pIfUc*htq94z;mY&y&lR@4I(c1)2Ro*Po8`52J z{?2?^nR4yrTLoKW-RjI&%-^_15!r0EVq3V#hfUdhKc<{LzVOoDR)>RL*v_lzXustA z-%jScB(4c|)^0gvqIjo{yL!DF8smNH;tj$0^i<*P^xooLy{|}&k3~p6*rdw_Pn{tb zoxLi1)pn<1n$~ee`<9y(SK9XXVN*6=rrk~jdps$vytPA?1^~(sK^3Ms&wFwg!4bYU1s<~dWZqQ}f#A~bMlj~~9SB$%) z7<}caqWt>f3f;h&K5WY76Pa@McvStG*3Lc_cFR6>vQP1=>1_9Mr0XkLYqu4TGI?6& zJ-uS89rx~bqOx$r@JGTrZ5N8~-m56xJ9vl0i}zI4Xy#VA&4o(xlQu<)fLS^|r>fmn zRN1olOUmYNGv(}Y&9N5N9hTbK-RsoLzRDO2XI+yCu9Mn!aMuMboG7q?tG|Nx@Y;9l+Bwn z&#KG@@`dbNwGS7}VW5;FB_4^yws zGxh4;SM};CN4)T`-CJ?hBRr)x~TVpBG+s#m3L9|lbOsQiugu~6AQl9la)%@0<# zkN>8fS7F+@mPc_re?;2(4W@nXW7;{JvhCcTY3J7tL0V7cC^?MUN=Qi`Hdy zj*pDq!HyHnP>vU6^Q!Tp>hyzY%s80|%5gFo%s81j9OGo#D#yvNDIF*CEBbR9m$38h zK7Tdu&R03_ZVWT;ZV)r??i@4kZV@x@E|!^h_m-J=SHR4xW9QdBV&>TyGxP4En0a?> z%I0e@m@_dm=ZT*AyBWRI72+$$a5PUqeI z(>$-zjLYcBG5*R)IsQsVIWB`uRpT<)@mHnQ4X8dij?o9h{y`s1WOM`ecxk?Cv%cc5 zEE)dl^gr-d3g)|(Jzg5W8}Lyq~iuJc_e5LZcs`#q3e91wE_vy{>KD7w%Gm-E< z&A!3=Y;-Pby>D81yBXJO+gEcc>#YB=wQB_AHP;n#`HL-E~V&)pT>~G`_$4_Cn1)E=)b< zU1eNn-`_i5_j{7WE^zXPBpTh}SwW8v+vxNW2emuhtn^PG@6-pM$*UhT&N8$?c;?XK zyZ#M1*=X+PmanH!Ki}W@Z%O--?aMn>ofGNQ=uJtt8k45F>&FlFIG*Q~w|3?z-}>XM z{QaJV1a7FAQ}aN-BWS*>PPhEoBW;>oHu`#RZ|S2N1nYxZ<_QgXpJO1ad%*W>XX+pnkaIrCtK@2S3-{V#8;5V)h7 ztLBder-Q1GDyz%$D48zDpC0;#&p+s&Jt(J7v(Y`Ybk2gI&#F3v`tLsXx#jB|)X(?( zH)?EOWM3=Cy+>y{ZLQzf&GY&y_amvNdc0_#)+a;ldA>QiKs`-^tV$kp%tvJes1}?B=z(Cg!mru`8}E# zeh(et9!B^lqu=8x{T|%%buq*5A=gy_T2}*UU0tGe^@7$_hgj>XXdLS*#IUX!(mFa# z>*_SED{lFE8m%k7Z|?I^nVyezv7V1g^c-Y2JRdm>&j(+t=fm9RJTCigFM7^5kUe)I z*>x+>bIvVaEBkIj>{nmgcWv4{^({kwgUSZKL0a+~D0`wO?Yoy~U)9q78bS8MrQ|m# zLH0y$`MMbO^ZmHa4;P9r8A9y^aPNXD1v!3Egc97qh zTfSC)XH(9>JrsvLnc|T79Mr^$Lry{G9G`>rDDIfgze*H`%q?FBP(R;Ki1S?PC3lF| zz%>@H!Fu8~u(0ppm(-)I|2oo3G7+!A8satRMS96C(o2qz-og5ZKk*oRBt8QV%6I0L zuV+y|-%kkrO7i;*j)VWI1o2-TApWbo#DCR=_^%YdPkICY)o|jsQv5#m4g6Q!D*h|J zFZ0h=eubamKrDWSB+jPsGkh&Ss)PyogH~V3A2cU^*FnU$Z!{ymUB;KBf1JfNjN-4J zJ}m8SPw`jTDE=zv7vitN4e?hTU-G5+D|7rGukt<6NdI6qid(uP;+Ep_5AuC;-p|Ly zvR{2lQBA+}3-+t#^nT9w%{@P)ezn|0{pzDdpnd*J!Hz9FdON-T7~qy`L!^6czb+o- zu3q-eb+DhW&GV;zUdh}8?XITQRQPODC4jnnz zCiK{ItI(>uSA1^ydNTF%eRK4ZRzfe?XV6RPklvvu{lm?mmsB+9C49|#3Ev-IexUu8 zg%OVSnYTM-EjQ3DgXWa`>Y^JwB33&3TyD3=chOZp|5v+u2KMezPE#XiQtg>VU3E*Z zsic2@DpyEQg>L!_(<+8$32hM?;a(!t*VQtNTfV+W{d_-j%dz&ebdwxA<~-$8 zwfR`Ll-2ILcOHA#9zTq4$(E8p|< z?)$<|dQ`Fv@rkN+&39$Fvi>2jMh2c()>3n#dlv0W>*2Z^Q#CrzKicU>toIJ-@^QGn zd*imD$CvaEy#a~PyKeOd~zmSyVcjlI_(@{U)kL&!9 z@wcp%{>lW(^Wv7TttpR%?{&wJ4$J2gCoVpDg;pVvhx_kLYdpy=z`S|pIa>6&i zdqMyC(+35vnf#k(&xh3754Zd4#$7I;Tl=ZL-n)fkNUr?@^ud<(Lk|}08am@Z<rF!pE<1=w9qZ(W-E^gz3+KEKl7_k-3xDgYp!kJ|Jq|l zpo?7}P5QSE+T3rZ>gMeHMdw+*zdp>dNXX(O)AeUJ_6uD*b#!R6lz)a+8RZnlEni=w ze!f4k;%57k4R$)VTVUm^{dKcj-6fel?)_uod3s6{pPWrn`BkXV)&JtV6@e924%hU` z7@#fJcB!t??Yg?afYJJ8-K&L+9J@^4bmXYe@kwTdhE5t1>hMGp#w}m}LH&IH{oI}Q z4Ik`x?CYG`dC=^gZmDMH@X!^u^2}MgwNE9>bbhPq_x3OKdR^eg0b?}3I|pk6%dXb_ z)vBrPl=B4rsZDi4s&reU@7rU1s6)5;p~ngj4?U1KG>lum9!C9qKOw%yxBebJ^m`Pc z-(v~keU5NnPx!Z_-=P})9^CTvb?WE)YF(xDKjIWg>#7i~t7f#Wj?lWA5o=u?iDO;m zp>-2N>*olqqgk|`*3r7+maofDKi@a^`EVk;XbG~5%ICwFo>P2y{Dn4-z#l2RexYukH_j+O3 z@Zd0tZ#_+Mu16^@@gc=0a?95hsGsl0b$-OokMg1XsCASd#plNW%8yD(`B7^qKdKz% zN1dcRmDZF8*JQM-%~%|PYC_$y5MhL69<2LE8=foNBr%>iNF2D$N!hVJG1d8=B}JRQ8f*nM|`^{YCbx`DDK;X0TteJw(~Bh8XNu+_L@ZuEAbn&UtQSrhawR zpkK}QIbi>C(NV|phtoMX@jBqvZI6w|t<9-CJ?eGzsdX@u-@T1g^TTOt;DUY=HM`ms z(vJIWqb`Gg8(orOQ}rc+nuJ^(yGd^`Zc6BJ$EBeiGmidLae3oL6k4p}FKljC>{k3n82WA+sKy!FX746uAM|A#~ z`soHOT%tc8)FWg_{-gR|?kx^IRd##mw7#=KyML-4#w}l0p?<#aGwYW9ixdwXtG>5) z?jLo_t$AjDj{^ZVo=qkV^|?I6+3(QI3I2CeoDWFqg4Z(l=tyY<;$eR`Onw@W>-g+Wi`mi0u|+xfn^ z&xf+_%IAaaiP;VIL_dQ)k*}3K(cI^J3B>`dr#OK06bHc1`7HAD2Y^xy} z>f=l>)W=bLWU={VRDB$Cc+W2y;cu^E;BVh<;BV(v^0%AI%bA<_MMn_7XnO;{=t;pZ z8foAc<(BzHmk_@w-#3RhYOaC*YMX)o%G1SH|7weY|B745e-)R#{Y(4|?B|sH z45s)w&519`7DxWz?;?MY<4QPxkXz0l97u5|eBYe7@E{T29z^l&B`Ch#PQ9Ou*Wqp#nvjI;b(UAhxE z-*=P7>3U18OV|ya*V&P}<$Jd2t!fVq@!fJ$U*^fy(AG6ig&rHeI@Eo7n=o$qx(4<0 z{gPuo*!x^b>eS$0Kj*-aAKb>DFYd8yqK9XOB9navC)N7R9Xj8?)BMMQb-M4+Y&qIq z+xGf>U5c&ablWt0_1m(H45{$@KYGtvdqPKczZlwL#>UVmi#vsJ%h!79=lcoqJ-+q# zh#-CU66w1`NuMoExSt{YHj4Dzo}}+`%h%PZpYN-6)rah&705372iZm6l3nx}*+tz< zu#1i&yJrhpR}*O+g^@ipKiNgOA@A4~poZuz>2 z!GCV7_U=U^@3 zdE|4j3h_Q}r1P&A@j!CR*SD#k?dHJMy`%@# zl_^PeWgb&qnQ*Er^PK9&G$OrZ57m)5Li)&Rsw=}SU;jbwV93X^u|T6}@&?pW)@$ zknwe2=u3V$6l#0#EfM`F;ZEiQoEr93y+89oZ8vki9Si*$q39 z{cs4`5hsy7kz2mDp?j3D?YI&#UY-cc*K7wF0mBFCvwZzqYUwh=04}f z{Iwh(%JF=a3~_yYt>XF;V!!&@zH3XoIB$s;=PmK#r0HKG=oazf1QIV!JL1I&Azqwx z#C!9M_-|ei56%bT!-*tb9B%pgBlYwBxXzEM#Gm+y_!ILP_!FxTf1>4;X#PY`;!m7T z{E6L(Kk*asC+;SG#F@mCc#HTFXAys*5Ai2*%hyY&pYNM;4(=nKZEFM1c2(lpzASjQ zw;6c0ZxOF{Gve3Ivvp_)w|t$Bc((a|LY(JPFX>8k`^v_u+xM30_En?0eeh^KV*Uzb+?urylP*nj}uosgE{eV%$L8J;ugNd-~P3@49WKzS3Df^xn8CC zi!bqu#wWgn`N){xDvEfnzQliJZk&wd%V2&6j)VCUKLg)4H{M6a!*Tv#K|}taiuY0Z zgM7{ToP1x#EqyKDK*qzx72j?wZYd$+uYROn!g?b62NS}6l@QZ(S%3ZWhJEam&}~sGsl4b!ARGoLW~)Dc5EeEpdE`F>pIhdJ?Z|I+!f zlg^Kp6#urD;@~b*JRG-teVF?B{`ZK7`x?LK_lk%6(s?fRlK*l%T3ig*evQBVYjpwQ;&11=05Z?(Yy6^L;;m&q(VCQx z%KW0-N`6t9ul6ncS1K>n82?r5ywo4X&!F-LIWP5V`GaxgrJ9mI_^s!;%1ixHe7nkn z{2uXFDy~n)UvXTYioZ$-|6oFVk8k}wV(V9&U+_ES8L)oEEnnX-=vQi8ab9W^<)zl4 zywqNlmwJoxQa72Hml{U-r+-l%>TJqKT~B$b-12p~IPy|Wc|PLubB0m=sXO^K>yn?d zD)~9NEb9yws~ykL62w zsgJ&rm#WT>j>KyaNOk+x6R!cEAKx=C)z~@sJ@Zn3)Oj8|FV!KIUeZ|9ul-(msXs!$ ziVuHDsTDi4W4^!-cV$bmV7@PTSj^>zOK#wY>qC4i7m0VJ5b>|1B_0-T`FaTT2N4g; zxAMs>Utq0UUH7Q2=^GbaY6Cyq^7>Z#rb$=mxm|rJk3Ku~^L>Yr~V zez@Oa)jyA2-&xf^kBi^uYy5Dr>kmF89v`kZ$n`n7{vfxq{-7ywud1%4;)j!Y6I{3Q zJ=Kr;QhgkA`If%K-#(n`8Zdu5x01izT;3?jFS^pe52tven0GfWeo=Gzud)*VRcYeC zx<&kOw}~HaAo0H$TsPv`=I6Y!fgdgx@doFo=R6nj!+mb)x&iSE^ZkU_ zuT0r@zm#vl{BOx9uV4!07bG|E!*R>k@#Tk0NA;ci6F=N8s^9#Q&JQO8Kb)#Gs569Ph4)XnkIM1bCVlF>i76U(A1nD0)Ne?MS z`bZAaOSt9h@4*jes(uw;9^t_)?gw>SvP-vk`gvWZG#hkFMurD-%hv;`pYKaP8eh1qGpgz|D86u2 zXH?Z6TtqzKTz`;Tu0N>ijD8F6xvYO%`>*MhKujP4tsXpguQJ?cm z{O#tRA4*T;^TSkrQE5;78qXcqX)tDI_!9q>@<*9kr$PCnxK6{@_!-zA#eU~+%^&1C z4Jv;y-B62!d>Mse`3L!0{T^~%#m9ctB$oY( zua*7E+~-5;SMvGD9ZSFBYu2xrf7jgST;_A~bKaivHC3I4DU`=qk@7jY<>!7V<#Y1= zgxIgXw(rJOr@@8lz6Mg=SARpDhG4445J~&>LuT(Z0(qU&p6TgKeL_K{*~S)(xjR z4Wp=z&qAuxkk(MAVYi`917EMEe!g$YIT%-+26YZ{Jt95_8yV^}RIL?Vr-847sh{sB z#Cb0D5_9V`+$X){H0d3ze*}{rVtJ=nun*}a-17B8>gW3jp?@2dr`Pxn1 z;5Y1Q^MJ;`UJIN*aYUd?{;ff+3q)vL4_yx$^XnE})}beKE0V9$g^&F`m|MP%qJF-= zsCRqYZPov@4?MNl;Y^SA&QqRmb#1?Tu3MQLSv^ZFSmCwjf}PJmhbDeEj%fWyOhZ#uvF z$Jb5rIu{iF^DBbaxeoC<*NW()yG*>zcZk1vc+Wk-g^ADkHSs!g%h#`|pYM0IEt&7l zh;j~NQ$^-?v?=M*{LvJ*j7bI;@Xzql(<|vH?j{!=h6N7@utpioK81xdv1NFAP@cAQknG!JMQ}2^7VA;=leNI&(2q5>;i}9f%o#~ zDmB|>(rJqV<)2?IklMSHm;L6)-iMpk^vz#l`KIE^}cmCRY zE!z`S{lSw|_tjYaL4J>w^#|p9tvUXW%ythnb_Tva=3A2WaoFD>>*GlOhm4bnt8Rw5 zaWay>y{v)1UBy$EOr6BZ|HvBGEThu72S0w}UVBy@@56H}ePulL7~*xdCSGU7FPc>F zi*o$5Wqex{c1!k`xRd+`&B~hS6|zAZ_~c(N&Bup?YpU7$LzbiY2Q6X`>vk$)eW@2 z=AwOeFYULFY2W3Rua8kb-;eA3u&48*5}hA~4ChB?IzM_E&X1Xf^J58}9}#qZ=;(Zy zOy@*5IxiN|`EiWS4{rH-Hudv;Q_jJxbI$s4d^?|m1E{`1GpcW(&cU;Wb8wL19DHIp z2l@ILor8QoAqsy0AiZP}=_Tz+FIho)i9hKj9Z4?wvay3kMt65`Fb(+^ZkU-uX^@Roj2@VI=i_uirR1Qo7(A9SPhpq3qo92M|??|uy{{H1H0#7cV9biBFoTf?dX+f8qk_0(SJF7i&__4O^ z?L*p!r3dP`6ICR zx#eq%NlkQoUtcbZ?Tjor?d|$kbm&_qi*w5f&0I&OFYOjKWsOIUX4SoNI`8pL>Xz0o zpwe}}+v6hxeyN*Ev!mkjzzi4f1dUp?KwGqUYHiZO1?^$vpDc+40=@igTFT$7@anQWhHPdE&f} zccv6GeVR77?KjtAqyPANEdpm9x~AEFcZ4Qj=vM8>P7%5yC2nXv)^7}IQi zJ7sUJ=a#R7sGskf@|-I@G0!*ZiKg)T#C{)~b~-RcK)zfwQnkIV1;z3Mx&-(VQ|4dRMVl=TNKMEzP@|KXZLRDY1;6FI(w z>ko4L2*)QHt3Sy1Wgd&FuNJ#LjuX|#Swi)3bW|Uw+c(t5QTb|pMEwt$uU10T|9JQC zlt%Hl*Czhp><2|5bu~kMP=dAICMy zZ|?8GeERD5U_SjXSe*BShS39(;&>%Ob>tFSNVR|`nL;`?!(A6c$D z706BJ$6dqu(T~oLt%mbs8=W5q===z#^J5a7AHUG~;78{~B|0yb(Yeu+&JS++I*j`H zetgftXJ0r6Rb7CDIM1bCk}Cfgrzf%Wl3#>g@=oX_8%ZxIM0!bI(mRrn{t-@k$ZFC@ zE|XruEnlane!ia&`qh%hQ*HjRnw9UQ_f@-P52reATKU@fY3MnZ3{4BU{~CVVqsWU2 zUN4J`^=WR^&e!=ucK?&Vj0)JdCpaL>y^fmx>-~cc6dbLoeI{I6YxN*)j;_tLB?{-# zam&|@sGsjwxaX30SPf4*+dXaUeeSq8P43Xo<#w^Au5-@*<(|7sN6*p`SG{V^vh^K) z-NJ7~)0zI2!}A3CpV%L8G^J%w&k{R=>UXmVx)GjC_p5&<-KiOGv;+Q~{ki4q2h`8^ zJ7-^z*L(0%yBW!!*!Rl1!0FNiOIQE?cU+5PDDN?H^DEDt`|Ek9IXd0a1Jf>=?`~UtgzwzTdK4UfVhm z4)zxJ>N&J(lh-+WkIt@tKB?|@!D^>Rf8VBFv!hOUkJ*~lui2rees`))2uQLklO|=o z&4CYAy$*U%W{r0JhRoU`QLl7S`BMd3YVYY@Z=dwJ+BB^f1BYHl(Ngv!gvTg91VP%4?Hl@&W z%hw^)&-YDzj|!&us9p3P)rH=p>e72ub+RW`B75R7dQZAW?@PVuy-81Y#C!A}#Vud| zL;ZaJZ56M4&hPvkR^RBHe`h5xm(o23yKT?dw!ri?XFQ*u>**bp^`6g~HIDvW4_F0U z95X*~V>A1pVd2L#jnk#lHJq_ux4(;n?n-#H-?_TM@64_8JM(>W;xgLyeHN&p_{9EC zvIY&K_{5LpG6bifxC>W`zo=)3%cx|C%i!w(>gW5W#P7z=V`*Z@W2s7cEF7PkoZ@ti z)pzFms{UZ3yV)J%s>7SA$p3F0UUTaYnqp^&T_-M*>cn-XI&mF3M%TwVXQV#PeM5a5 zbNJhr8tRyApgJbMJwLB=i^bp0^-Gw)om=K_zh@E6-<}Zsq6zUmzV-Lux_#>R_)^_I zu2-bi)nHmz#_|U@P+iNnhPswTzEIclZ>nd>buGD-buGW;`DhjE`A9|22gkDypt|QA z-_EU!Z#VZjmvPAaoSPDVl@R;Y*Y;h-&rrdL{Yv?9;<8^UKTcfd#|k<>0_prnyYI{A zhpBvIrksPl=^XsUa1K7+nMw1ZZp=Bj>I>&!1v&@$enOn*QZK1RddcEgdPy_VOInj& zGL7_-Ii!~~CB399=_O|kdPz&tJN_a4qXy|AH%KoTNqPyleEov@`F=v^S4oDs*cAQO zBVU%nZS1ZMadE8f-p_gCz9ue5n*3E@*0XSrLm94m7A|A!6FSAh_n&k#{T|!q37F7m zzyI3p$uuu7ZPzq(veDRjCe!x3nNgcP*PEb@QL{g{eCnrXh~KaQ$OF|)WJV*-l94?w=BKvXZ+#sRJ+eG zmm^s^xu$#fxBG|reLdUXeC)MksGINZ6{-BH^PGwK(YYS8)Rif;{Bz6Ke$>zR<+`f+4SHgC(gQCV^u!AWJ&{|bC-VKc-ak5% zJ<*lyi65H&zxKqxg*`C|*%JqmJ+UC!3*Vi)t?Nqm!@^`wY)JM*ZuvR`*%SG`sdnnK zTBG{@9a!|=MLm|_8`AE@;f&nzcaUd-I)6M{(`)lZ2!%_ z!~VrzmifEo+2ovNb0#-!E{g(h9U6O%?4Q!xVS8tv7w4Aywb~cy-{qcPphKl4nzEhi zXvP&CrEP9gRmbrPM`w%-wtYP#c+tAS!R>bi>bd3XOVrQzzcudlks*(z3gxNnp?sB- zRNpQG)w#<=_3pUkYp#RG_rI1O<@(@>&%hD|{AZL*9nd;#X`tg}=ODjMXElor`Ofu4 zzVlK;zB9L+@0^M9o%y~w^_`DSy%<<=bfuu4`%?tD4)xWgTb499_3O&Ij(dFc!`2kj zd**S`-^y|2bIaEQsh{sFzNHC9>It`rRZqA!)f4uhdcvIz^@Lx2p`Nfk)f49X=GMo_ zPxbC5QN6nshI)5LMZLR`hI)70a=p8GRPT=On_@4CZ#|ZT_#WTu_lS%CO8p*kUB$)E zu+v1or4h7_d<^S~TfSE7%G~F}o1TwCMxKw@d;seCF!wq4tol~d(lSaTpL1jRYU(*p zi2cgceV5~X`iOWR-gi~JPd!7t&tgNo54SSjC$94&wm&K}`J;-GKZ?(fisX+vO#Uc7 zKiD6|=R+zZ{wQ^Rn0gK#G1yCNV%ban5a(cQd&y-wANhVloaa(6X%L5A@~_ZK-jiO^ zi1devdk&CvGJ@Fw@;kR9d+t)Q>s}!HF1LK0lI**D-_$sO*zt)R2f*=(-sI<> zME?FfW^C}~z(sj7Y2RKy zt-V*=Q=6e{#^47B?Siw8N)mBt{#$oCI=vZI&H2Fo?QUz$016jOX3qJ9_T6?^2u9F%4bGvWy zOKSTnU{LS0o2d;)WT+0xH-s-#J}(MnE}rZ=F#LVcpxxG1xsxa1ApQv;z_L9FH`V! z*SETpmFIkJ`TC-PKT+{)e{4D4;c}HK&RdCRyCv~#FC?Drv&6FQGb@V$D+KDT_Gj{5oj_2qxs zuDR9QzSOLh4lkDc={&8@9@o?57Q4CR&gJ=Z#yYQRrJa2yUHRRwZ`y+X$v!;|SY_W_ zvvgWk&CM-EwLTUZbh8(>(7w4|B-s06jo^79+Tc^CUVd)*I`xer!F*r(afTS;08I7c zjHWmMj+5ayfW74R-%S4h)D#E6EnllRnV-G>psC;ETYrxy;`jJu_&pXIeh+Tt@1fRJ z{#McJDmK5UTvw~Uab21Fe7vLQ!!g$Lan8u|q4-7P`L`0!SS^3^8L8ZkFUkIA22h%{YRdID*h@V&U2}kq^TXZ{YvR2Y`;=^i8=PG z1ktZ7EG+2%nL^Fyf27Y%S2F2!QA%e0PRXq2DVg-Wc}ga|Z=sS&|68nN)&rHy`k<0o zFH|z=hbxs#dg5v&lfJl0$*eajne|5{lb*O%$)r!NQ!?q1>y^y#Is8`zEj=JLe+RPxek=#rmx3=k=pxwu35}^ju&< z>k3$r-V2%aUp1cfU?r2j3#`a~3Vg_J3YqPwYCPLjl`Q+^c+#WsSvfyFhf~#O$zLC( zWb)h3P%`V=N@hR4lF6SxU&-Xx2Ug_YU!wZi&#z?G&mohZu4K~JffecPYg9k!@4$-n zc-7DG0ZOJg0IUJh?>DG^((56!p0D~jjzGz>Uyi5u0en`@Px~UUqWIJ(H4nw90xOPJ zRs9^ds$_~^1y&TtinT=XtiX!nTGe=tZ&fnKxhk3BU4aS3y#gzWe}&9(uxdQV!z!8L zUV#%Uyi5u8hlpHPv_J$^;yct0zQ2G^>gPNzCG-1|lKH(!$&}v(tmr)o&lJ5+0V{s5QsX)QOUabyh3AFd zx9}b5Jqt3wcd7CG9;Rg3FUQmS89poLC%pk!5&r3}nffc3}*H>!SmUxdu> zkE);FCzUMw<#>9}#AoIFq{jiP7fn_Jt6SOM04wj^OM%rM>r}4l|0-VgF|fL0RTWr` zO7RI;U9H*-SY`K|1FSyO>JO}Lrgp*lIeKFT@OgHyJY?T#gMbyk@2bCn-fMvsz5n7n z(t9steh*gT`Mp@lvR{s;_ho!m&QE$Zuqw1O3Gf;8hwm&kr)BeZz-qorF<`ac)*X66 z@~0Dl)uuL@W$Lp_ZRP>1rPCe)tDNVy0ju+y+W{-f8+U=v(eSa5od)d&Ru|6=2Uhfc z4y@=s9^aAP-yyS}ul^o>zgM#Cm*eTZAD@-;(|Zo|gsba4fmJ}sw!n(*18RP@6DXPN z1;C2z2EdB!2f&K$2x>gr6O_z$1tpVx0a%fp0edys8-Nwt9n^TXKPZ{%G;B~Z*&{Y7 znd}gd**>BA*-oKk*)PYF{Q{qr^V54Luu7%*4Oo$V16Z-0L(R|j4keS_16Yy$1J51V zL4Xy%x2o}M7f~|XN0dx<5@1F45@1Dk6JW*m6E&XgC`u-K39ur&3ce%RQy{aQMU7{B zi;`u(98Y!_d{)j+b^u^S_8DMBb{b&C_8K)m+ijFg_8VYDb{t?u_8efvb{#dI?K?_l zJCBmd-UF=2?gOmI{sWoqKx#bOgOp5mA7DlHA$&)&LqKMGks8l-BPGjzIiBoE_^h0t z>`O6NwH*$uyo&4rR%~}t^K%}GlF1GQtSGJ+SW$d2u;M%wHJ|4N!>|FScWZ#0!_AWJ^?O#fk{c=3n#qe1f*xPz^ctnFJN_S{BdBF&%-Z7yxo~7XV70$ieqgohL4RP?U`$)m$bl2_RH~Y#5{8T z#B~+D%1l{T|CRlU?WF42F}7ck{S<3S?muitRiBmnmF$<}jqO*)&Ox%r;u)0ZAlqlv z|4Vf?@eESEO+15CcN5Q`Dd!;Bb+Nbq%;(_GreBer8haGktFe!nqF<3c8|zByOHz+A zMZY5ZH|CN0)qh=YCwn~fcB)IUQLTBh$3vF-Ios>i7}+n!QymL@R?eUJJ{XOhDer^- zMLPrgMbz3L{|D9;`AM)Ih+h#h^De6K%)h8)*)PYFUj?6)^T)@2MgEut>i;F)A=s~o ze+c`$v|lkFks8muL`s(SE8;1_9!35f?D@=Fq{bVwUlE@XbS>gBg3P=|>a)yqq-5DI z#}oe%J}d24iFVOwxX?a^47VsAIakHdaFwQe~+UCE~SaX5ZmjW_1U zA-~`%HO819hy8_W49C4Inc~~=%ziIF4#mx550vvK`Uj&?|G(-VEGE{K^xu82b!E&y zNO6$xc~PE5lv>-AuL0XT=WVF|7yiTW3{oBkd|s5#0skQ7b-+eio$@=>XNOXrhmtwp zL&=f$OYjVCJ>-P5?|rs2tJRoHln9_UxZ*8{AGw+C1;e~%i^@y1H#xML+x zYC02GQ5-V%>Ov>>11skHQRA8SN6EzRgMFBIfS^NG_Rj>Fd4bgUp_I>~WZ5sr6K@bc zE9a-UZD2*blfa7jCxI37J*oLQFG$Ih9|Wu@PYBN)0X;VUuBgb~T=P+LfG*;_{W;<7#tY zRqfYnz-Riz5s>pxzLXl@nDVBSY|DE!ylq~z@c*@7Z zXXX5q*8m%GktYSQmR2w92dtRSU(Nr|=uyC`$)ldYs^YDiz$&EPAYf(J?M)0;l+UH+ zX-RoqO0K+q6|g$w;DP;TVDM#NHG%TJ)c6OK|E1(h#XUDDIYrluu%%o*Xb0Jv^25}a z0hA}EWZ5srQ(hT9E9a*?6JRxC?+{>>@%&a`#dS5+{9IpC$-AIa|n0D6d70=enIrruv+~YDn=4_>NB7nn8X> z`E6>vBjv#;S@z5ERCf!XmGe{H53q8$v=LY}=x#Av&B^szmCSi_N?vf~HL&_~d2L{o zEvw~nHHP!*l+5{cO1?mOc1k{--V<2;vV0!!siv<6`QJXnfECxNSD&SN^uVget)cji zr&msa971_WYJ3XHOH#7zm*c6N(&$ z5+4v`uIr%2GrzTxWxpIxyw~`woS*XIqSR-H{*xNdU7&Rsu;TnhHHPyTmF!qD2v{vV zHXB&2Yg80iah{_Z&vj~*%=K!OOm%C474ZQ8AL0do%=`dq{4=U+t7PK+09M2gg70|f z<6X$i6Qag5Z-|m*zZ_3I1Nf|*pYjx=)MvXi%L%O7yr~GR#!t-xtj1(-4y?xZC=INJ zd|Csnnq96AtgesR1FY6`ObdL{AH5Fw=B-Fz6}~VP&b820%YoIk8h3$Jiwp~a)%}sF zH>$tCY_&W1j$3A1Y*zj2DF0K*i(E$nE7>o{Hx%>8`6+KSO3m}fh`hjRMf#e+s`8Ya zz{>MsTVU0{N=0DR&t@~QYUxrBSX~V~46Mp|WduGGTHlAl0wLY~M0q<)=#ztj^jz23AvFTLP=hw%38x($wRCmF$<}Z;5&2{E6!-dZn1MuKtVr z71!Zb&w|`fu1ME@6Zvfd`{pz9-{VJ^y{Ys8EreFP6^!E1O zNpE+Jhu)s}J{Y~bnDRdOqwNe_Z$<5OTz5su%)6pwst<>EXJd8-t{bPuGe3)xsZJbp z45}vw{ekMpLFT%0YCPAOQ?l%rak#-r@AbVrTvQea@1$39t*Idx-IyQRIdfHv{P|C7xh`$FUM1z7kpOE|G%<} zGS9jCo26Zpc+Y_k@tVX_=z!(%pWvmzhWL^^?!XY z{~+@pt2v1W8JPUc{z2ktgdd0am*K}D9%k4`nU7h0FXm-dGVwD*XCR(t_y>uv89D>= zHmmW>->hWjaaJ<%IRh)=b;dbJ{LWZo%=4_qGvBk4iPsrA1MxrO>?7W1$jk?=#xpOp zl4ZXfPkhn%tel^CGl3P=8v#~ScLZ25ue6$<>yRj!>X85|s!Ia>it3X9E3Q+b#&f+A zC3D>pB~$$pU_y0FfECpX z!Dr?C#A6D3JJr_%K2&E9c0aDSr{?FndrBt0?1f4u-fUn+{Mqp1a9ut%hU@bwnd|f^ znfOtG71iy-`!dz<16ItNs>U<_wvvfQ6?+TuapOA@4>xQw%*(CDGf%gYWxpIx{HvHp z&QH9uz>4Zg11qX44Xn7nw3?smOe>k{O#>^cJB_tO^{0Uq*P&M9xgNEWnIBxq#1jsz zh%X#i5pOtT=CM`dnMYj7#1{^%h*uo=5T7_?<`-AvnQvUlvR{rT9&&tE&QCnQz>4_E zffezT!-mX!#6yq0n)v9ku9%lzjbB~&C}iTH->CXir?rMZf_Um7GjF{b(=_P{$g*FK zC;o1HR?bhn+)%8-Iz>0YEffe!T11sXyhs^x?Y98jpuxb^N1nYkG&Itm7Uj9V3mFN31DSW zK_7!vl`Q+^c&hJ<&&v4|*HtufrmU;~tNRtz*}&Q;D)y@sV!x98 za=fwq%9L}E>vpJhn>=sKIXGOLgNMaAINZ#0@b4dR4pMy(V8!)9)ZZ`9LD?_I8#@Po zHvNj~m|%~hdM4P%;-g=2{S$?i)URZ}Df-pVrnj3Ce`QQ>r@Ae8H<9rP*^R_s$$mNB zSUf}G`(X5nGv$5oe`ROjdN}I2pt?9~l$k12Lh zs#k=wz?fZ>>l~^7OWH+czqE@|9VB2b=TEe^N26$pz1baBogR)@6j1P zuRotuhkkXzYA5`I{e7FlmNh%-gtz)l$51_LB{!qG)JncnbprPAB)c+UuTEKSGxUcC zt6pP2e^O=**2($}nXwNSiF$>zeop>W&_yk^_pqP8-#!U?sqB~IYlwN|{HE}#EiuB^ zH&O8Q*$KYB7kka)>w6v#zP?9-uTLX*_9Rc54SD*S zGw^vmKi3mBr&nE80tb~Uqy9zHSr7@o(*=~Cf2YCdB> zkNDQ$@;B<)x7Y6z^ZNEXTYk&%;vx<@<~?6 z!(592pO58Y;$y7~v; z(lPIMt!|Y9Ry()!16EakEsXs+u<|rumCCIj@LBkN6yyP~x&WWae>=iAA^YX{jA9-+ z|A`c5fYq}He*>#VceBq?m{?k!0aiKBI0LIH12Q4z>Ry_@z-pFro)zk|sft7bs|_U% z0;{*>X8|jl17(3#k%D`H&yJ2gAP+4&4_Fns+W}Zb4%-K;8jPL`e3BR50Qv9!Q-M{w zv=xAr?3d$Pi+SYyb9%l9R;_+binWwF&<|LR>-HX4EwCsKtjhlF4y=|pt?b-C|u;FCM@ z0^~!dHvp>*(>ekx*)PZ67xT#Z!<(l;d|Jfq^uQ|QRxx0;s%aYNRAuMX1Xg#ig#xRG z>lOm5LBE#g=8^MTV%otQ_Sga7}aUqu+vuVlZ}ud*4@ul_4~`$QvpdlnP) z_B2NHcG+)CZ(I7n{ig*-Y?2wl=~8xlHgtHWm5KWktU8S-}Izb?ViAMfK|O9`r=`acYZv=Lf=% zGfw0?%YHfjg_uXqpXeWqMqTo3$EW___U}}GQ1Z9S`h$Z-{Xusl{O$3nKUh-mx6As2 zvfq^YgQoB^+;sS{{GwO?BmAP~#$S~c`Gcm!Us?Qs{J~*H;;(*m{-7!Pm8|Dg*vxuf z4gQ1myrh3n*7Ne){TzPh7E|BB@7y|>2kd@zc07mQd7pC_{5bcoIW1D>(aVBk;q%&j z-Uq&kkI833Z*SV*Hhj%N(@1z2TFG8kC-XLt#$ypoOrR!c0cU>AL79|C+@t;zwrXoeQsfmK8uEp&kQ4<7=n zS*`N`pYV@2A$yF|ZB&2%$nCjd3vCzV0eMEL%)n=N$6b(RzZ^eV%p>QIPd?7O$e4Vb zyT8Wd<192YALoDx`8eA}KF)TLk5k7;KF(W_k8@k(@kFDdeIX6I^_V($4m$0tNcJ+Y0J!|{yu(x+@KM?lz(57~%WYH=ox!c#W60rL4C<}ZO_T!ratJIH511oLAwZO`|N)2FT z@o5jR8nr7e@F`IG2IOr1!-3VIm#MJ-JkGoVxFtV-7g%-ueIc;gdMP#brQ4_P0H1sh zEVig;vyJ{Du*%V8B(ReGa{OyCkDR~3`e0x+XICL$l}_IuSXr(O23GC-M+2)SeR~0` zTvu-at9dU60js)0-vTSA7Cyjdi9UUx`YyWetASOwYaYNViPsfiwPJH7;8XC(8OTSi zynt1UoSA@+LpOWKyIoQPpNJakAj^I^zP*@7&Oa->Hn93Qt`V^6<2e;rWoTa;Sgl&H z1XxX(G9Fk>n~(zgd9TqkfK>^<%sBh1l&t`)O1^UeRu3PZ0#+I9%L1!Rb7Od2YUl9) zKI@x(fc&CsIbgM}mOJoiusjU%mJjy8=TzBqkY&Fdzfa5~=MNv+0a)3#>ISSvj9db& zrVj1^td8y82CR~{oCmB%ZORI)&bC|$ta1&t2Ub&Tn*yt56LrAK((VDUvg_XfSnaEu z5%NlxFyNEtei}Se50W$jR&OhX0-sTfD?$GF&JXx}xbO(F?3d$HR*soR&Od8+H(-^# zLmyz3r0FVPwPHs%V0AHYFR&VvW(lx*uqzj^O5Jijuv(kc1y~io*&0~Axm*xf zSlQag)YY9_I2*9)G`1M9dO0-%u-dw)C9s;jp(yaVa-b&UsVQ~9$L;zn$g*FKpC{&# z^CzyW=v~vKb@daDIVZSOO>{lMb?o`Hz{i>4@`;{CYB<7LxC!}4}r)pp5 zrDcWR`GLrr=x4<5{8;#%M+?8R%xmx#{^G48+d@ZOBmB-*n^HiJmHl$Ow2R956YcHM z`;{qteWv(veng!($+P`T_;JkT+3q2Dw*M78+wBC;_EJ$N?txOp`b;B2ky5YS=z3)?^Zul-yH@u6e8!r3h_@QDRIscEY3-Eub{^0+L z_e1iFO5P7s_(eMl-Ve$D`J?$oe{@{m_o@?TEPqheal0ns@nk-r%oCJ#;$*)ZFY^cG z{0XVI8}koJz5Pe{2d4?WUHS)QzbXE~9HnPRMep(!7DdJ`fY0lB;62z#bCsG6pVy?* z7O;z!e|~k5`fO_NQt(aKZ+;9L>EWg|;hV@+d@_7qSvGWqjr8R!8`wpwcus&nVsqsp zF>#ES40$59B#-xV5egCwjSXW7OF0irZes~t^%Kf!9){^t_qma*4 zcE!7le+_Hc*a!I8Kwh}e3Tr8};R?vIUyctG^T_$*V{gwP{5W%jALn5_{5Y9~A7`hT zew(W0J3E2dsQgEdo})8;1a^!GC!IE9+)4b#*;m zssk&_yph1_eX3uvS3C7x0IV+d90q&_)R_u7=xBdnwQIBwu#)|9{5>&`od4Rc{lIFW z?kKP-+9MsX`eVm_U{$D%4X~QlE)}>w2AmHER(4%80juln`U9(9w{8Jer@SWuE4!41 zfYp-P!X6|EuXdpreL4c*unShexm1gv@#oC18-?p*?T!p_mas(kjMz)JSZ@k7Ks za{fwvj{>WWK4*YcrIML})v;bjfz{Ow_P|P)Asw)~ou>z|>eM7Vu*&{uFtB=$l zTy+|-`p~Zgu(}es9r$>z>j=43z)WD}+5UH6Wz}^DuzJ{Q2Jm?}brs~-8zum&0ZV@Y zR2W7vpb5PFzv*}mgD^6yd zkvJKPi*d)v$nnPFWPWD7-A?H3J|^hx8li6wHlnu|GNQN3@rA`aQg2UuAB^7H<@=*C z-j5$`XSglw4Ecqf!BN;5KAB)=*e>i0M}?iiPuLk&3j07-VQ1Jb>2MZWV1Q8&CxjgzoB)SWdD zvN5};N_|7_1aoB=lqEyAp0As@9Zt=J5LgIne&MH z&g(>d=We3Dv+S4S=ZJaa{E7a-=wHSZ|6s$tOQ)&d@kNu>c#po7{S9)yymv3fy4qu% z3hSzP*~bgiXYW{5#kv}m;uG?iu2ya4t;S^coC6!_hgvcAhnuNg)~GQ@Z_L12dUmip zWZ!9ng4CD-A4+JI{Nnjcymxyf9|YTbREhDB*UX5q)h}NiQ-?_Q%kcqX9yz}$_2~8Y zbjXSOXY?pw)#Oo6JcAW)-2_%4^#(_S@z5E8N@tt{)DVIaoI@y z!G31eA8hkKsz3N&=aV_|gZV|}{69mys44Zl;*&pk%}D;B>^CJ|^#9WP;E(2k9G{{v z&c2JqOTvcSe(hlRar9P&v7g&GPk ztg{5FvrH4Y5&QX+4Sv|GYc9KuGp^{O?AVk4w7Lv==NtOk;cs(olCc53*1g!r0Ei-%*qvu*c zPq4CW0<7}qP6gk@lw)0h)xt?DfYpVD!-3U|rT)MwWyYAgx~W>#1y*NnjsjMeDXRgi zekfX}G;Ga*No8v?9WL}-AO?3d%4hiD@Uz^e0x)xhe;hK9hZLBor{C+p#udLr)~ zHUO)ZeFg$6&8feE)vGG&flt4rM<7?LuoPHbtkM)%$$mNBvTDpca{eW2(m+2C3dn%x zu1$sFz$)$PG~gLXXHyGUh5r%;tXgMX1gxI_T^d+T-mn2!1*NtGK2QBmLrz(F0I+(} zED7}OKXT0lZgW~(09Joqnhvab6i&KX?N?Jeod-TGFFu8wX6_MSl{|b9u#)|9{9-YW zoPT8TT)@gL)D~Dx{8$rMtty%eSUJ9I2drKNR{~a39&83yN%PhRR#USb0akVX$_RYg zws`=#P?a&j>elUaz-oKTb->Ek`zf$0HE21oayXkFSRHeC0({C2w%V#NJf7_au*$q_ z9I%r8a{LW3kDNbAM_XW3eL{X{r%eze*wYE7>o{ zFBAKfoZr|vxJjIYYs5JiD9*uc;v769&cWMeo`X-n(>eH7oP+(vIaouSgO|iPDEsAj zW9Q({re9eL{VHQT^s6yO^sALd^eZ{Or4jw=XV%*@3%xz5SKNC00~7T2D?)GIA@p|H zFZK3fLT{JzC%z9x@9n0%4<@9YA+xAAQN@IM6JtcZ3CZ8y-3WjCEfI%oC-~b>3I6u& zg1=q%%kfXdJd(dXKK3hf>(QqX_2_pQsYn0NgnIM`1^<<-7hhQLR(%lsSF-N>M!|n2 z`{j6J_2?7QF1kk4UFvG2?$Sn4cWKyns=HLhNZlpbZwk+LqP;zOzcQu1vnhU@mcozo z$xJ^^K_h;g4#JPqLilk`3qQ_S;m4UF{5WrgALpL%<4FI@gM)UkKV%htoRPwhBm3p} zoWhSI=TGzxMz1SV{Da=D-c5@hZDCPpXA-?8!@Q=6S2nE}iz!SIIfgZNoeD`OWRtsD8^Ech@TUX!uyjPJ?y_ss4-S zhHI7FyTyIHcZV<8h4=2c)6YXrn`VPfjh{0z9Pi+=UykoB=8^Mv`eOk2MQ7|C0<1Eg z-wLeuwjBUpYWlxV0IOYD*8{6bv+~2&Y~{5ZSk2hz>!be8t9Ctr&kOgm@TJZzngp06 z%hUz7_r>RIA-DIg2z>rNn-kxC%j&MMMGPrk0neS&wq}r@-HzeTa;%UHHVWA<$B!5D z$oc)oCy!F!W#~Vtflr`y7;L07$0kQk+@7qJV4ra;8MH`!cHyzvz-nEiqOi{leXtT( z)ouC_SY>E@1X!hP)*D#aR(%V6>RU!Ze$@N~uzHqc60oZB_FrJNr{{6tbMoU|$Qf+* z2CKg_Q+QusCHv+0b7CGj|Ibjzr2coRKjJ40DB{euV1^bbmVg7go{ zerabg<{$jo@^SWwJgb&ax#7C*dqBllDE%yYh`sz&DZY<2}fBulB+>k=?2vd=s)?j;|x; zk@E-t<_4^qo$~@#Gf%dQ!K$Vku68bzt=*i5>8n z{2_@(VWm4f3s^lqYy%xqA8`;^?R2vOK2IO-gdBV(?`Ad6m~ocy-82Z#4Egx3e}UD> zMstCc?3d%Gh!*2Eo88sAV4D6Y|Of za?%HxfzRVIyCKVdIlicvN6!D~QEg!5lch1RYS(WnunPUBHn7^1aw)Lt^>{q6+I~F+ z;yunhm;tO#_00^dE^n&06q<$e}Me#K{;TR zW}`dsDV?(*Uyd&(=8^lADd%7TaSjd?=inuA4!#iQUe;b-V2 z^!5#cpJAflXQ&|bcG)k-8{=n4d>@S7+f8{N{Lyv>n>H~#MP&p}QDq}MMQH_3k+FPd zPhn@cBGC zIHvGy4-ob%$%8#l*qu@eo^8FTkF!JYY|DN*-WbnzLfS?5)Nc*FbaHq>yhlsBsAgt! z=%tZQvO*qaq`q?sQQukGMe9|p2_041KP%OG1)Wy*%kcrizAEQWw6{m^SEkt8P4VO0 z5q=z3GyOR0g&)VlKE{ue)FZ}^vrhPNG6_G<8sW$3CHy$IgdgXK@Z(7Ti@)&Wd=!2h z58=m={c`*);m48lC;A7Y*Oe*$!9~Sf;UB!Z-V^W90VUhQ|24RXEBu2lTl&F2IC6K> zh0*_$g~gMSNAVt=)1njngC&w*^HyUH{A&waR$kX6*t@!Hp9x>;yMuYwsqu~l53E&k z`U;j>B^Oz-1M=__Hn7{A+mZ}+zpDK*LB8+$R;NCDvhp0*3}wF@e^JaM=l?h58ervc zX(O;|(A@(5!IjC^0IQ*|tYLFlaOE|y`g3`0_y@CPwS+CJ`GU6a5AM&g2v}XP9|Ein zr1u0Szbu~ztg7j&LH@VTFyNEKxjepm(7_lUwjQ^J0-w_>r$7z~=?{ETobblpF8k&9 zAz~gme_LHZl)~I6Lon7-_o!aLs!C7*e5p-sB7s$JhtBY&x;?xEtU|Q?fK`bHPk`0H z5(R+IjFPEw4z>vR@aEnZ*^d{);z3c3CpmyPQ0w@Pb`vv2jKJdl^x zkFlvXO}YYD$$mLLlbA=&zv0*dVAZ_jGGH~y`YEtl^w$Dl<=|$8JgXAD#x4DTPt{)wW1R$6o(8N^ zx%C4+3*V1|Jm6Iq;4}GeN7%k(zZ{=Y%p>PFr9Mvj$1(K>!$keTrw?Q5588|RgV{v= z!JI#!{$RL~`h&7Qj;tpr>kP)H{@~BRfAuO~Or1DW_(ijcI&pVQs1ql7L}i^g*>8+r zRL=i1#J7(#Gk@??ikSStr9U8lu(^nDm-GK@_A68TgUkO%{=ttHfzT83UkZkAqJ>9q z_$FR|48Yl!YeOV_6Se)iK&L8q^)mMJTnGEXH(~SqDf9%dWbW`y*j-JnQG0&Xk4v$K zrymz{t`%)~4!YB|qUo?d-za% zk@NoyewUH(*^wtaOCW>vFq2SXYa#`aw^4wW}xARqr0Ht@ z086jrgB&)b64uiDQ@L>N2UX~Xb#-A{MXaSPp)DXsxR=0M@^!TgQ|npw%klTbJaYcb zEyn_@S-MHUs$dl)#U^P9(1zhRVLSRF1O0jw&GX$E|fRp|}6*OOYnYRr?2z)JSZ z@eRa0a{l#gCjqM^&8GvaHoA+z>Yvt=fK?sMGhnqZ{3NidWE%pkqH0|ORx8WJ*b_ot zjRaOFmbC;{C%R_=RxhoG1D_jHHIP03h~f4hvECb4b@@0PSaomQ7Wf=r(jW5u$_;^4 z$#dC&mF$<}BgH&&{={_^{Y09wuKtVr)km>kg^2y?qS$A0i2Z7)*suJ>ekJ?m_y=Mh zIln3A-~|!SP(;KtTodsO$vecvGdTW$cm`9>!BBAy77*uPZ4u8d_xEQpY5puroXrb_NSk ze`JE-*|vNiQ;$BS;Mtb_a(p^5kDNa~_N&y7V(eF1VZZV=V!xWaD=qAMy3#iwXY(Jv zPU+I8UZ#Ss^{T1L; zy4Fm)sJjun=zL)p?JMk}6NFt<_RI0s!Y(T3Pqep3uV_>3?WXu~t_VNQR5SfJ1C97` zZU{flRpG~}Ec`f)g&!wr-xxoRweaH<6@Hun!vAtb_;HE}KTam$$C3SV{1`EhoIlY& z7`?7c@ef8;uLA#ID$Q?rkIvs}JbXHrt5ku1aBG=)@TIm)H)^5UlNUxMh0p8kyvgwC zMEqq9pI4TdrC|3fanK(2hq?KVtWop4o>~n1e7m_H)~fz-yPdR3-fQ~;a)JBBaTZvn zae_~<*1{mjcPwq-_qkW^7-ZQm$EOqX$oci>PdyCv3=OWv9A5B6%>2>!t*HmhKt z`Lpg6_y;##NQ1TX=iIrlC;xx#oq1G`TmSwmMM_DAloBN>G?0?aWH`i0WafxNWS%*O zNQn}WxhR}14U=_6L95gPEb-Tf*a_2;}@A-y-k9IXzXkXmV@slafzvNGF!ab0?&UC_9(*B== zTLOoAN1ZT7`Pi)kD|a7nu=@HSAFMXK_Xn$yfhAzoc!DkX9B5k|x?i`2abUIJQFF{c z%GM9S>Tt3y_;k$7M*E7Ib&~LNPSDpqA+${wn4q0zt^qy)gO8!j{Tx4o@^F4Bb(a+N z2W5W&Dfg=V?DvcE{b_u^DECXbUsTGui8^#{qCCzImgU?8pYQv-&JXgr3C=G?7p(~A zyrk%&0dQ4pMQPoi*;>7Zd0_6ejkOk%w~f8yC8!MKdg67s-xiD zTCD2Rz`!>4D~}`6pgwVc@gt^e<>z_4Ng-4rX1jmhD&G z4pz60F9V;WVe8QLRR0642CQuiR@~3=k0=l4-`p=5tg<{#gVnSswLJn8$6u4dYUF{M zU{&y^65eZWhK>a*{jpVJg@5Zhcs^L=d^rqOu18jbm3NI+VAW@84EVS`9f`Jmt94*? zaN$6(3SNH@ti}be1)q(|k!ZKyvJ$LJUps&m_jCMo%ES5p+IR9KVY4aDK(Ol05-Z#?{X!2sCgPF7rMwD_L z%q+t?Xh`c|J6gXoX&sEDb?_LigWS*Yy(tgpuW0+L#&nLpJDsDKvcLMfeCJ*wzH>#} zx4)%(KRVOBA7@4G{owP+8|a)epI^=vIq%H<9MAi9&aZeMl+Eo@-UrKDXNb)04c&O% z?qFy#*4AFwKZw) zq!fQJ@6aFHg}-}z{t~=L_l!IOPbdDs9~f8LMx?{1xY=iawD51u>lt8N6-OL{PcgAq z6O5~44<=z;t*$25wcdRzju-O8nv6dtv}3l_M*GQ$u8u;#y^>BFp}jMD0>;(%ye{x5 zY;p#py}z9!*3cU_-lNU^9Ix?Mo`>^GIY;kZ&iB?T{Z04QUZneG`CPo7$i21P&+%gS z)_zLz3m5)I-ns!8OP-xl;D60M?gxJ`ux}RTtBvy$FkhYh+6ZH5?v^ynSAK>q;dvGB zUj%)|Da-|Xt%(837(acs%!AL>$fg0>izEACEY)sifU)td-5=0xYA3ovpIO;{JlY-I zxobqt~A6aigmFi9Opn4NW(x-!!WnKaJaJ`8|Bh$fZo=Clk9I6vh zkLpcaqYgSPhRH0allGsX}kBe0UmIwYaeltXdpj304a)TVX7zc*@VkTbU06E7kfz z;PY42U-3+t`b2?M?&4M8<2ND9Y32QSn4!M${T&{^dCAfJ~JJ3qLR&g1a; zLGI`CgU?0I<5UE_U9E!ogAYk>XMb>~?Ro6g-|xGEwXg3bZFpW|tzWy zRqWN9|27+I-_Q%XvBJ7jaNHMrsz!}ZVm^;rw%I|5IWw&j=I{-}j$^;1V>bnDWoP*} zRNY&T#a#VxeG>LjN*hAqb6qowL3?)15X|S>mv)8c#r+&#jq-5*;HJ4?mC-LBtbz_2 zfz=oDT(BD6+6t`d=+_0SH&x`{T$$H30jp;F*MXH|$u+Rj@rwehOQ8e6YW;;w@Uhcf zhPHq70jzy@S}y{tm5r`|)h`A6!RLlcD%#t8BEf3m_d#IA{Tx4l@^F6J$b7JRSEUH7 z-2XBGE8p;Zuo_>}4y?|%G6JiyTLLkza#uD1tBX4}fz|UWcfcyP^+B+@aA6o&b&9_M zK5LiyqkY*s7Oadte8B3qK{i-vCmsQx*=c9dUZD~NR-1nL4Xn7I;|(bf=U0p?*-Rj1 zT>UKbRVA9Qexdp55zSZ1G|yzwd^LyWs|cE}xS!*-C=chCvJPIP?_}!IcQWzxos8Bk z`FAple&Ba9>HT-ch(a*@7z-4yfep(op-Ki z`}PA=7a)P^0#v8E0K9LHq`Cl3bU!xVo6YxWm-e1*&aZeMl+Eo@>d}|C&QP0lhPI?L zv>}~g1?dc0q%+u&&Y(^@gSv)XXJ|?~Lmue^0i-juBc0&_=?vV@@kNw}^Or@x3MKt& z8|hcxBKnmF=~r$d`c-|>uj-I~HJbFRbEIE=B>gIdbf@v8U!5lXDu?td?&tXPl!x>G zNL}>(j+fY%wiD4s4M`UbqB^`{y67;kLhM&r7u6$O^gQXJ@uZ7#KgT~MU6k`H^mf^N zB}H$S;^T1r!H1=+KNv~%2d7Z|K_jX^s6#%E71bZ~qWXhhsQ%zzRDWF~c+zF!G1b@-b*(B2O_ zpNy9MPfAMm%`EXAUG3Zj_+RsqTf?OYq+9(035D_p`xM(LS@PH?(?h`P2_S#m2B&@CQTm#zS*hzo-}d!Ij_R!OAmt5PXWfwdr6LKf4>;pvH267KP0)!3s~5oT&cUSPiwc$5=|&zXMhuGMwS1)(;B=pITa@ z;pu#;Rvk?0U0nfIYaZL6J!7*c_!PId#P6PUOnwjBrVZo3r|_IN+CfS~!DobP4d^-C z&+!K+59gmXUK5^Iz|-pB(=Oi`T2|~hO+0rlyN19YeEz6CJg=f-(O~62sn=m)teW*t zl(RZr34DB0Z=k(f!w;;wm?-0!N=exTR-@nE0V^B7?O-+Xi!#R29i=f3V_yjxV4*oWCsh$*6ek0jsr1wK0}%c^v^OgFq9^QK597jHk$bGJJ3CIg$Hh z4Cy`@zE`%yt^En%Z^ZY|^8K`Bxwp0=)W@l#-U;KUwDoZ&Stns!Eu#83T-TE8;Pe%# zkHhiHDG%ol?q-0s&$7KSp1aN8hQN1@?P`EI%Iy6#_|6}k+ztqT$I!xLj4PG;qu@J- z)yc%T8gaP>G~}sM3ej#oAOx)PpK4>SPW3v5=dra-F`m2b{)g~PHM~_F&)QYf*BDnW zE7YJNXVrO(=dR|#4bYRhpW`1>9?t(W)`{~JsXtha>IQP%H?A`%rT(A+<>C5+7405K zL%LtogYFmYQ3383tqAA5X8ld)2glR7zfGk)KgjW7=LZ!&j%>zdAIDw99~?5^J?8d> zPG2#%H)&u6f6$}fd(7>fJvzc440zWBd-V|e4cI4meQN=Ka8->+>^~>oe}?&dZ;K=c zVO?mP=Y=`kyu)M6?bf$~(LR)(g85u+cp&EL7AKxyZtwm2B@VPl45mD>J}qYTgU*sd91y+9?ia!78OzFj%=x`V*|IhNgp0@WLFlCqx_v ztJnMIfED+1d|S%H`4!_zHoB#ZtDj}Q3ZU;9?$h@Sf%H8?FPdkv>3fE7`krAieb2!C z96yNiaDK6Ma4DUmccpXm)9D<237w;VL+9u%f8aU#wRDbt0JIePBr z_?eW4^H;R}mDv65QubE^=-zczy1#uX-QT{R?r-OQjvq^T`2O~awr?Lnb;BD_-EbqS z8_xUocT_jLI_CBg(XZ-~ezlAAt0EEosx0>*Czy8tt45?>y_9etvJ%~gtV;JGb3fmQtV#DFbN(Nx zi`F4sbgqal+JgG0evY3` zc{snqAC!$NDgK~x)?sk3zPbVijEn4L02P zf6%IEDl`Y*0sY_)E;C97D=+ikpuIn|zXVo&tZRVJrpYhR9viz3tiJrB4edQ5@+er< zw0I3x2hSY@tCnr5LyNd&^a^~!KB_{0sA-%BRxuhIz>51hKA-Y%{PYVL8 zwKwh2J~v@1_@sZd#_#SiN?xa_&B!U>^QE3I+6BWrz$c+)9q2jS&+)%f9?q|%uLCdj zXmTy^`5w?4x}UY44xYO$-$ubp?bq8G{^0GIhrlYoOFw8?XM<9}>WZ~G_!vIRLHnrFdh8vC--@Q)z-wWCxrRr!TBL*hpD&0ShCFf zfHwDY{2t1~`Q3c3fYou^Y_M|cQ4<>JRqrcc^)S%{{$Lv&ZTN#v4HtpcoUwZF2lZaA z0IQ<V(56NhOHYS*fK|&*wN1p|hFm6`Jyu=*O~ z309rIWP#PoxH{m|a`0QU{aiPL)y%k>n5&D|p8%_wy-L8U)tsYXmA=1LvM`o3?LUD} z_sSa3kW&+0fYqjytzgCd9ABUEaQ=#RuUZ4TSFH=(t9DwXuH_J_Yw1Myp*5j;Uc;!K zmn+rt;(m_jx|W<@QGZZ2Dy7sPRNOBrVQn?Mh)Ww>Wu%}w%?*cD%+?1AhulYJZ9DAyXZ92rtegY+>XZA7JtFJlw5o@2r zw{s3cOn~wNtap>oy}>%Dd1WiwT_0V-+Nbk=J=V32Bi~^i?D6#?);{ChJhYvjrDE+< zQu2nE%KaSgPI>+%zruI^-#?j@arLvzS6Au0b3;1se3#BU>(DvnIdtB6C7pNPLg$^i zpW}@v59b$K2iMa*+YxlnwjtfK-HYzocA$H&+%(157&3DX#4iR z>po{CoY% ziu9}Pq+cy0{pvgES81eQ?I7JLpY*Fp(yweuzv6z5KR|gn|Buu~&yg;wC8CSElP;Po zK^ILC(M9t~=kz39)R1&h?&o-I(nUGHLT{JNS5owLDL&48@^M^B>Eo1;k28>boIT{@ z%q1U3wU^w-*-t)>3HdmQIe>c+dHCFf*m;~ES=Ul=E>$)je#U!i73Wg_|KCn=F7m5A6I2&~`#HXd^87c|OMOT6CX%U6#8|2~ zkxKO@Zc)7n?&tV(l!x<|cO8@Ru9w=F>XH zo$ADGqB?PJv*mT-MwYTpoRoU0wtanZCa#NF7qH?wZslDkPEmhQw$GGOe^BA$$XKzD z!@e`$FRC~{C}Sn%{Gei7Ngr1~%Y0Rt>ZSIfdZ~F-FSQcYIlW2sQs+^<)JUqA%KaR# zO?f!Kly$Ho)Jqjx2V<1CW6yAh>U}4Mt;4$SMfFk#t!<36;oQ&hd6b9qSG4_=lzORR z`>Xr3FRDxRQiG@-eJk2uaX-iZNqKmGRnhkCQtGAhzI_+fOKnU0_KqK#V_c~g*2H_w z+umttb3ey-qdc5n@jfV<+oik@mbcDO-t|(gNN30=eIST*hW4a0Tq2!;`#Js<<>CB4 zd%e`pq+gvT-N}petFxqE<&u8I{TzRZ@^JqDrh2KYi`FAu^djk^iKL5iKgYiyUG)D# zy;RoESywNM-Y&(*QPfM7&HoC2P{u)uKNvJ<0Pgs$>M#uV95$M`5qCZ14j6ztezSV- z!JUwcwAbQ}-{avbxZkO8&sN+u8hTmFR`$~?&o-I%ES4K znmz%mt;-6*s-U7@MEXBR7w~}vw)w7Vp;N!nI9qrC9_khpqoDt9r zxu4_TP#(_Tb;6i%;qUb}%?o46y#5Zb3L7^Dcl=ha9}8BiM}~scrMsFKORIP92CJLb z^;!t|>pdKZv6R=-3U`g(3(Enke(T(Dj%jg56|^k^TY!)DK^6S&8Xx=PKC#*9ws<#O z74M9;m7zKK~Q`uUE+it2c%Bz-q;FJ=`^FtdKvInfXJf8_xL95Pz zmB+f>;8VGCBHH(S!@x(onk)2Y?&tW)l;>aaCph8W+FfTlVJvC4^#!YzN1ZT7ZLnJh zR%3m$E?&tU!l!x=rHrxVMak|^V>gMUYV719$ z3s}{QEe5MTDp_EqmCzQ?UGT$)V6`!~H|D67yMw{1fwdP{#Wt%2Cbv?8z-qgr1KNFG zP6Z#$K{gmCSqE2xl|$YX@VPq17wvPmJ;3L=Zymflb3ey-qdc5H zr}m{lwEr?q1S_wl%fZUw#yzn5FdzYZd{r{h9^x7UR`&;t11s+5cvW|K9?tJH%o1y# z=WT0@r5#z*z^dsGOU&oXH~NCr{Z8Y->Rs4Xu$sAHE?7;Pn+H~}l^cT3*00JA!t>Jg zQY2Wtx@3g;r)|ImusUt220q2FPNVIVT|ZgK6S6_|q|hEct0vkv&wK`}n`3r^758)e zHp;{KrQEA_chv7-)g><$tR88EfmP+1)$rVz4c`M+b?4Q^e7^0{Ah60-w+5^ELHEE) z>^|gkBKIMWp!<;9(|yQI={{t>KdryWy=ojUcCXr~)oU=Wp4zX+xVqUg6XPmq)f%ws zl#mBjo-fnEDpSoCtRh}t2dhTSI)c^S?fzgDzjYW`rGM4H`1$(O7vpL}Zd0_6ejkOg zWHZ4GL`q*%#QQXjy&HVW9gW!7Bpn;=lI@~hx7j|db<_*&K=6xcV@kv zeQmMx&Oc-QL9sf#QqFmC9bU2egNpk_WvhXd`$ZMwO2$gcxcXV67dJQ zpW`2k_=95Wpt_xW9So;+a0IP`-n0(p(>j<`%5^aFZ(0XC(E4?m*1?^$4kpk#$o(AO zhw|_`Skd-ZWx2Pu1MRPx(f(>A)thjq{T26fybI;w{aZ!bx4)%*duQ6WpB34+x1)Xg z2HJ0rp?&*p+P7!ZzMcCyKAiG!e#QHsY;KqGK3Lv5LnP@8>quv?CY>RfbcTndGwdRr zVIb)Ybx3EpOFBab(g$vm&TxfvhL@x>a6iYpQXbClQ3m~LHtARPq+cb7=vTI+UmX+C zulz{AQYZZ?p7g6eq+ex`el?kNCv(!TGDyD)CjE;0Ierf1;ru^R7u`>~=t~h@)PZ!- zLd@ zAAFc#1ud&pkEwD`r;7#rLGu&KpeF~XjfE`g?7)wr_c_$ZUpV?_K8Z+liio;qW!|6 zq>b=zv-OauotYB z<_CgL&XG{GJGJu#pK90Tz6SSm{7TBh`KPvN6)yZPwmME2OAEuj!D>M3R`3VM83lpW z64SZxQZ0+_gH=1nWnk64@HJR1@7@%AB6?`Rrr{6{J8M*YgE&MMjChD5bZ;wSXI9B9IWO~iUzBb_cidW72SLWJ|=}q@Vut9%>k==^Maw(b3ey_p*);_ zR^UvqGM=~qtkwh{0IRSSGr{U=S_)Xz_1XhgyOL^SEERbj0V{(*6Uljl53o8nvIg2m%sYUO;R{Xt?uE)@!0Ioz_TaN&zZ=@$zO)1%rJR>&b3ezc z_m}74{QC=&z-q&%Q(!ggH#PV;3ks6J>hiFf@Nw4dR>In+W;_GGq7)#4@JAhRkiz=AUHNLumRW)5lu==0RAHXWl$r-Ht z55|I3-9_KQs&2Q-V0GpF60qt&?lbrtiw#G6)~{J$btHNVSoN;<7g)LdejR-Dz7?R| z@WWZKs;jmPthk@!M^GNl|4qprtQy^S0;>tlmw?sBZ>_+}ATbE6hPRvtR(&4kf|bFA zWng9Wwiv9eD>Vb3h7UCygt^ZBTMSs$-XLGsdX2sfR{34E!RKk`t7tDjY>_PFS-V>c zp5WRQMrdDus|G#;(+;D}{Tv@kc{slmUGyaR&Q|0*XOi#yZid`<)+wd$Jdu3ovgo4a z?K_K|$1$myig8uD&vJ|_9funjS8-hvF|GoRm|;H8otBPqweMj|>=QnmS&VVDWKkcC ztHJsz7(Zg?aXPGY!&u_;IPFS#-nk{6#|fl!I(l?|r;yI$aQ>QJ>+uXmw%LMbaJK#p zuyP;29<0;{z5uJa>o0-Tr%(1^wY|z+u-Y2Y4Xm0wtOBcBYGc6aNK|#OYA|jk_Dkb- z*`nQP(|E9&U1Ev(=W^cwJcE4CwkqATy_D|RUQhRIb3ezAp?kJDzoP!2Y_^k9e^4>5 zWUQo&tDj}Qau%7d_4i7v@Z$~ z*kJJ^XShf@LjvgxjYwxGCY_-Y=>wspGgSUdt~02U z&cOW~uT6P4e_8Y^jhAx$%8~Rd8xj3#E9qBlMD(j0q+fj|{YsnkD__#D&X9ifo^+?i zq+iV<{mPj1EAHobm29~V#`%AwE~-bmsD+3wdX#k0i4t^CTM4?TkBBbH{bIT(=U3?M zviVAi-Y&(*c|bl+SSfv+bz09IQf8^Iq`vrYr6h~q76g`e|b!$sipu9*w8n%!NM z!K9MzJops*ZyTdM!=@kjJi4Wi-#tBUKJ=X6Zm!Uio2Pi9{pqPQ_*l4Bg0{o`93Mt` zIDcu+(WlpTgO+91qc!}&=&L)y>e!gB(31lTkAT(4ao@m7=l4voQukZ}R>tln;4?}! z9PM}GuY=V`f77I@&$YBAzRKE-9V5MJ~}&t2B2$>6hRR!8_0qkP_g zRrej^@k|B1u8sCO3uo|A>8pd^y;f7Npj{=>5qyRW{eU+2bG#Gf z;ruNe?}OErK~KPHW+fwNq}%Q9gO$tt=I{q=&(Pa1{G9V=EC;Lh;~GLEt*5yTtjud& z1FHs^d%@~VY=4ZODlaa9Prao+XxA*-4_1pz7lPHQ&X>VzXS4m_qqZOgZHH?+z~_YS zAZV)G&+!K-59dD;)(ZaMuGvl)ORt}LgVo}#tuROFdj)}2(|vQnYSGwSuv)%k8CZRv zTntv7b~Oc`-XR+H0_T(4V!%qdjXCC@hDEo)%J!oc_%yk81?}7YEs}&h4uiGebFFA; zg!aB@HSp;)`Y_tu&+#2759beD9ROB2T5G_nPrb8Xm9r`UtQtSM3s#Nmq=40)r~~!Rs|S9Ln4=m$^#QBc&;7y5#kw+>taV-jRyB*v&{nY?0zOv`8)KY2ufG(m?Ai_n zpP`$lq5WWz3;3Mss}9eL`#Ij3@^Jq0u8$+74sS#CPGFV!ArX8g9G;AJgIA$oweI-u zU^T@$39J@%3Ja(Pzl!Kr>?50! ze#O2s_j5e^&YWM$xrsV--gyq4cTT1A&Ufj&^MF#GcWy)Ho&TvP`~1b=YMrykfR4Biq3f3WSw71*m^GyH)0%5lfqBf@+;YJ(cqzLsy= zVU9{1qVFKY6t+EuXHe|EKE7vrw8%Z%PIS*+2fDAX65ZEVO!xJ1KgaWZeSDAi%a_Bk zSGTS8JLdCg%fi5_{h!0ZDoH&CtjeRl^9ZW%+(1Ho=XZsDus6^?-t45n-$lP8+Hc)W zF-O^_-A0@HIldm{;rvp3obvvjfzQ#G#mC|A87%3X7oVedqjO%|&+%gC=oRBiHWH9lV*6WO=VpnbbH?YDU!9!mT6ezb4revS{M zJe*(gJ}8^prMwT8x6WWRMXodSCY_-_=?od9GgKp;!JKpkd(s)~NN2cDI)fAG13{!S z93-8gC+Q5_&+*Qbhx3<3zcMHNY9;AcZX)_sE7GqlMf9s$q+c16epQ$BtJS1mttI^` znsldXq+hiq{VI+0EAHp`ILgEMf21y&PP*t;5na@wl)9*vh%P#YbWt_ZMcqjk<$jK5 zU6k`H^mf^NB}H$S;^RCcAIGAUK28GpI7%jRA4jFR+{ZaaK8`N=IPv7;c$1Iwf_$8t zNB~IV@o~`_j7zS`8b?k;Sb8jl@xz)^x2qgvS=lxcVpwAC+F*Zg8pEW z76UIeU8^eezNcG_ULrpCY{bMzrH2yy0scinD~i%KaSQit=#& zjfHLCrFMDU5q#pJm%-C%ThInx>YwY@g4NiUi=%~~xnKShuxj_4KYWUY3qFC>mc2IM z;}xzAU8{dWELdGMZ4RGexl=A!Z8FpapTfMGXy5N<1)aId{2I`cA6{sPw$|FJ;Nus3 z6m9P3cpb{a`J?J5fz{_mr@-pnWmWhT3k;LMN;6p(T9%`M68ymu)88?cf_>GY`Sx1ls$K ztpJ}HXY8TXb3e!5r#zg$WPo+JFgBWevBOx3dpsAcPP26<)gltWx65z{lsj8a$n+A$!5d^gi&*-5&SW_8%@;dHAoBKJwkn(W;wi%njDlKUnSULB)3s%$5ZU(D{*2Q4;CFnX> zJ^!^Wp1bJZAA(i-qb=*e)8T%O??HJu|BtLUp&I!Tta?PJg4L1q>0o7XCl7y zAo87a$ahX5-~QbJa4OcV0{9orCDS^I5icR^+_1 z*u83N=$`G3bkBBux@S9@?%7VGd$zAtfP1!=(LLJ(>7MNzx@VjFIbQ6Z?TS#(OTE7z z=B3x3%2?N?8|=p1wQIs%%u!t5c@foj4yC%xUR2*%lj=KHruxp@&++>y59bf=W`O;t zWqV`H=bOI`ftMQF)d2ehv-i{BrG9X7!(KhKFd6#PT7 z-DyAwSmi&}2CG!BV_?<7rWmYx`X9m`!1Pvi>a{wLF`w5wxB*@& z_jCMX%ES4UXB&gnpiPay>gf;c&90jZN{k6bK)BY1!b+4=eR;dXuz-m*< zRI>_}VxL?Zsq7`j_RUY@r@IH#~li_|T=LakDzFo@qqJe(XTW~zd9qLUlobySLaB-xE0yy67qix@d+3U37qmF3SC4x+v#Y=ckg$_`j|1MNgE-4u~{zK+|TjBl!x=%cX$g{jca`YE6rWa z;OR7K`xdOmrnHClp6k~*TKF0KUxk2G{9IdT@4hh+a#m0B!K&fbM6g=*aD2Rw=l5S9 zfzRH}YtS}tbP}v4Hw^$Qi;H<+74qu|@Tnbm9qq%FW5H+E`bp3$xS!+0DG%r0w`2yq z)RaMgU@Y0+*bi3Oi)O$}4SjnOtY*aR2CLq6Yhx_+j5-Wf>318#A6#xa7JMFOI>OUg z)8GYIRSFsfpQ7a{9eI0Dd+=G{s)^s-uIgy$Hba)ROA?qLOz(&GZiklOGb_6YZSLoI zFUrIDrQF}nb$CDgDX+tOoa*o{qB^`Us19#O3HP@@kZ^xH*Wn#X_qXTL{q0Ub(*5n+&+#AW{&vnk-?&G(@VEH1rVqx_`l>%#vspOA`YZNmshJX4x4i!iSCPBz3?`s3RZv|Day zb6oiOH>B2s?l-4(bF_E&tO;%K!t66>b3ey#r#zg$Zm*qS)n$DYSiQ9`04sx@JHcwp zO(pn)ecwI=D-D~Tcdk53^K4E7Xr$cF@uw&c=dWn*gO21oi@gud`-k2K z%lkWIKJP5{9dee)cgSMrovlQ^Lw2O^hxxnW82S#mJAH@D{Twg$9dbpu|Ei|Q{a1X? zHs62MK;-@_CAznY@3T@Bx&Mm$IbQ7kD=BrCe5t%U8+Zf zwW;>uY1mV>y|EATd7I-a?S+_-%T}1fwLInZBkarvVeh0~KM3==ipH;)tDE{nB?)=* z7O#Tm6*M9Y?RHmuF`r*pXA94Z`#HXd@^Jq0K95s4P5xczu#+diD%WN+ST(0}^rbzI zGmFmS_|Q3;lXQ-L8=c1)Nau05pW|0k9?tLPa|Pq-xNSDZm0ORR7*|)luV7p~OfJpj-nWaL9~9fSx2Jvkno^!0RiE7BRb zpX0Am9?oAD{mO*&D>u@wI*I64HA%l(ETUiS5Yev=kbV_F`c)g!ueOrzw1D)hXwt8) zl77Yg9KVzDaQ+{ui`L$C3;WV;RM(PqQ9r6{=}C1h#dOhIBD$!*h%WkCL>J}wH>8Vl zeudsHo3Etk?NWRk5AtyqmeR-BOg_#r@^PAzkF$?_oEhZf93~&fj(nWiMVQ#29ldoN_%!pi!0$f4!Ah`tyLl{pib+o1Xz!^p1bl8Dk>BIW{T#2f zMV^QAx9w94UTQ=weeh}M+Yg?OPw!grQoS~LLZ1n)-V0u8htPPis_Qujo{oN#bg)vf ztOh=<-15+Vx-kf>ei>O6p3bR$hrmiF=NVY7jg11UuH7^+epK!}1)rrOl%Uo0bh!&w z6Yt8;({Vq?>ro!g-|OQ_u!^6$8mz3lq=VJU_bb6__?tUmb=dhNSlKtT#8|3!?gCiN zOKuI{xwE?u_zczU5C5w$R1Hi56THEyYHKsJUv(S|KAS2T<9GkKMt&cuL*GH*b2fM? z+Gkevb`r+6Mp6}MU);~}y(kaoZ<+QMtR{qg0jtTCnnU*+aq2BtJ!sMaUh20;jo}Zf zcUlit*YDUu_tUMi1FXh*JO!)WO2@%!<8KqdD)QnZ@JW5X2JKdXC&4OsP5@YS>HZkw zs(Hc*@ag^iI@&uuW5H^U-ej=ievWTVc{u-%+_#JQ&W1mU?_80;7u`nZo%wswbdm2x z`MfiK|5+sRy(sr{yx8}m75Sbbv3s`t=$<0J2YV0QFQhJVPthrndx|)o?F0t>k4Z} zy`xT8`+V%y;oFa~KHk`W8a&L$+PCMuKhB1a3@pK(s__I{_&5jJR<{@Ow^+8b1F<)SUc80kIe4OCH$I#|}j-Nw$IDh1< z;b8S`!x*qyY83`nmNSNfRYueSunG;`2v*xRRl(Zly)FW*y0@%}wQqonD_HgTVh&bc zif({aeG?b3sx#U0s#xd2v6-i+#@!nYIAqs`AXG7+1>UVll1`pIU%% zm1BPv<0?$^0LIn#GX@w}4ZIRCu8yjh%g5D|$rx9v4?1F8HBx_zab;yP0b^-<=Q?OF zTra=F>U)?D_DE^_yfChIBzDDE%0E8@?MU@D7)!Q!AJFE0jz2(oIKN_C$!1MSJM^1$BWe;tjPOzvHL}N-_G}c{$2Nr z9;5v~=U2QB%I0<{?}I;!&LHLwb|?pbFpB&^&R-V&s#cy{zp6+2)pHU3Y8mNQCq?wD z6wieJ=~vv(@f|1+=l|Jt(KqFwi*_Yll=Ca} zcG-L-MQ@kl<5X=V_if{$~Ye4I|?L(K3EiHCiEvA`3Rq)xc%+DLch+q zPI!<0b=Fh(UtQk0!b^SMWj%a~@oLkcYc;v62QM}2m$mS}&ZRq{U8`WWgYbX(CfLFM zI^S^}-n)lq&%(R*&^Ujz>(2Ld6#i}Z&Ia%`xS!+4P#(_jT3`+@b=6=i@G(xG0#C>G znK``FtuvRwOMU7*E=u?rcHO!RR`ur1hNsgj;2~HIi8KbE)p_#!A=ixC0apEI8N$=C zyPg47SJYL(XL0vaXpdT81U>NatV+j)pXXOQU9@jRd;%-K&pW}2`#HXl@^JpSdQo6y zvmyqpA}YTIEAQG-V0C|!D)bpU-)CUeMW-*uQgHGIusWUb8@yD_E8D>;TWtxn8r2XJ zFlihf3RX?4_C)(dvt{5jWI-qV?sN8pfz_?eKH&4~u(fDk&z}oEQBBOC6LLSt=TRQc z?=`JH{J{|crr@Jg@Eg3;iBsz1xzk%T7p(qxJqTXvUA5C-<=bK$^yHo4*TE{}WNq;A zyjYC(GxtqkrF=#g&y@Oa$zW9&`w^@Pd&h%SLSoHCVJvkC{{TMWjjBS|Qgti51helX?X{8IK;2Sj}5&Ez{bB;Wbn+4A+BgUEM&N&71s+83Q9-#MOqXEpMjxu4_P zQ6A3!Pkq)5q*!hgud%*`*IJ)QUQI} z$Ne1tC*|S%72!Ua9J*&)%6&4U>7H%A@8tpAkInbP3=+9dhWk05@7d=36`_vFRI2aH zbxeGzzVj-o@BFQg{JWqkRL8`E>N5W(Qpdziq>c&4x1v0pKk;f*xG*=4?{N_G`4+8W z_!RptM`52}YN-ZqB4_FIeZs#re%lxG`I8GD;Zsye8HKg4;i7PS?_s-cNh{&snszhA ze4g4%zOIeU?};_;rXa z{|tCq9nW36d}oZS*m0WJQ@QLKf^qfyQG1N5qGQn*SN@ZFVO*K@PsF&YbGj17(%jS= zXvb*y$;Xw6GWJV}DZ4PPhP}Omab@YZ9ph@~7v&`3xwxZr2V-f#z+$vdw93S|^0xHH zxZ-|}FQ7b}UrApFtd1tv0;}%aK;{dzlt)$N&wz$(8>Kd?F*lmb@g ztkuCs>sb!ke+8@rEBAS7V3q5-53CM!djwW#c{{->WpHJ%Qttf_eDY_MpzT@j23Q%M z3h5<}2>!c(M6PY#m%d>!2~M zgI2T-j;D37gx0~M6>J^6C$bK5zm#>bBJZyzmU4epmG(u^w7>GB{nb|5UvWRj*PuMS zzp7~a_U;nu5Awd9>jPTTew*tFa-G4l)E`v556b3tDer^jtuwfl@?N#lo*(3U&-h+7 zJ`c$Er%5?KD0Z(}S@f%laBhPAyT9w)gqT10BX!Xwq>KI{qKm#dE!RcAj{MKMXlyy? zqOPQia(;#0E}O5U=@TH{<4HcwWb$#gk&m;Be4KIQ@gg7R zPx4;|laKS5e4JqNak!u3-%%dUukZ(D<4TG@sJzNNOct%A)b(@oaG_nR^Ax;OKU!%H zFLh9}W$<*4pBuYZh|e5*8Mhr|zrUY~_UOj)yB&C z|IsB5ta{Wq9xmkc%KHvhtvbbl)&8Mc(EU1G`v6uuP7Z_S@NHQo_=ER$OtBVnHW(2N zRyKhv!0M@Mb1)fFvKy>cxVodg>3JadRC4Zv-@Uf(UT75Odj*2e<0_$OKianpd>YoU zfnLG=9DkGYaQ>v3cJNZ`cWnbcmbJX$6-G?AgO@sd=_;_wtThK-s`i(AVD)vc4_M83 z@(QdD1X_Ym+Tp732L~=W09KWnG=V4BC@>qW8dlc=pScS!qg}0|d4lk_Xgs|dG}3h~ z4AHi@stP{6I~_us`#HWP<>CBN)^mIoR zJ6q6s=da^Rci#D)g!9hIbl%yY&O3Lc^Uhyx%g;N{r}NI8>Adr3I`7Q=9Ir#?ojLzM zb??V5x@UU^-Lw5}mHeJ_67c_0nf``s{^$69qTJ&K2NXhhO^;jJz8U* z5Pfwg=JR7?y22j}EIfj>Z{)adn9p^7&xHS_?zsf>xv_f**0oWp;b^}ce;sStN98S; zp9hqD#(I~&_!_kLtZ&cJ)-gH@eO`B#543mg=lI){hx1Qu(+aF?b)3LzVYoL~4QSm8 zti~Ayfz=YzxnN~kbRVqRIW7Y$i^A7nwY+;%@QLW5(MnjqCU=MdE3@1tSl3$4xdm4H zqqM*$ZsZlTM}0CsF67aurUgGD?!F<~F{9MLXPnAmw7H+-btw<$?>b=&SiMd20xR?S zJHX0&+!(NWZ4?Vue~b(TtE9V{@Nxdwy&J4fU)RGvq29xRV3pU?3aqY#<$zVcb#7p_ zIHL;M7J)6mNBf`(#)-zq{$Mpb-4=XS#XF;IWoQmQ`E?(l&HWs|obqt~Pf31Y<*ge4 zR+~DdfYsdNeqa^YHw&yb&QAcVvtJv5)!Z#H2rT>O+PzSk(^;1glzFqrvJ^wd!Ei z=;{ja+49&1?FpMb!K%2uC0JcKwi2v1Z5RhWh3CA{4ptfpRwG<%fED+1{2t1~`G4ej zoU+uTFYWydUqtG8C5Y7X;&`$985HA6wlYW=SO2Z^)he2=y3%}Ah2|^n=XkOCO3FGI zM(beZ`to&fHLZh}XdPT#%60HwIjnZ;cMf-NIQtsO?(texw;d&zbcJAkRv3tlVXD(Oyq9+27tn;=W&cmc^+rF1YMNR-AFl)lS}$4=U3?MviVAi z-Y&(*@hF3j^I3wA^B4IzW5~zZKt4_c`8Yb{<1`>2=NkDhMdahWARnh0`8eFq@wt?T z^DF#8*|?J84=Rn^8!C%dQp&h+0O#Y*DZL68`X3G3+em14Q&)wT8sYzRkI+BTst+`W zF$dqn|BB2SX(hyDG}vw(~JSHhT_lxT2AhZ{M zk)Jp0so?`%VrOzN+WoTUv=-tQ&S(UEmHRo~o$_%09=dk$QWxhsh6_2@hc1R!SV_kY zUTWP|tHA2as@Z#m`0h*ZfmPK}KJcAqk9q}G5!ROA6Ee0cw3O8L{)umAc8#JEzcjXGf9q&VSc;G68hnd8WvBGQ&l_li48h zoeanGcQTy6wD&XcJ=$Rq_+6BT z^Z&?t^oRD^z#rs#^dlwIqu*Bn>e0`c?uUIs#MzbjHm1g%lkh2?P4&atXL0X3&M}>- zoe(XoSz96-!5>t!PJ>U8aJ&W9J|&YyV5QRB1wO^GuFCMdbam%pU5meMjJCH;KdfIb zZt26PxEVJe>)pm~u1UhrW0&HI_P3|OW!l3(Dw{iMZRa4LfC0e#QF{T%;<@^Jpy+iQgj<8z*;KIW(?pZeh$Ob)9BFZGDtcszsa7xltkedYIf zJcFLOgYXP~S(}b$@Z{`jc!L+Cap25Fs9W0{zWJ)SLh3I&q7rP8{o3St51f%5uLb>r{NdDECXbU-U=nqI?ge*!jT` z63!2@F3RWo#Lf@i6FEP~{Zh^kD)e^Qd?m#nl;Y#ql!K46n|z!Y@^P+{k5gB~$4Mg} zrxW=&%gKKkNIp&+`8f5-$KigCXCH_2EBry(xRT-z4w`HfDvMT9db`*Jx?lTwBg2LM zVH1turRG1IjkAQGRt?-E#GKDah3*%h@H@QJsXeYW7h*1*uLUpFqT_3{9}eGmM2IoS zsu3r&>orS)Z>VDY0pEE0H;S_tV(c<>@!oBy^&aoq)4QtU9sFF zyt5UZcebMQ&L8N!^AkGn97yM#Pf9rNT!+pn^Y;nrBIljCpW`hl51)5doTHaLoqUdd zhR8kJQtoemEK=V&kLo+$r~1y{8~pqF&hb>=`LIZR=SEcDIfd#w*OpM<*^ufoU!nTW zov6O^bE@ym{Ty#WdAPoFMW`F@7;_i%`I7zpFjtSTtAe)sd0WiMQyZv2BaPDTk2!ov zC0l5uH|}>u`^=aoZG^dfo>?y1+|TiWl!x<=J{yB`^zX*T;oF#ey-)DJY|>(|_N8l8 zg+JKMiw1s4x7lCmQDXHs;FX2=IAxp)cAk zw)ulq{jc4@>fPHNU}aI+AAG{QZ$$e@gg5vcij$vv;(m^AMR_>C&BQNY)#p=YwiqI3C7K^PpDkH8LX0~IKWGdG1>!GG24p3O8<5WSlvmU23D$%pM%ep zS?kem?4Jf!Ik#7X)shJ>z-rckGvKp(`yI5aX(oczuHaeF-npOSmrx$gzt7nMd#Z;C zR$$et$5gP2?P394)cnLUunJBa2Uf3pTmdV6r8!{LwDKdcivMg3KD8~B;Z69Y?f|Pd z7YwmS((ia4tm?YTzoF`K_!L-$TsKM-p067xDnUzeU#5$8o<#{*W%b_$R@~3=Ih2R< z2MrnkR#hE_fz>y!jbN2KU;tR1?7au9ytLPXRdl!tp1WInwt`i_Wi9wPwRZFbt9BPm zz-n`YOt2~pa|WwXyT5|fhP1}ubJqAB+D%_{11nX{#^5tFx;5I*RE@x=;J2%2b3eyx zQy$KrcjynWiqBsHRy`w+fYrMLe}L7t5$Rxcv(J98GOuRcv=z-nNxCSbMY!6dNq zsn!v!Dt#{ot5}oqU=_2iHrh{4bOj$aQ4dZIc6KjmCs~fLjTq(b4k8$Oex*X%GPRpSfSHT7vc-HDw z^Tk+-Ot(b4bI@-XR~bVaVO*Ul^u;si5i$~EDQ3@Hv@<5TVJtoQr5e0c?&tU^l!x;x z#+7VkkTR}*mig+ng!$^b$b7Y5WWM5lDf5-sI@oC9zh4KlXdPTc>)>%(2MbHN4#xf@ z>tIFOUwxtdm02nGSGQ?j#QP=QM@iXVJ)k_izxvtt?JH>CzJT`I`$hKc2SoPm9KW3M zaDK)6ploiJ@;>-8>I~kbGsKh5u$=UPyQDK@kj}7}bO!F{_>Gi@^Or@x`b7HG8`7`z z8~%I!DxLJJOCtJ}9qCu+Nxw3YpkJAi?!@&3T}ZzwBK?Z{Io^iyuzsb`MP<(*>!M=y r2Nim|jFl9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/xdmf-hdf5/examples/generated/uniform.h5 b/external/xdmf-hdf5/examples/generated/uniform.h5 new file mode 100644 index 0000000000000000000000000000000000000000..d4efe0c0b205c26781f874edc2a4b01799cf972d GIT binary patch literal 8968 zcmeHMF>g~b5I!fgJgQVp+MyL7@(@cGARUm(0zpcuEI;~s|ccF2WK2k+N&9kfb&gVOy?eph*zVvgcurWV(a}IQI9JmJQ zuqvoQ z*2BIEQsCfUP^njUytfT+ry8~|;k<5OO~%_SJm0vFXYCP>m;#!Cf`zmF530?;-)#Ws z{`!bW|Fs9AufjGtPcpxse4b8cXn?5mbhu#4)eVfD@+N|Q9!TJ zj02|sqT)b3OAZk~PlTH7s~uBji(1p{7M`< zG2*>^56WY5(=hyQ&C>vFzF$Sf-|`~q%lB|h)3au-hzCsk%J;m(_>pDoHvO89c|ow} zRs2S+e;><>!ibdaVXA+>T4&tKIWciOqWRdUE10FdV8jCQl>jCQl>jCS5De=JM?vG3jtVF0O_vSClTp-#nWfV)B>Izq=eK + + + + + + + + uniform.h5:/grids/g0001/origin + + + uniform.h5:/grids/g0001/spacing + + + + + uniform.h5:/attributes/a0001/values + + + + + diff --git a/external/xdmf-hdf5/examples/generated/unstructured.h5 b/external/xdmf-hdf5/examples/generated/unstructured.h5 new file mode 100644 index 0000000000000000000000000000000000000000..f2ff61a438eafdba9f7d57139d35882c8b280e67 GIT binary patch literal 53048 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 CL>*!P literal 0 HcmV?d00001 diff --git a/external/xdmf-hdf5/examples/generated/unstructured.xdmf b/external/xdmf-hdf5/examples/generated/unstructured.xdmf new file mode 100644 index 00000000..475aa5a1 --- /dev/null +++ b/external/xdmf-hdf5/examples/generated/unstructured.xdmf @@ -0,0 +1,248 @@ + + + + + + + + + unstructured.h5:/grids/g0001/connectivity + + + + + unstructured.h5:/grids/g0001/points + + + + + + + unstructured.h5:/grids/g0002/connectivity + + + + + unstructured.h5:/grids/g0002/points + + + + + + + unstructured.h5:/grids/g0003/connectivity + + + + + unstructured.h5:/grids/g0003/points + + + + + + + unstructured.h5:/grids/g0004/connectivity + + + + + unstructured.h5:/grids/g0004/points + + + + + + + unstructured.h5:/grids/g0005/connectivity + + + + + unstructured.h5:/grids/g0005/points + + + + + + + unstructured.h5:/grids/g0006/connectivity + + + + + unstructured.h5:/grids/g0006/points + + + + + + + unstructured.h5:/grids/g0007/connectivity + + + + + unstructured.h5:/grids/g0007/points + + + + + + + unstructured.h5:/grids/g0008/connectivity + + + + + unstructured.h5:/grids/g0008/points + + + + + + + unstructured.h5:/grids/g0009/connectivity + + + + + unstructured.h5:/grids/g0009/points + + + + + + + unstructured.h5:/grids/g0010/connectivity + + + + + unstructured.h5:/grids/g0010/points + + + + + + + unstructured.h5:/grids/g0011/connectivity + + + + + unstructured.h5:/grids/g0011/points + + + + + + + unstructured.h5:/grids/g0012/connectivity + + + + + unstructured.h5:/grids/g0012/points + + + + + + + unstructured.h5:/grids/g0013/connectivity + + + + + unstructured.h5:/grids/g0013/points + + + + + + + unstructured.h5:/grids/g0014/connectivity + + + + + unstructured.h5:/grids/g0014/points + + + + + + + unstructured.h5:/grids/g0015/connectivity + + + + + unstructured.h5:/grids/g0015/points + + + + + + + unstructured.h5:/grids/g0016/connectivity + + + + + unstructured.h5:/grids/g0016/points + + + + + + + unstructured.h5:/grids/g0017/connectivity + + + + + unstructured.h5:/grids/g0017/points + + + + + + + unstructured.h5:/grids/g0018/connectivity + + + + + unstructured.h5:/grids/g0018/points + + + + + + + unstructured.h5:/grids/g0019/connectivity + + + + + unstructured.h5:/grids/g0019/points + + + + + + + unstructured.h5:/grids/g0020/connectivity + + + + + unstructured.h5:/grids/g0020/points + + + + + + diff --git a/external/xdmf-hdf5/examples/generated/volume.h5 b/external/xdmf-hdf5/examples/generated/volume.h5 new file mode 100644 index 0000000000000000000000000000000000000000..84a291ebb9b67cfd825748b2033055f9c5db788d GIT binary patch literal 83200 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 hTp_! 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

CCXC0?`l2_blwS<9 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 r0j=NjNEsW)`I7}jZWP`+zJUPbQwA@mqjCjo + + + + + + + + volume.h5:/grids/g0001/origin + + + volume.h5:/grids/g0001/spacing + + + + + volume.h5:/attributes/a0001/values + + + + + diff --git a/external/xdmf-hdf5/src/xdmf_hdf5.F90 b/external/xdmf-hdf5/src/xdmf_hdf5.F90 new file mode 100644 index 00000000..1e19c7f0 --- /dev/null +++ b/external/xdmf-hdf5/src/xdmf_hdf5.F90 @@ -0,0 +1,2590 @@ +module xdmf_hdf5_m + use, intrinsic :: iso_fortran_env, only: int32, int64, real32, real64 +#ifdef XDMF_HDF5_WITH_MPI + use mpi +#endif + use xdmf_model_m, only: xdmf_status_t, xdmf_options_t, & + xdmf_collection_id_t, xdmf_grid_id_t, xdmf_attribute_id_t, & + collection_record_t, grid_record_t, attribute_record_t, & + XDMF_SUCCESS, XDMF_ERROR_ARGUMENT, XDMF_ERROR_STATE, & + XDMF_ERROR_IO, XDMF_ERROR_HDF5, XDMF_ERROR_CONSISTENCY, & + XDMF_SERIES_NONE, XDMF_SERIES_TIME, XDMF_SERIES_FREQUENCY, & + XDMF_SERIES_PARAMETER, XDMF_GEOMETRY_UNIFORM, & + XDMF_GEOMETRY_RECTILINEAR, XDMF_GEOMETRY_CURVILINEAR, & + XDMF_GEOMETRY_UNSTRUCTURED, XDMF_TOPOLOGY_POLYVERTEX, & + XDMF_TOPOLOGY_POLYLINE, XDMF_TOPOLOGY_POLYGON, & + XDMF_TOPOLOGY_TRIANGLE, XDMF_TOPOLOGY_QUADRILATERAL, & + XDMF_TOPOLOGY_TETRAHEDRON, XDMF_TOPOLOGY_PYRAMID, & + XDMF_TOPOLOGY_WEDGE, XDMF_TOPOLOGY_HEXAHEDRON, & + XDMF_TOPOLOGY_POLYHEDRON, XDMF_TOPOLOGY_EDGE_3, & + XDMF_TOPOLOGY_QUADRILATERAL_9, XDMF_TOPOLOGY_TRIANGLE_6, & + XDMF_TOPOLOGY_QUADRILATERAL_8, XDMF_TOPOLOGY_TETRAHEDRON_10, & + XDMF_TOPOLOGY_PYRAMID_13, XDMF_TOPOLOGY_WEDGE_15, & + XDMF_TOPOLOGY_WEDGE_18, XDMF_TOPOLOGY_HEXAHEDRON_20, & + XDMF_TOPOLOGY_HEXAHEDRON_24, XDMF_TOPOLOGY_HEXAHEDRON_27, & + XDMF_TOPOLOGY_MIXED, XDMF_TOPOLOGY_2D_SMESH, & + XDMF_TOPOLOGY_2D_RECTMESH, XDMF_TOPOLOGY_2D_CORECTMESH, & + XDMF_TOPOLOGY_3D_SMESH, XDMF_TOPOLOGY_3D_RECTMESH, & + XDMF_TOPOLOGY_3D_CORECTMESH, XDMF_CENTER_NODE, & + XDMF_CENTER_EDGE, XDMF_CENTER_FACE, XDMF_CENTER_CELL, & + XDMF_CENTER_GRID, XDMF_ATTRIBUTE_SCALAR, XDMF_ATTRIBUTE_VECTOR, & + XDMF_ATTRIBUTE_TENSOR, XDMF_ATTRIBUTE_TENSOR6, & + XDMF_ATTRIBUTE_MATRIX, XDMF_ATTRIBUTE_GLOBAL_ID, & + XDMF_NUMERIC_REAL32, XDMF_NUMERIC_REAL64, XDMF_NUMERIC_INT32, & + XDMF_NUMERIC_INT64, set_status_success, set_status_error, & + make_collection_id, make_grid_id, make_attribute_id, & + collection_id_value, grid_id_value, attribute_id_value, & + collection_id_owner, grid_id_owner, attribute_id_owner, & + topology_name, topology_nodes_per_element, topology_is_supported, & + center_name, attribute_type_name, numeric_type_name, product_int64 + use xdmf_hdf5_backend_m, only: hdf5_file_t, hdf_create_file, & + hdf_file_is_open, hdf_close_file, hdf_flush_file, hdf_create_group, & + hdf_write_dataset, & + hdf_create_series_dataset, hdf_append_series, & + hdf_append_series_hyperslab, hdf_truncate_series + use xdmf_xml_m, only: write_xdmf_document + + implicit none + + private + + public :: XDMF_SUCCESS, XDMF_ERROR_ARGUMENT, XDMF_ERROR_STATE + public :: XDMF_ERROR_IO, XDMF_ERROR_HDF5 + public :: XDMF_ERROR_CONSISTENCY + public :: XDMF_SERIES_NONE, XDMF_SERIES_TIME + public :: XDMF_SERIES_FREQUENCY, XDMF_SERIES_PARAMETER + public :: XDMF_GEOMETRY_UNIFORM, XDMF_GEOMETRY_RECTILINEAR + public :: XDMF_GEOMETRY_CURVILINEAR, XDMF_GEOMETRY_UNSTRUCTURED + public :: XDMF_TOPOLOGY_POLYVERTEX, XDMF_TOPOLOGY_POLYLINE + public :: XDMF_TOPOLOGY_POLYGON, XDMF_TOPOLOGY_TRIANGLE + public :: XDMF_TOPOLOGY_QUADRILATERAL, XDMF_TOPOLOGY_TETRAHEDRON + public :: XDMF_TOPOLOGY_PYRAMID, XDMF_TOPOLOGY_WEDGE + public :: XDMF_TOPOLOGY_HEXAHEDRON, XDMF_TOPOLOGY_POLYHEDRON + public :: XDMF_TOPOLOGY_EDGE_3, XDMF_TOPOLOGY_QUADRILATERAL_9 + public :: XDMF_TOPOLOGY_TRIANGLE_6, XDMF_TOPOLOGY_QUADRILATERAL_8 + public :: XDMF_TOPOLOGY_TETRAHEDRON_10, XDMF_TOPOLOGY_PYRAMID_13 + public :: XDMF_TOPOLOGY_WEDGE_15, XDMF_TOPOLOGY_WEDGE_18 + public :: XDMF_TOPOLOGY_HEXAHEDRON_20, XDMF_TOPOLOGY_HEXAHEDRON_24 + public :: XDMF_TOPOLOGY_HEXAHEDRON_27, XDMF_TOPOLOGY_MIXED + public :: XDMF_TOPOLOGY_2D_SMESH, XDMF_TOPOLOGY_2D_RECTMESH + public :: XDMF_TOPOLOGY_2D_CORECTMESH, XDMF_TOPOLOGY_3D_SMESH + public :: XDMF_TOPOLOGY_3D_RECTMESH, XDMF_TOPOLOGY_3D_CORECTMESH + public :: XDMF_CENTER_NODE, XDMF_CENTER_EDGE, XDMF_CENTER_FACE + public :: XDMF_CENTER_CELL, XDMF_CENTER_GRID + public :: XDMF_ATTRIBUTE_SCALAR, XDMF_ATTRIBUTE_VECTOR + public :: XDMF_ATTRIBUTE_TENSOR, XDMF_ATTRIBUTE_TENSOR6 + public :: XDMF_ATTRIBUTE_MATRIX, XDMF_ATTRIBUTE_GLOBAL_ID + public :: XDMF_NUMERIC_REAL32, XDMF_NUMERIC_REAL64 + public :: XDMF_NUMERIC_INT32, XDMF_NUMERIC_INT64 + public :: xdmf_status_t, xdmf_options_t, xdmf_collection_id_t + public :: xdmf_grid_id_t, xdmf_attribute_id_t + + character(len=*), parameter :: SERIES_VALUES_PATH = '/series/values' + integer(int64), save :: next_writer_token = 1_int64 + + type, public :: xdmf_writer_t + private + type(hdf5_file_t) :: hdf5_file + type(xdmf_options_t) :: options + type(collection_record_t), allocatable :: collections(:) + type(grid_record_t), allocatable :: grids(:) + type(attribute_record_t), allocatable :: attributes(:) + real(real64), allocatable :: series_values(:) + character(len=:), allocatable :: xdmf_path + character(len=:), allocatable :: hdf5_path + character(len=:), allocatable :: hdf5_name + integer :: next_collection_id = 1 + integer :: next_grid_id = 1 + integer :: next_attribute_id = 1 + integer :: committed_steps = 0 + integer :: communicator = 0 + integer :: rank = 0 + integer :: root_rank = 0 + integer(int64) :: owner_token = 0_int64 + real(real64) :: active_step_value = 0.0_real64 + logical :: is_open = .false. + logical :: definitions_locked = .false. + logical :: step_is_active = .false. + logical :: is_poisoned = .false. + logical :: is_collective = .false. + contains + procedure, private :: writer_create_with_options + procedure, private :: writer_create_default + generic, public :: create => writer_create_with_options, & + writer_create_default + procedure, public :: define_collection => writer_define_collection + procedure, private :: writer_define_uniform_grid_r4 + procedure, private :: writer_define_uniform_grid_r8 + generic, public :: define_uniform_grid => & + writer_define_uniform_grid_r4, writer_define_uniform_grid_r8 + procedure, private :: writer_define_rectilinear_grid_2d_r4 + procedure, private :: writer_define_rectilinear_grid_2d_r8 + procedure, private :: writer_define_rectilinear_grid_3d_r4 + procedure, private :: writer_define_rectilinear_grid_3d_r8 + generic, public :: define_rectilinear_grid => & + writer_define_rectilinear_grid_2d_r4, & + writer_define_rectilinear_grid_2d_r8, & + writer_define_rectilinear_grid_3d_r4, & + writer_define_rectilinear_grid_3d_r8 + procedure, private :: writer_define_curvilinear_grid_r4 + procedure, private :: writer_define_curvilinear_grid_r8 + generic, public :: define_curvilinear_grid => & + writer_define_curvilinear_grid_r4, & + writer_define_curvilinear_grid_r8 + procedure, private :: writer_define_unstructured_grid_r4 + procedure, private :: writer_define_unstructured_grid_r8 + generic, public :: define_unstructured_grid => & + writer_define_unstructured_grid_r4, & + writer_define_unstructured_grid_r8 + procedure, private :: writer_define_mixed_grid_r4 + procedure, private :: writer_define_mixed_grid_r8 + generic, public :: define_mixed_grid => writer_define_mixed_grid_r4, & + writer_define_mixed_grid_r8 + procedure, private :: writer_define_attribute_with_series + procedure, private :: writer_define_static_attribute + generic, public :: define_attribute => & + writer_define_attribute_with_series, writer_define_static_attribute + procedure, private :: writer_write_attribute_r4 + procedure, private :: writer_write_attribute_r8 + procedure, private :: writer_write_attribute_i4 + procedure, private :: writer_write_attribute_i8 + generic, public :: write_attribute => writer_write_attribute_r4, & + writer_write_attribute_r8, writer_write_attribute_i4, & + writer_write_attribute_i8 + procedure, private :: writer_write_attribute_hyperslab_r4 + procedure, private :: writer_write_attribute_hyperslab_r8 + procedure, private :: writer_write_attribute_hyperslab_i4 + procedure, private :: writer_write_attribute_hyperslab_i8 + generic, public :: write_attribute_hyperslab => & + writer_write_attribute_hyperslab_r4, & + writer_write_attribute_hyperslab_r8, & + writer_write_attribute_hyperslab_i4, & + writer_write_attribute_hyperslab_i8 + procedure, public :: begin_step => writer_begin_step + procedure, public :: end_step => writer_end_step + procedure, public :: flush => writer_flush + procedure, public :: close => writer_close + final :: writer_finalize + end type xdmf_writer_t + +contains + + subroutine writer_create_with_options(this, path, options, status) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: path + type(xdmf_options_t), intent(in) :: options + type(xdmf_status_t), intent(out) :: status + + call writer_create_impl(this, path, options, status) + end subroutine writer_create_with_options + + subroutine writer_create_default(this, path, status) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: path + type(xdmf_status_t), intent(out) :: status + + type(xdmf_options_t) :: options + + call writer_create_impl(this, path, options, status) + end subroutine writer_create_default + + subroutine writer_create_impl(this, path, options, status) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: path + type(xdmf_options_t), intent(in) :: options + type(xdmf_status_t), intent(out) :: status + + integer(int64) :: scalar_shape(0) + integer :: mpi_error + logical :: xdmf_exists + + call set_status_success(status) + if (this%is_open) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'The XDMF writer is already open') + return + end if + if (len_trim(path) == 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The output path must not be empty') + return + end if + call validate_options(options, status) + if (status%is_error()) return + + call reset_writer_metadata(this) + this%options = options + this%is_collective = options%collective_io + this%communicator = options%communicator + this%root_rank = options%root_rank +#ifdef XDMF_HDF5_WITH_MPI + if (this%is_collective) then + call MPI_Comm_rank(this%communicator, this%rank, mpi_error) + if (mpi_error /= MPI_SUCCESS) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Could not query the collective-output MPI communicator') + return + end if + end if +#endif + call derive_output_paths(path, this%xdmf_path, this%hdf5_path, & + this%hdf5_name) + if (.not. options%overwrite) then + inquire(file=this%xdmf_path, exist=xdmf_exists) + if (xdmf_exists) then + call set_status_error(status, XDMF_ERROR_IO, & + 'Output file already exists: '//this%xdmf_path) + return + end if + end if + + call hdf_create_file(this%hdf5_file, this%hdf5_path, options, status) + call synchronize_collective_status(this, status, & + 'Collective HDF5 file creation failed') + if (status%is_error()) then + if (hdf_file_is_open(this%hdf5_file)) then + this%is_open = .true. + this%is_poisoned = .true. + end if + return + end if + this%is_open = .true. + + call hdf_create_group(this%hdf5_file, '/grids', status) + if (status%is_error()) then + call close_after_create_failure(this, status) + return + end if + call hdf_create_group(this%hdf5_file, '/attributes', status) + if (status%is_error()) then + call close_after_create_failure(this, status) + return + end if + call hdf_create_group(this%hdf5_file, '/series', status) + if (status%is_error()) then + call close_after_create_failure(this, status) + return + end if + if (options%series_kind /= XDMF_SERIES_NONE) then + call hdf_create_series_dataset(this%hdf5_file, SERIES_VALUES_PATH, & + XDMF_NUMERIC_REAL64, scalar_shape, options, status) + if (status%is_error()) call close_after_create_failure(this, status) + end if + end subroutine writer_create_impl + + subroutine writer_define_collection(this, name, collection_id, status) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + type(xdmf_collection_id_t), intent(out) :: collection_id + type(xdmf_status_t), intent(out) :: status + + type(collection_record_t) :: record + integer :: index + + collection_id = make_collection_id(0) + call check_definition_state(this, name, status) + if (status%is_error()) return + do index = 1, size(this%collections) + if (this%collections(index)%name == trim(name)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Collection names must be unique') + return + end if + end do + + record%id = this%next_collection_id + record%name = trim(name) + this%next_collection_id = this%next_collection_id + 1 + call append_collection(this, record, status) + if (.not. status%is_error()) then + collection_id = make_collection_id(record%id, this%owner_token) + end if + end subroutine writer_define_collection + + subroutine writer_define_uniform_grid_r4(this, name, dimensions, origin, & + spacing, grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + real(real32), intent(in) :: origin(:), spacing(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + + grid_id = make_grid_id(0) + call prepare_uniform_grid(this, name, dimensions, origin_size=size(origin), & + spacing_size=size(spacing), record=record, status=status, & + collection_id=collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL32 + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%origin_path, origin, & + [int(record%dimension, int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%spacing_path, spacing, & + [int(record%dimension, int64)], status) + end if + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_uniform_grid_r4 + + subroutine writer_define_uniform_grid_r8(this, name, dimensions, origin, & + spacing, grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + real(real64), intent(in) :: origin(:), spacing(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + + grid_id = make_grid_id(0) + call prepare_uniform_grid(this, name, dimensions, origin_size=size(origin), & + spacing_size=size(spacing), record=record, status=status, & + collection_id=collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL64 + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%origin_path, origin, & + [int(record%dimension, int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%spacing_path, spacing, & + [int(record%dimension, int64)], status) + end if + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_uniform_grid_r8 + + subroutine prepare_uniform_grid(this, name, dimensions, origin_size, & + spacing_size, record, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + integer, intent(in) :: origin_size, spacing_size + type(grid_record_t), intent(out) :: record + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + call prepare_structured_grid(this, name, dimensions, record, status, & + collection_id) + if (status%is_error()) return + if (origin_size /= record%dimension .or. & + spacing_size /= record%dimension) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Uniform-grid origin and spacing must match the grid dimension') + return + end if + + record%geometry_type = XDMF_GEOMETRY_UNIFORM + if (record%dimension == 2) then + record%topology_type = XDMF_TOPOLOGY_2D_CORECTMESH + else + record%topology_type = XDMF_TOPOLOGY_3D_CORECTMESH + end if + record%origin_path = record%group_path//'/origin' + record%spacing_path = record%group_path//'/spacing' + end subroutine prepare_uniform_grid + + subroutine writer_define_rectilinear_grid_2d_r4(this, name, x, y, & + grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + real(real32), intent(in) :: x(:), y(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + + grid_id = make_grid_id(0) + call prepare_rectilinear_grid(this, name, & + [int(size(x), int64), int(size(y), int64)], record, status, & + collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL32 + call write_rectilinear_group_r4(this, record, x, y, status=status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_rectilinear_grid_2d_r4 + + subroutine writer_define_rectilinear_grid_2d_r8(this, name, x, y, & + grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + real(real64), intent(in) :: x(:), y(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + + grid_id = make_grid_id(0) + call prepare_rectilinear_grid(this, name, & + [int(size(x), int64), int(size(y), int64)], record, status, & + collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL64 + call write_rectilinear_group_r8(this, record, x, y, status=status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_rectilinear_grid_2d_r8 + + subroutine writer_define_rectilinear_grid_3d_r4(this, name, x, y, z, & + grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + real(real32), intent(in) :: x(:), y(:), z(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + + grid_id = make_grid_id(0) + call prepare_rectilinear_grid(this, name, & + [int(size(x), int64), int(size(y), int64), int(size(z), int64)], & + record, status, collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL32 + call write_rectilinear_group_r4(this, record, x, y, z, status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_rectilinear_grid_3d_r4 + + subroutine writer_define_rectilinear_grid_3d_r8(this, name, x, y, z, & + grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + real(real64), intent(in) :: x(:), y(:), z(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + + grid_id = make_grid_id(0) + call prepare_rectilinear_grid(this, name, & + [int(size(x), int64), int(size(y), int64), int(size(z), int64)], & + record, status, collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL64 + call write_rectilinear_group_r8(this, record, x, y, z, status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_rectilinear_grid_3d_r8 + + subroutine prepare_rectilinear_grid(this, name, dimensions, record, & + status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + type(grid_record_t), intent(out) :: record + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + integer :: path_length + + call prepare_structured_grid(this, name, dimensions, record, status, & + collection_id) + if (status%is_error()) return + record%geometry_type = XDMF_GEOMETRY_RECTILINEAR + if (record%dimension == 2) then + record%topology_type = XDMF_TOPOLOGY_2D_RECTMESH + else + record%topology_type = XDMF_TOPOLOGY_3D_RECTMESH + end if + record%axis_sizes = dimensions + path_length = len(record%group_path) + len('/axis_x') + allocate(character(len=path_length) :: & + record%axis_paths(record%dimension)) + record%axis_paths(1) = record%group_path//'/axis_x' + record%axis_paths(2) = record%group_path//'/axis_y' + if (record%dimension == 3) then + record%axis_paths(3) = record%group_path//'/axis_z' + end if + end subroutine prepare_rectilinear_grid + + subroutine write_rectilinear_group_r4(this, record, x, y, z, status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + real(real32), intent(in) :: x(:), y(:) + real(real32), intent(in), optional :: z(:) + type(xdmf_status_t), intent(out) :: status + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%axis_paths(1), x, & + [int(size(x), int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%axis_paths(2), y, & + [int(size(y), int64)], status) + end if + if (present(z) .and. .not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%axis_paths(3), z, & + [int(size(z), int64)], status) + end if + end subroutine write_rectilinear_group_r4 + + subroutine write_rectilinear_group_r8(this, record, x, y, z, status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + real(real64), intent(in) :: x(:), y(:) + real(real64), intent(in), optional :: z(:) + type(xdmf_status_t), intent(out) :: status + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%axis_paths(1), x, & + [int(size(x), int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%axis_paths(2), y, & + [int(size(y), int64)], status) + end if + if (present(z) .and. .not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%axis_paths(3), z, & + [int(size(z), int64)], status) + end if + end subroutine write_rectilinear_group_r8 + + subroutine writer_define_curvilinear_grid_r4(this, name, dimensions, & + points, grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + real(real32), intent(in) :: points(:, :) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + integer(int64), allocatable :: shape(:) + + grid_id = make_grid_id(0) + call prepare_curvilinear_grid(this, name, dimensions, size(points, 1), & + size(points, 2), record, status, collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL32 + shape = [int(record%dimension, int64), dimensions] + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%points_path, & + reshape(points, [size(points)]), shape, status) + end if + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_curvilinear_grid_r4 + + subroutine writer_define_curvilinear_grid_r8(this, name, dimensions, & + points, grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + real(real64), intent(in) :: points(:, :) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + integer(int64), allocatable :: shape(:) + + grid_id = make_grid_id(0) + call prepare_curvilinear_grid(this, name, dimensions, size(points, 1), & + size(points, 2), record, status, collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL64 + shape = [int(record%dimension, int64), dimensions] + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%points_path, & + reshape(points, [size(points)]), shape, status) + end if + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_curvilinear_grid_r8 + + subroutine prepare_curvilinear_grid(this, name, dimensions, point_dimension, & + point_count, record, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + integer, intent(in) :: point_dimension, point_count + type(grid_record_t), intent(out) :: record + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + call prepare_structured_grid(this, name, dimensions, record, status, & + collection_id) + if (status%is_error()) return + if (point_dimension /= record%dimension .or. & + int(point_count, int64) /= record%number_of_points) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Curvilinear points must have shape (dimension, number_of_points)') + return + end if + + record%geometry_type = XDMF_GEOMETRY_CURVILINEAR + if (record%dimension == 2) then + record%topology_type = XDMF_TOPOLOGY_2D_SMESH + else + record%topology_type = XDMF_TOPOLOGY_3D_SMESH + end if + record%points_path = record%group_path//'/points' + end subroutine prepare_curvilinear_grid + + subroutine writer_define_unstructured_grid_r4(this, name, topology, & + points, connectivity, grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer, intent(in) :: topology + real(real32), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:, :) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + integer(int64), allocatable :: zero_connectivity(:, :) + + grid_id = make_grid_id(0) + call prepare_unstructured_grid(this, name, topology, size(points, 1), & + size(points, 2), connectivity, record, zero_connectivity, status, & + collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL32 + call write_unstructured_group_r4(this, record, points, & + zero_connectivity, status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_unstructured_grid_r4 + + subroutine writer_define_unstructured_grid_r8(this, name, topology, & + points, connectivity, grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer, intent(in) :: topology + real(real64), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:, :) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + integer(int64), allocatable :: zero_connectivity(:, :) + + grid_id = make_grid_id(0) + call prepare_unstructured_grid(this, name, topology, size(points, 1), & + size(points, 2), connectivity, record, zero_connectivity, status, & + collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL64 + call write_unstructured_group_r8(this, record, points, & + zero_connectivity, status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_unstructured_grid_r8 + + subroutine prepare_unstructured_grid(this, name, topology, point_dimension, & + point_count, connectivity, record, zero_connectivity, status, & + collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer, intent(in) :: topology, point_dimension, point_count + integer(int64), intent(in) :: connectivity(:, :) + type(grid_record_t), intent(out) :: record + integer(int64), allocatable, intent(out) :: zero_connectivity(:, :) + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + integer :: expected_nodes + + call prepare_grid_record(this, name, record, status, collection_id) + if (status%is_error()) return + if (point_dimension /= 2 .and. point_dimension /= 3) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Unstructured points must have dimension 2 or 3') + return + end if + if (point_count <= 0 .or. size(connectivity, 1) <= 0 .or. & + size(connectivity, 2) <= 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Unstructured points and connectivity must not be empty') + return + end if + if (.not. topology_is_supported(topology) .or. & + topology == XDMF_TOPOLOGY_MIXED .or. & + topology == XDMF_TOPOLOGY_POLYHEDRON .or. & + is_structured_topology(topology)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Unsupported fixed unstructured topology: '//topology_name(topology)) + return + end if + + expected_nodes = topology_nodes_per_element(topology) + if (expected_nodes > 0 .and. size(connectivity, 1) /= expected_nodes) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Connectivity node count does not match the topology') + return + end if + if (topology == XDMF_TOPOLOGY_POLYLINE .and. & + size(connectivity, 1) < 2) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'A polyline requires at least two nodes') + return + end if + if (topology == XDMF_TOPOLOGY_POLYGON .and. & + size(connectivity, 1) < 3) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'A polygon requires at least three nodes') + return + end if + call validate_node_indices(connectivity, int(point_count, int64), status) + if (status%is_error()) return + + zero_connectivity = connectivity - 1_int64 + record%geometry_type = XDMF_GEOMETRY_UNSTRUCTURED + record%topology_type = topology + record%dimension = point_dimension + record%nodes_per_element = size(connectivity, 1) + record%number_of_points = int(point_count, int64) + record%number_of_elements = int(size(connectivity, 2), int64) + record%points_path = record%group_path//'/points' + record%connectivity_path = record%group_path//'/connectivity' + end subroutine prepare_unstructured_grid + + subroutine write_unstructured_group_r4(this, record, points, connectivity, & + status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + real(real32), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:, :) + type(xdmf_status_t), intent(out) :: status + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%points_path, & + reshape(points, [size(points)]), & + [int(size(points, 1), int64), int(size(points, 2), int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%connectivity_path, & + reshape(connectivity, [size(connectivity)]), & + [int(size(connectivity, 1), int64), & + int(size(connectivity, 2), int64)], status) + end if + end subroutine write_unstructured_group_r4 + + subroutine write_unstructured_group_r8(this, record, points, connectivity, & + status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + real(real64), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:, :) + type(xdmf_status_t), intent(out) :: status + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%points_path, & + reshape(points, [size(points)]), & + [int(size(points, 1), int64), int(size(points, 2), int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%connectivity_path, & + reshape(connectivity, [size(connectivity)]), & + [int(size(connectivity, 1), int64), & + int(size(connectivity, 2), int64)], status) + end if + end subroutine write_unstructured_group_r8 + + subroutine writer_define_mixed_grid_r4(this, name, points, connectivity, & + grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + real(real32), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + integer(int64), allocatable :: zero_connectivity(:) + + grid_id = make_grid_id(0) + call prepare_mixed_grid(this, name, size(points, 1), size(points, 2), & + connectivity, record, zero_connectivity, status, collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL32 + call write_mixed_group_r4(this, record, points, zero_connectivity, status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_mixed_grid_r4 + + subroutine writer_define_mixed_grid_r8(this, name, points, connectivity, & + grid_id, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + real(real64), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:) + type(xdmf_grid_id_t), intent(out) :: grid_id + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + type(grid_record_t) :: record + integer(int64), allocatable :: zero_connectivity(:) + + grid_id = make_grid_id(0) + call prepare_mixed_grid(this, name, size(points, 1), size(points, 2), & + connectivity, record, zero_connectivity, status, collection_id) + if (status%is_error()) return + record%geometry_numeric_type = XDMF_NUMERIC_REAL64 + call write_mixed_group_r8(this, record, points, zero_connectivity, status) + call finish_grid_definition(this, record, grid_id, status) + end subroutine writer_define_mixed_grid_r8 + + subroutine prepare_mixed_grid(this, name, point_dimension, point_count, & + connectivity, record, zero_connectivity, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer, intent(in) :: point_dimension, point_count + integer(int64), intent(in) :: connectivity(:) + type(grid_record_t), intent(out) :: record + integer(int64), allocatable, intent(out) :: zero_connectivity(:) + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + integer(int64) :: element_count + + call prepare_grid_record(this, name, record, status, collection_id) + if (status%is_error()) return + if ((point_dimension /= 2 .and. point_dimension /= 3) .or. & + point_count <= 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Mixed-grid points must be a nonempty dimension-by-points array') + return + end if + + call convert_mixed_connectivity(connectivity, int(point_count, int64), & + zero_connectivity, element_count, status) + if (status%is_error()) return + + record%geometry_type = XDMF_GEOMETRY_UNSTRUCTURED + record%topology_type = XDMF_TOPOLOGY_MIXED + record%dimension = point_dimension + record%number_of_points = int(point_count, int64) + record%number_of_elements = element_count + record%mixed_connectivity_size = int(size(connectivity), int64) + record%points_path = record%group_path//'/points' + record%connectivity_path = record%group_path//'/connectivity' + end subroutine prepare_mixed_grid + + subroutine write_mixed_group_r4(this, record, points, connectivity, status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + real(real32), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:) + type(xdmf_status_t), intent(out) :: status + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%points_path, & + reshape(points, [size(points)]), & + [int(size(points, 1), int64), int(size(points, 2), int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%connectivity_path, & + connectivity, [int(size(connectivity), int64)], status) + end if + end subroutine write_mixed_group_r4 + + subroutine write_mixed_group_r8(this, record, points, connectivity, status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + real(real64), intent(in) :: points(:, :) + integer(int64), intent(in) :: connectivity(:) + type(xdmf_status_t), intent(out) :: status + + call hdf_create_group(this%hdf5_file, record%group_path, status) + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%points_path, & + reshape(points, [size(points)]), & + [int(size(points, 1), int64), int(size(points, 2), int64)], status) + end if + if (.not. status%is_error()) then + call hdf_write_dataset(this%hdf5_file, record%connectivity_path, & + connectivity, [int(size(connectivity), int64)], status) + end if + end subroutine write_mixed_group_r8 + + subroutine writer_define_attribute_with_series(this, grid_id, name, & + center, attribute_type, numeric_type, is_series, attribute_id, status, & + entity_count, component_shape) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_grid_id_t), intent(in) :: grid_id + character(len=*), intent(in) :: name + integer, intent(in) :: center, attribute_type, numeric_type + logical, intent(in) :: is_series + type(xdmf_attribute_id_t), intent(out) :: attribute_id + type(xdmf_status_t), intent(out) :: status + integer(int64), intent(in), optional :: entity_count + integer(int64), intent(in), optional :: component_shape(:) + + call define_attribute_impl(this, grid_id, name, center, attribute_type, & + numeric_type, is_series, attribute_id, status, entity_count, & + component_shape) + end subroutine writer_define_attribute_with_series + + subroutine writer_define_static_attribute(this, grid_id, name, center, & + attribute_type, numeric_type, attribute_id, status, entity_count, & + component_shape) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_grid_id_t), intent(in) :: grid_id + character(len=*), intent(in) :: name + integer, intent(in) :: center, attribute_type, numeric_type + type(xdmf_attribute_id_t), intent(out) :: attribute_id + type(xdmf_status_t), intent(out) :: status + integer(int64), intent(in), optional :: entity_count + integer(int64), intent(in), optional :: component_shape(:) + + call define_attribute_impl(this, grid_id, name, center, attribute_type, & + numeric_type, .false., attribute_id, status, entity_count, & + component_shape) + end subroutine writer_define_static_attribute + + subroutine define_attribute_impl(this, grid_id, name, center, & + attribute_type, numeric_type, is_series, attribute_id, status, & + entity_count, component_shape) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_grid_id_t), intent(in) :: grid_id + character(len=*), intent(in) :: name + integer, intent(in) :: center, attribute_type, numeric_type + logical, intent(in) :: is_series + type(xdmf_attribute_id_t), intent(out) :: attribute_id + type(xdmf_status_t), intent(out) :: status + integer(int64), intent(in), optional :: entity_count + integer(int64), intent(in), optional :: component_shape(:) + + type(attribute_record_t) :: record + character(len=:), allocatable :: group_path + integer :: grid_index, index + + attribute_id = make_attribute_id(0) + call check_definition_state(this, name, status) + if (status%is_error()) return + grid_index = find_grid(this, grid_id) + if (grid_index == 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The attribute references an unknown grid') + return + end if + if (len(center_name(center)) == 0 .or. & + len(attribute_type_name(attribute_type)) == 0 .or. & + len(numeric_type_name(numeric_type)) == 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Invalid attribute center, type, or numeric type') + return + end if + if (is_series .and. this%options%series_kind == XDMF_SERIES_NONE) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Series attributes require a series-enabled writer') + return + end if + if (attribute_type == XDMF_ATTRIBUTE_GLOBAL_ID .and. & + numeric_type /= XDMF_NUMERIC_INT32 .and. & + numeric_type /= XDMF_NUMERIC_INT64) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'GlobalID attributes require an integer numeric type') + return + end if + do index = 1, size(this%attributes) + if (this%attributes(index)%grid_id == grid_id_value(grid_id) .and. & + this%attributes(index)%name == trim(name)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Attribute names must be unique within a grid') + return + end if + end do + + record%id = this%next_attribute_id + record%grid_id = grid_id_value(grid_id) + record%name = trim(name) + record%center = center + record%attribute_type = attribute_type + record%numeric_type = numeric_type + record%is_series = is_series + record%last_step = this%committed_steps + call infer_attribute_shape(this%grids(grid_index), center, attribute_type, & + entity_count, component_shape, record, status) + if (status%is_error()) return + + group_path = indexed_path('/attributes/a', record%id) + record%dataset_path = group_path//'/values' + this%next_attribute_id = this%next_attribute_id + 1 + call hdf_create_group(this%hdf5_file, group_path, status) + if (status%is_error()) return + if (is_series) then + call hdf_create_series_dataset(this%hdf5_file, record%dataset_path, & + numeric_type, record%storage_shape, this%options, status) + if (status%is_error()) return + end if + + call append_attribute(this, record, status) + if (.not. status%is_error()) then + attribute_id = make_attribute_id(record%id, this%owner_token) + end if + end subroutine define_attribute_impl + + subroutine writer_write_attribute_r4(this, attribute_id, values, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + real(real32), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + integer :: index + + call prepare_attribute_write(this, attribute_id, XDMF_NUMERIC_REAL32, & + size(values, kind=int64), index, status) + if (status%is_error()) return + call write_attribute_data_r4(this, index, values, status) + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_r4 + + subroutine writer_write_attribute_r8(this, attribute_id, values, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + real(real64), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + integer :: index + + call prepare_attribute_write(this, attribute_id, XDMF_NUMERIC_REAL64, & + size(values, kind=int64), index, status) + if (status%is_error()) return + call write_attribute_data_r8(this, index, values, status) + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_r8 + + subroutine writer_write_attribute_i4(this, attribute_id, values, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + integer(int32), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + integer :: index + + call prepare_attribute_write(this, attribute_id, XDMF_NUMERIC_INT32, & + size(values, kind=int64), index, status) + if (status%is_error()) return + call write_attribute_data_i4(this, index, values, status) + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_i4 + + subroutine writer_write_attribute_i8(this, attribute_id, values, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + integer(int64), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + integer :: index + + call prepare_attribute_write(this, attribute_id, XDMF_NUMERIC_INT64, & + size(values, kind=int64), index, status) + if (status%is_error()) return + call write_attribute_data_i8(this, index, values, status) + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_i8 + + subroutine writer_write_attribute_hyperslab_r4(this, attribute_id, values, & + spatial_offset, spatial_count, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + real(real32), intent(in) :: values(:) + integer(int64), intent(in) :: spatial_offset(:), spatial_count(:) + type(xdmf_status_t), intent(out) :: status + + integer(int64), allocatable :: storage_offset(:), storage_count(:) + integer :: index + + call prepare_attribute_hyperslab_write(this, attribute_id, & + XDMF_NUMERIC_REAL32, size(values, kind=int64), spatial_offset, & + spatial_count, index, storage_offset, storage_count, status) + if (status%is_error()) return + call hdf_append_series_hyperslab(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, storage_offset, storage_count, & + this%committed_steps, status) + call synchronize_collective_status(this, status, & + 'Collective attribute hyperslab write failed') + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_hyperslab_r4 + + subroutine writer_write_attribute_hyperslab_r8(this, attribute_id, values, & + spatial_offset, spatial_count, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + real(real64), intent(in) :: values(:) + integer(int64), intent(in) :: spatial_offset(:), spatial_count(:) + type(xdmf_status_t), intent(out) :: status + + integer(int64), allocatable :: storage_offset(:), storage_count(:) + integer :: index + + call prepare_attribute_hyperslab_write(this, attribute_id, & + XDMF_NUMERIC_REAL64, size(values, kind=int64), spatial_offset, & + spatial_count, index, storage_offset, storage_count, status) + if (status%is_error()) return + call hdf_append_series_hyperslab(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, storage_offset, storage_count, & + this%committed_steps, status) + call synchronize_collective_status(this, status, & + 'Collective attribute hyperslab write failed') + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_hyperslab_r8 + + subroutine writer_write_attribute_hyperslab_i4(this, attribute_id, values, & + spatial_offset, spatial_count, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + integer(int32), intent(in) :: values(:) + integer(int64), intent(in) :: spatial_offset(:), spatial_count(:) + type(xdmf_status_t), intent(out) :: status + + integer(int64), allocatable :: storage_offset(:), storage_count(:) + integer :: index + + call prepare_attribute_hyperslab_write(this, attribute_id, & + XDMF_NUMERIC_INT32, size(values, kind=int64), spatial_offset, & + spatial_count, index, storage_offset, storage_count, status) + if (status%is_error()) return + call hdf_append_series_hyperslab(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, storage_offset, storage_count, & + this%committed_steps, status) + call synchronize_collective_status(this, status, & + 'Collective attribute hyperslab write failed') + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_hyperslab_i4 + + subroutine writer_write_attribute_hyperslab_i8(this, attribute_id, values, & + spatial_offset, spatial_count, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + integer(int64), intent(in) :: values(:) + integer(int64), intent(in) :: spatial_offset(:), spatial_count(:) + type(xdmf_status_t), intent(out) :: status + + integer(int64), allocatable :: storage_offset(:), storage_count(:) + integer :: index + + call prepare_attribute_hyperslab_write(this, attribute_id, & + XDMF_NUMERIC_INT64, size(values, kind=int64), spatial_offset, & + spatial_count, index, storage_offset, storage_count, status) + if (status%is_error()) return + call hdf_append_series_hyperslab(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, storage_offset, storage_count, & + this%committed_steps, status) + call synchronize_collective_status(this, status, & + 'Collective attribute hyperslab write failed') + call finish_attribute_write(this, index, status) + end subroutine writer_write_attribute_hyperslab_i8 + + subroutine write_attribute_data_r4(this, index, values, status) + class(xdmf_writer_t), intent(inout) :: this + integer, intent(in) :: index + real(real32), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + real(real32), allocatable :: packed(:) + + if (size(this%attributes(index)%component_shape) == 2) then + call pack_components_r4(values, this%attributes(index), packed, status) + if (status%is_error()) return + if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, status) + end if + else if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, status) + end if + end subroutine write_attribute_data_r4 + + subroutine write_attribute_data_r8(this, index, values, status) + class(xdmf_writer_t), intent(inout) :: this + integer, intent(in) :: index + real(real64), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + real(real64), allocatable :: packed(:) + + if (size(this%attributes(index)%component_shape) == 2) then + call pack_components_r8(values, this%attributes(index), packed, status) + if (status%is_error()) return + if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, status) + end if + else if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, status) + end if + end subroutine write_attribute_data_r8 + + subroutine write_attribute_data_i4(this, index, values, status) + class(xdmf_writer_t), intent(inout) :: this + integer, intent(in) :: index + integer(int32), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + integer(int32), allocatable :: packed(:) + + if (size(this%attributes(index)%component_shape) == 2) then + call pack_components_i4(values, this%attributes(index), packed, status) + if (status%is_error()) return + if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, status) + end if + else if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, status) + end if + end subroutine write_attribute_data_i4 + + subroutine write_attribute_data_i8(this, index, values, status) + class(xdmf_writer_t), intent(inout) :: this + integer, intent(in) :: index + integer(int64), intent(in) :: values(:) + type(xdmf_status_t), intent(out) :: status + + integer(int64), allocatable :: packed(:) + + if (size(this%attributes(index)%component_shape) == 2) then + call pack_components_i8(values, this%attributes(index), packed, status) + if (status%is_error()) return + if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, packed, & + this%attributes(index)%storage_shape, status) + end if + else if (this%attributes(index)%is_series) then + call hdf_append_series(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, this%committed_steps, status) + else + call hdf_write_dataset(this%hdf5_file, & + this%attributes(index)%dataset_path, values, & + this%attributes(index)%storage_shape, status) + end if + end subroutine write_attribute_data_i8 + + subroutine pack_components_r4(values, attribute, packed, status) + real(real32), intent(in) :: values(:) + type(attribute_record_t), intent(in) :: attribute + real(real32), allocatable, intent(out) :: packed(:) + type(xdmf_status_t), intent(out) :: status + + integer :: allocation_status, column, entity, input_index, output_index + integer :: row, rows, columns, values_per_entity + + allocate(packed(size(values)), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not allocate attribute packing storage') + return + end if + if (size(attribute%component_shape) /= 2) then + packed = values + call set_status_success(status) + return + end if + + rows = int(attribute%component_shape(1)) + columns = int(attribute%component_shape(2)) + values_per_entity = rows * columns + do entity = 0, int(attribute%entity_count) - 1 + do column = 1, columns + do row = 1, rows + input_index = entity * values_per_entity + row + (column - 1) * rows + output_index = entity * values_per_entity + column + (row - 1) * columns + packed(output_index) = values(input_index) + end do + end do + end do + call set_status_success(status) + end subroutine pack_components_r4 + + subroutine pack_components_r8(values, attribute, packed, status) + real(real64), intent(in) :: values(:) + type(attribute_record_t), intent(in) :: attribute + real(real64), allocatable, intent(out) :: packed(:) + type(xdmf_status_t), intent(out) :: status + + integer :: allocation_status, column, entity, input_index, output_index + integer :: row, rows, columns, values_per_entity + + allocate(packed(size(values)), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not allocate attribute packing storage') + return + end if + if (size(attribute%component_shape) /= 2) then + packed = values + call set_status_success(status) + return + end if + + rows = int(attribute%component_shape(1)) + columns = int(attribute%component_shape(2)) + values_per_entity = rows * columns + do entity = 0, int(attribute%entity_count) - 1 + do column = 1, columns + do row = 1, rows + input_index = entity * values_per_entity + row + (column - 1) * rows + output_index = entity * values_per_entity + column + (row - 1) * columns + packed(output_index) = values(input_index) + end do + end do + end do + call set_status_success(status) + end subroutine pack_components_r8 + + subroutine pack_components_i4(values, attribute, packed, status) + integer(int32), intent(in) :: values(:) + type(attribute_record_t), intent(in) :: attribute + integer(int32), allocatable, intent(out) :: packed(:) + type(xdmf_status_t), intent(out) :: status + + integer :: allocation_status, column, entity, input_index, output_index + integer :: row, rows, columns, values_per_entity + + allocate(packed(size(values)), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not allocate attribute packing storage') + return + end if + if (size(attribute%component_shape) /= 2) then + packed = values + call set_status_success(status) + return + end if + + rows = int(attribute%component_shape(1)) + columns = int(attribute%component_shape(2)) + values_per_entity = rows * columns + do entity = 0, int(attribute%entity_count) - 1 + do column = 1, columns + do row = 1, rows + input_index = entity * values_per_entity + row + (column - 1) * rows + output_index = entity * values_per_entity + column + (row - 1) * columns + packed(output_index) = values(input_index) + end do + end do + end do + call set_status_success(status) + end subroutine pack_components_i4 + + subroutine pack_components_i8(values, attribute, packed, status) + integer(int64), intent(in) :: values(:) + type(attribute_record_t), intent(in) :: attribute + integer(int64), allocatable, intent(out) :: packed(:) + type(xdmf_status_t), intent(out) :: status + + integer :: allocation_status, column, entity, input_index, output_index + integer :: row, rows, columns, values_per_entity + + allocate(packed(size(values)), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not allocate attribute packing storage') + return + end if + if (size(attribute%component_shape) /= 2) then + packed = values + call set_status_success(status) + return + end if + + rows = int(attribute%component_shape(1)) + columns = int(attribute%component_shape(2)) + values_per_entity = rows * columns + do entity = 0, int(attribute%entity_count) - 1 + do column = 1, columns + do row = 1, rows + input_index = entity * values_per_entity + row + (column - 1) * rows + output_index = entity * values_per_entity + column + (row - 1) * columns + packed(output_index) = values(input_index) + end do + end do + end do + call set_status_success(status) + end subroutine pack_components_i8 + + subroutine writer_begin_step(this, value, status) + class(xdmf_writer_t), intent(inout) :: this + real(real64), intent(in) :: value + type(xdmf_status_t), intent(out) :: status + + call check_open(this, status) + if (status%is_error()) return + if (this%options%series_kind == XDMF_SERIES_NONE) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'This writer was not created for series output') + return + end if + if (this%step_is_active) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'A series step is already active') + return + end if + + this%definitions_locked = .true. + this%step_is_active = .true. + this%active_step_value = value + call set_status_success(status) + end subroutine writer_begin_step + + subroutine writer_end_step(this, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_status_t), intent(out) :: status + + type(xdmf_status_t) :: original_status, rollback_status + real(real64), allocatable :: new_values(:) + real(real64) :: step_value(1) + integer(int64) :: scalar_shape(0) + integer :: allocation_status, index, next_step + + call check_open(this, status) + if (status%is_error()) return + if (.not. this%step_is_active) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'No series step is active') + return + end if + + next_step = this%committed_steps + 1 + do index = 1, size(this%attributes) + if (this%attributes(index)%is_series .and. & + this%attributes(index)%last_step /= next_step) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Every series attribute must be written exactly once per step') + call rollback_active_step(this, rollback_status) + if (rollback_status%is_error()) status = rollback_status + return + end if + end do + + allocate(new_values(this%committed_steps + 1), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not extend the in-memory series metadata') + call rollback_active_step(this, rollback_status) + if (rollback_status%is_error()) status = rollback_status + return + end if + if (this%committed_steps > 0) then + new_values(:this%committed_steps) = this%series_values + end if + new_values(this%committed_steps + 1) = this%active_step_value + + step_value(1) = this%active_step_value + call hdf_append_series(this%hdf5_file, SERIES_VALUES_PATH, step_value, & + scalar_shape, this%committed_steps, status) + call synchronize_collective_status(this, status, & + 'Collective series-coordinate write failed') + if (status%is_error()) then + original_status = status + if (status%error_code() == XDMF_ERROR_CONSISTENCY) then + this%is_poisoned = .true. + end if + call rollback_active_step(this, rollback_status) + if (rollback_status%is_error()) then + status = rollback_status + else + status = original_status + end if + return + end if + + call move_alloc(new_values, this%series_values) + this%committed_steps = next_step + this%step_is_active = .false. + call set_status_success(status) + end subroutine writer_end_step + + subroutine writer_flush(this, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_status_t), intent(out) :: status + + integer :: index + + call check_open(this, status) + if (status%is_error()) return + if (this%step_is_active) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Cannot flush while a series step is active') + return + end if + do index = 1, size(this%attributes) + if (.not. this%attributes(index)%is_series .and. & + .not. this%attributes(index)%is_written) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Every static attribute must be written before flushing') + return + end if + end do + + call hdf_flush_file(this%hdf5_file, status) + call synchronize_collective_status(this, status, & + 'Collective HDF5 flush failed') + if (status%is_error()) return + if (.not. this%is_collective .or. this%rank == this%root_rank) then + call write_xdmf_document(this%xdmf_path, this%hdf5_name, & + this%collections, this%grids, this%attributes, & + this%options%series_kind, this%series_values, status) + else + call set_status_success(status) + end if + call synchronize_collective_status(this, status, & + 'The collective-output root could not publish XDMF metadata') + end subroutine writer_flush + + subroutine writer_close(this, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_status_t), intent(out) :: status + + type(xdmf_status_t) :: operation_status, close_status + + call set_status_success(status) + if (.not. this%is_open) return + + if (this%is_poisoned) then + call hdf_close_file(this%hdf5_file, close_status) + call synchronize_collective_status(this, close_status, & + 'Collective HDF5 close failed') + if (close_status%is_error()) then + status = close_status + else + this%is_open = .false. + this%step_is_active = .false. + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Writer consistency was lost; HDF5 closed without writing XDMF') + end if + return + end if + + if (this%step_is_active) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Cannot close while a series step is active') + call rollback_active_step(this, operation_status) + if (operation_status%is_error()) status = operation_status + return + end if + + call writer_flush(this, operation_status) + if (operation_status%is_error()) then + status = operation_status + return + end if + + call hdf_close_file(this%hdf5_file, close_status) + call synchronize_collective_status(this, close_status, & + 'Collective HDF5 close failed') + if (close_status%is_error()) then + status = close_status + else + this%is_open = .false. + this%step_is_active = .false. + end if + end subroutine writer_close + + impure elemental subroutine writer_finalize(this) + type(xdmf_writer_t), intent(inout) :: this + + type(xdmf_status_t) :: status + + if (this%is_open) call hdf_close_file(this%hdf5_file, status) + if (.not. status%is_error()) this%is_open = .false. + end subroutine writer_finalize + + subroutine prepare_structured_grid(this, name, dimensions, record, status, & + collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + integer(int64), intent(in) :: dimensions(:) + type(grid_record_t), intent(out) :: record + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + call prepare_grid_record(this, name, record, status, collection_id) + if (status%is_error()) return + if ((size(dimensions) /= 2 .and. size(dimensions) /= 3) .or. & + any(dimensions <= 0_int64)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Structured dimensions must contain positive I/J or I/J/K sizes') + return + end if + + record%dimension = size(dimensions) + record%dimensions = dimensions + record%number_of_points = product_int64(dimensions) + if (record%number_of_points < 0_int64) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Structured grid dimensions overflow int64') + return + end if + if (all(dimensions > 1_int64)) then + record%number_of_elements = product_int64(dimensions - 1_int64) + if (record%number_of_elements < 0_int64) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Structured cell dimensions overflow int64') + return + end if + else + record%number_of_elements = 0_int64 + end if + end subroutine prepare_structured_grid + + subroutine prepare_grid_record(this, name, record, status, collection_id) + class(xdmf_writer_t), intent(inout) :: this + character(len=*), intent(in) :: name + type(grid_record_t), intent(out) :: record + type(xdmf_status_t), intent(out) :: status + type(xdmf_collection_id_t), intent(in), optional :: collection_id + + integer :: collection_value, index + + call check_definition_state(this, name, status) + if (status%is_error()) return + collection_value = 0 + if (present(collection_id)) then + if (collection_id_owner(collection_id) /= this%owner_token) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The collection identifier belongs to another writer') + return + end if + collection_value = collection_id_value(collection_id) + if (collection_value /= 0 .and. & + .not. collection_exists(this, collection_value)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The grid references an unknown collection') + return + end if + end if + do index = 1, size(this%grids) + if (this%grids(index)%name == trim(name)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Grid names must be unique') + return + end if + end do + + record%id = this%next_grid_id + record%collection_id = collection_value + record%name = trim(name) + record%group_path = indexed_path('/grids/g', record%id) + this%next_grid_id = this%next_grid_id + 1 + call set_status_success(status) + end subroutine prepare_grid_record + + subroutine finish_grid_definition(this, record, grid_id, status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + type(xdmf_grid_id_t), intent(inout) :: grid_id + type(xdmf_status_t), intent(inout) :: status + + if (status%is_error()) return + call append_grid(this, record, status) + if (.not. status%is_error()) then + grid_id = make_grid_id(record%id, this%owner_token) + end if + end subroutine finish_grid_definition + + subroutine infer_attribute_shape(grid, center, attribute_type, entity_count, & + requested_components, attribute, status) + type(grid_record_t), intent(in) :: grid + integer, intent(in) :: center, attribute_type + integer(int64), intent(in), optional :: entity_count + integer(int64), intent(in), optional :: requested_components(:) + type(attribute_record_t), intent(inout) :: attribute + type(xdmf_status_t), intent(out) :: status + + integer(int64), allocatable :: spatial_shape(:), components(:) + integer :: component_rank + + call set_status_success(status) + select case (center) + case (XDMF_CENTER_NODE) + if (allocated(grid%dimensions)) then + spatial_shape = grid%dimensions + else + spatial_shape = [grid%number_of_points] + end if + case (XDMF_CENTER_CELL) + if (allocated(grid%dimensions)) then + if (any(grid%dimensions <= 1_int64)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'A cell-centred attribute requires at least one structured cell') + return + end if + spatial_shape = grid%dimensions - 1_int64 + else + spatial_shape = [grid%number_of_elements] + end if + case (XDMF_CENTER_GRID) + spatial_shape = [1_int64] + case (XDMF_CENTER_EDGE, XDMF_CENTER_FACE) + if (.not. present(entity_count)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Edge- and face-centred attributes require entity_count') + return + end if + if (entity_count <= 0_int64) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Edge- and face-centred attributes require positive entity_count') + return + end if + spatial_shape = [entity_count] + end select + if (any(spatial_shape <= 0_int64)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The attribute center has no entities on this grid') + return + end if + if (present(entity_count)) then + if (center /= XDMF_CENTER_EDGE .and. center /= XDMF_CENTER_FACE) then + if (entity_count /= product_int64(spatial_shape)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'entity_count conflicts with the inferred attribute shape') + return + end if + end if + end if + + if (present(requested_components)) then + if (any(requested_components <= 0_int64)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Attribute component dimensions must be positive') + return + end if + select case (attribute_type) + case (XDMF_ATTRIBUTE_SCALAR, XDMF_ATTRIBUTE_GLOBAL_ID) + if (size(requested_components) /= 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Scalar and GlobalID attributes cannot have component dimensions') + return + end if + case (XDMF_ATTRIBUTE_VECTOR) + if (size(requested_components) /= 1) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Vector attributes require one component dimension') + return + end if + case (XDMF_ATTRIBUTE_TENSOR) + if (size(requested_components) /= 2) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Tensor attributes require component shape [3, 3]') + return + end if + if (any(requested_components /= [3_int64, 3_int64])) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Tensor attributes require component shape [3, 3]') + return + end if + case (XDMF_ATTRIBUTE_TENSOR6) + if (size(requested_components) /= 1) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Tensor6 attributes require component shape [6]') + return + end if + if (requested_components(1) /= 6_int64) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Tensor6 attributes require component shape [6]') + return + end if + case (XDMF_ATTRIBUTE_MATRIX) + if (size(requested_components) /= 2) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Matrix attributes require two component dimensions') + return + end if + end select + components = requested_components + else + select case (attribute_type) + case (XDMF_ATTRIBUTE_SCALAR, XDMF_ATTRIBUTE_GLOBAL_ID) + allocate(components(0)) + case (XDMF_ATTRIBUTE_VECTOR) + allocate(components(1)) + components(1) = int(grid%dimension, int64) + case (XDMF_ATTRIBUTE_TENSOR) + allocate(components(2)) + components = 3_int64 + case (XDMF_ATTRIBUTE_TENSOR6) + allocate(components(1)) + components(1) = 6_int64 + case (XDMF_ATTRIBUTE_MATRIX) + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Matrix attributes require component_shape') + return + end select + end if + + component_rank = size(components) + allocate(attribute%component_shape(component_rank)) + if (component_rank > 0) attribute%component_shape = components + allocate(attribute%storage_shape(component_rank + size(spatial_shape))) + if (component_rank > 0) then + attribute%storage_shape(:component_rank) = & + components(component_rank:1:-1) + end if + attribute%storage_shape(component_rank + 1:) = spatial_shape + attribute%entity_count = product_int64(spatial_shape) + if (attribute%entity_count < 0_int64 .or. & + product_int64(attribute%storage_shape) < 0_int64) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Attribute dimensions overflow int64') + return + end if + end subroutine infer_attribute_shape + + subroutine prepare_attribute_write(this, attribute_id, numeric_type, & + value_count, index, status) + class(xdmf_writer_t), intent(in) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + integer, intent(in) :: numeric_type + integer(int64), intent(in) :: value_count + integer, intent(out) :: index + type(xdmf_status_t), intent(out) :: status + + call check_open(this, status) + if (status%is_error()) return + index = find_attribute(this, attribute_id) + if (index == 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Unknown attribute identifier') + return + end if + if (this%attributes(index)%numeric_type /= numeric_type) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Attribute values have the wrong numeric type') + return + end if + if (value_count /= product_int64(this%attributes(index)%storage_shape)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Attribute value count does not match its defined shape') + return + end if + + if (this%attributes(index)%is_series) then + if (.not. this%step_is_active) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'A series attribute can only be written inside an active step') + return + end if + if (this%attributes(index)%last_step == this%committed_steps + 1) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'A series attribute can only be written once per step') + return + end if + else if (this%attributes(index)%is_written) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'A static attribute can only be written once') + return + end if + end subroutine prepare_attribute_write + + subroutine prepare_attribute_hyperslab_write(this, attribute_id, & + numeric_type, value_count, spatial_offset, spatial_count, index, & + storage_offset, storage_count, status) + class(xdmf_writer_t), intent(in) :: this + type(xdmf_attribute_id_t), intent(in) :: attribute_id + integer, intent(in) :: numeric_type + integer(int64), intent(in) :: value_count + integer(int64), intent(in) :: spatial_offset(:), spatial_count(:) + integer, intent(out) :: index + integer(int64), allocatable, intent(out) :: storage_offset(:) + integer(int64), allocatable, intent(out) :: storage_count(:) + type(xdmf_status_t), intent(out) :: status + + integer(int64) :: expected_count + logical :: empty_selection + + index = 0 + call check_open(this, status) + if (.not. status%is_error() .and. .not. this%is_collective) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Attribute hyperslabs require collective HDF5 output') + end if + if (.not. status%is_error()) then + index = find_attribute(this, attribute_id) + if (index == 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Unknown attribute identifier') + end if + end if + if (.not. status%is_error()) then + if (this%attributes(index)%numeric_type /= numeric_type) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Attribute values have the wrong numeric type') + else if (.not. this%attributes(index)%is_series) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Collective hyperslabs currently support series attributes only') + else if (size(this%attributes(index)%component_shape) /= 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Collective hyperslabs currently support scalar attributes only') + end if + end if + if (.not. status%is_error()) then + if (size(spatial_offset) /= size(this%attributes(index)%storage_shape) .or. & + size(spatial_count) /= size(this%attributes(index)%storage_shape)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Hyperslab offset and count must match the spatial rank') + else if (any(spatial_offset < 0_int64) .or. & + any(spatial_count < 0_int64)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Hyperslab offsets and counts must not be negative') + end if + end if + if (.not. status%is_error()) then + empty_selection = all(spatial_count == 0_int64) + if (.not. empty_selection .and. any(spatial_count == 0_int64)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'A hyperslab must be entirely empty or positive in every dimension') + else if (.not. empty_selection) then + if (any(spatial_count > this%attributes(index)%storage_shape) .or. & + any(spatial_offset > & + this%attributes(index)%storage_shape - spatial_count)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Attribute hyperslab lies outside the defined shape') + end if + end if + end if + if (.not. status%is_error()) then + if (all(spatial_count == 0_int64)) then + expected_count = 0_int64 + else + expected_count = product_int64(spatial_count) + end if + if (expected_count < 0_int64 .or. value_count /= expected_count) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Hyperslab value count does not match its local shape') + else if (.not. this%step_is_active) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'A series attribute can only be written inside an active step') + else if (this%attributes(index)%last_step == & + this%committed_steps + 1) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'A series attribute can only be written once per step') + end if + end if + + call synchronize_collective_status(this, status, & + 'Collective attribute hyperslab validation failed') + if (status%is_error()) return + storage_offset = spatial_offset + storage_count = spatial_count + end subroutine prepare_attribute_hyperslab_write + + subroutine finish_attribute_write(this, index, status) + class(xdmf_writer_t), intent(inout) :: this + integer, intent(in) :: index + type(xdmf_status_t), intent(inout) :: status + + type(xdmf_status_t) :: original_status, rollback_status + + if (status%is_error()) then + if (this%attributes(index)%is_series) then + original_status = status + call rollback_active_step(this, rollback_status) + if (rollback_status%is_error()) then + this%is_poisoned = .true. + status = rollback_status + else + status = original_status + if (status%error_code() == XDMF_ERROR_CONSISTENCY) then + this%is_poisoned = .true. + end if + end if + else if (status%error_code() == XDMF_ERROR_CONSISTENCY) then + this%is_poisoned = .true. + end if + return + end if + if (this%attributes(index)%is_series) then + this%attributes(index)%last_step = this%committed_steps + 1 + else + this%attributes(index)%is_written = .true. + end if + end subroutine finish_attribute_write + + subroutine rollback_active_step(this, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_status_t), intent(out) :: status + + type(xdmf_status_t) :: truncate_status + integer :: index + + call set_status_success(status) + do index = 1, size(this%attributes) + if (this%attributes(index)%is_series .and. & + this%attributes(index)%last_step > this%committed_steps) then + call hdf_truncate_series(this%hdf5_file, & + this%attributes(index)%dataset_path, & + this%attributes(index)%storage_shape, this%committed_steps, & + truncate_status) + if (truncate_status%is_error() .and. .not. status%is_error()) then + status = truncate_status + end if + if (truncate_status%is_error()) then + this%is_poisoned = .true. + else + this%attributes(index)%last_step = this%committed_steps + end if + end if + end do + this%step_is_active = .false. + end subroutine rollback_active_step + + subroutine convert_mixed_connectivity(input, number_of_points, output, & + number_of_elements, status) + integer(int64), intent(in) :: input(:) + integer(int64), intent(in) :: number_of_points + integer(int64), allocatable, intent(out) :: output(:) + integer(int64), intent(out) :: number_of_elements + type(xdmf_status_t), intent(out) :: status + + integer(int64) :: token, count_value + integer :: position, topology, node_count, face, face_count + + call set_status_success(status) + number_of_elements = 0_int64 + if (size(input) == 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Mixed connectivity must not be empty') + return + end if + output = input + position = 1 + do while (position <= size(input)) + token = input(position) + if (token < int(-huge(topology), int64) .or. & + token > int(huge(topology), int64)) then + call mixed_encoding_error(status) + return + end if + topology = int(token) + position = position + 1 + + select case (topology) + case (XDMF_TOPOLOGY_POLYVERTEX, XDMF_TOPOLOGY_POLYLINE, & + XDMF_TOPOLOGY_POLYGON) + if (position > size(input)) then + call mixed_encoding_error(status) + return + end if + count_value = input(position) + if (count_value > int(huge(node_count), int64) .or. & + count_value < 1_int64) then + call mixed_encoding_error(status) + return + end if + node_count = int(count_value) + if ((topology == XDMF_TOPOLOGY_POLYLINE .and. node_count < 2) .or. & + (topology == XDMF_TOPOLOGY_POLYGON .and. node_count < 3)) then + call mixed_encoding_error(status) + return + end if + position = position + 1 + call convert_mixed_nodes(input, output, position, node_count, & + number_of_points, status) + if (status%is_error()) return + + case (XDMF_TOPOLOGY_POLYHEDRON) + if (position > size(input)) then + call mixed_encoding_error(status) + return + end if + if (input(position) < 1_int64 .or. & + input(position) > int(huge(face_count), int64)) then + call mixed_encoding_error(status) + return + end if + face_count = int(input(position)) + position = position + 1 + do face = 1, face_count + if (position > size(input)) then + call mixed_encoding_error(status) + return + end if + if (input(position) < 3_int64 .or. & + input(position) > int(huge(node_count), int64)) then + call mixed_encoding_error(status) + return + end if + node_count = int(input(position)) + position = position + 1 + call convert_mixed_nodes(input, output, position, node_count, & + number_of_points, status) + if (status%is_error()) return + end do + + case default + if (.not. topology_is_supported(topology) .or. & + is_structured_topology(topology) .or. & + topology == XDMF_TOPOLOGY_MIXED) then + call mixed_encoding_error(status) + return + end if + node_count = topology_nodes_per_element(topology) + if (node_count <= 0) then + call mixed_encoding_error(status) + return + end if + call convert_mixed_nodes(input, output, position, node_count, & + number_of_points, status) + if (status%is_error()) return + end select + number_of_elements = number_of_elements + 1_int64 + end do + end subroutine convert_mixed_connectivity + + subroutine convert_mixed_nodes(input, output, position, node_count, & + number_of_points, status) + integer(int64), intent(in) :: input(:) + integer(int64), intent(inout) :: output(:) + integer, intent(inout) :: position + integer, intent(in) :: node_count + integer(int64), intent(in) :: number_of_points + type(xdmf_status_t), intent(out) :: status + + integer :: last + + call set_status_success(status) + if (node_count > size(input) - position + 1) then + call mixed_encoding_error(status) + return + end if + last = position + node_count - 1 + if (any(input(position:last) < 1_int64) .or. & + any(input(position:last) > number_of_points)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Mixed connectivity contains a node index outside the point range') + return + end if + output(position:last) = input(position:last) - 1_int64 + position = last + 1 + end subroutine convert_mixed_nodes + + subroutine mixed_encoding_error(status) + type(xdmf_status_t), intent(out) :: status + + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Invalid or truncated standard XDMF mixed connectivity encoding') + end subroutine mixed_encoding_error + + subroutine validate_node_indices(connectivity, number_of_points, status) + integer(int64), intent(in) :: connectivity(:, :) + integer(int64), intent(in) :: number_of_points + type(xdmf_status_t), intent(out) :: status + + if (any(connectivity < 1_int64) .or. & + any(connectivity > number_of_points)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Connectivity contains a node index outside the point range') + else + call set_status_success(status) + end if + end subroutine validate_node_indices + + subroutine validate_options(options, status) + type(xdmf_options_t), intent(in) :: options + type(xdmf_status_t), intent(out) :: status + + integer :: mpi_error, rank_count + logical :: mpi_is_initialized + + select case (options%series_kind) + case (XDMF_SERIES_NONE, XDMF_SERIES_TIME, XDMF_SERIES_FREQUENCY, & + XDMF_SERIES_PARAMETER) + case default + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Invalid series kind') + return + end select + if (options%compression_level < 0 .or. options%compression_level > 9) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The HDF5 compression level must be between 0 and 9') + return + end if + if (options%chunk_target_bytes <= 0_int64) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The HDF5 chunk target must be positive') + return + end if + if (options%collective_io .and. options%compression_level /= 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Collective HDF5 output does not currently support compression') + return + end if + if (options%collective_io) then +#ifdef XDMF_HDF5_WITH_MPI + call MPI_Initialized(mpi_is_initialized, mpi_error) + if (mpi_error /= MPI_SUCCESS .or. .not. mpi_is_initialized .or. & + options%communicator == MPI_COMM_NULL) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Collective HDF5 output requires an initialized MPI communicator') + return + end if + call MPI_Comm_size(options%communicator, rank_count, mpi_error) + if (mpi_error /= MPI_SUCCESS .or. options%root_rank < 0 .or. & + options%root_rank >= rank_count) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'The collective-output root rank is outside the communicator') + return + end if +#ifdef XDMF_HDF5_WITH_PARALLEL_HDF5 +#else + call set_status_error(status, XDMF_ERROR_STATE, & + 'This library was built with MPI but the selected HDF5 is serial') + return +#endif +#else + call set_status_error(status, XDMF_ERROR_STATE, & + 'This library was built without MPI support') + return +#endif + end if + call set_status_success(status) + end subroutine validate_options + + subroutine check_definition_state(this, name, status) + class(xdmf_writer_t), intent(in) :: this + character(len=*), intent(in) :: name + type(xdmf_status_t), intent(out) :: status + + call check_open(this, status) + if (status%is_error()) return + if (this%definitions_locked) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Definitions are locked after the first series step begins') + return + end if + if (len_trim(name) == 0) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Definition names must not be empty') + end if + end subroutine check_definition_state + + subroutine check_open(this, status) + class(xdmf_writer_t), intent(in) :: this + type(xdmf_status_t), intent(out) :: status + + if (this%is_open .and. .not. this%is_poisoned) then + call set_status_success(status) + else if (this%is_poisoned) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'The XDMF writer is poisoned and must be closed') + else + call set_status_error(status, XDMF_ERROR_STATE, & + 'The XDMF writer is not open') + end if + end subroutine check_open + + subroutine synchronize_collective_status(this, status, context) + class(xdmf_writer_t), intent(in) :: this + type(xdmf_status_t), intent(inout) :: status + character(len=*), intent(in) :: context + +#ifdef XDMF_HDF5_WITH_MPI + integer :: local_code, global_code, mpi_error +#endif + + if (.not. this%is_collective) return +#ifdef XDMF_HDF5_WITH_MPI + local_code = status%error_code() + call MPI_Allreduce(local_code, global_code, 1, MPI_INTEGER, MPI_MAX, & + this%communicator, mpi_error) + if (mpi_error /= MPI_SUCCESS) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not synchronize collective writer status') + else if (global_code /= XDMF_SUCCESS .and. local_code == XDMF_SUCCESS) then + call set_status_error(status, global_code, context) + end if +#else + call set_status_error(status, XDMF_ERROR_STATE, & + 'This library was built without parallel HDF5 support') +#endif + end subroutine synchronize_collective_status + + logical function collection_exists(this, id) + class(xdmf_writer_t), intent(in) :: this + integer, intent(in) :: id + + integer :: index + + collection_exists = .false. + do index = 1, size(this%collections) + if (this%collections(index)%id == id) then + collection_exists = .true. + return + end if + end do + end function collection_exists + + integer function find_grid(this, id) + class(xdmf_writer_t), intent(in) :: this + type(xdmf_grid_id_t), intent(in) :: id + + integer :: index, value + + find_grid = 0 + if (grid_id_owner(id) /= this%owner_token) return + value = grid_id_value(id) + do index = 1, size(this%grids) + if (this%grids(index)%id == value) then + find_grid = index + return + end if + end do + end function find_grid + + integer function find_attribute(this, id) + class(xdmf_writer_t), intent(in) :: this + type(xdmf_attribute_id_t), intent(in) :: id + + integer :: index, value + + find_attribute = 0 + if (attribute_id_owner(id) /= this%owner_token) return + value = attribute_id_value(id) + do index = 1, size(this%attributes) + if (this%attributes(index)%id == value) then + find_attribute = index + return + end if + end do + end function find_attribute + + logical function is_structured_topology(topology) + integer, intent(in) :: topology + + select case (topology) + case (XDMF_TOPOLOGY_2D_SMESH, XDMF_TOPOLOGY_2D_RECTMESH, & + XDMF_TOPOLOGY_2D_CORECTMESH, XDMF_TOPOLOGY_3D_SMESH, & + XDMF_TOPOLOGY_3D_RECTMESH, XDMF_TOPOLOGY_3D_CORECTMESH) + is_structured_topology = .true. + case default + is_structured_topology = .false. + end select + end function is_structured_topology + + subroutine append_collection(this, record, status) + class(xdmf_writer_t), intent(inout) :: this + type(collection_record_t), intent(in) :: record + type(xdmf_status_t), intent(out) :: status + + type(collection_record_t), allocatable :: records(:) + integer :: allocation_status, count + + count = size(this%collections) + allocate(records(count + 1), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not store collection metadata') + return + end if + if (count > 0) records(:count) = this%collections + records(count + 1) = record + call move_alloc(records, this%collections) + call set_status_success(status) + end subroutine append_collection + + subroutine append_grid(this, record, status) + class(xdmf_writer_t), intent(inout) :: this + type(grid_record_t), intent(in) :: record + type(xdmf_status_t), intent(out) :: status + + type(grid_record_t), allocatable :: records(:) + integer :: allocation_status, count + + count = size(this%grids) + allocate(records(count + 1), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not store grid metadata') + return + end if + if (count > 0) records(:count) = this%grids + records(count + 1) = record + call move_alloc(records, this%grids) + call set_status_success(status) + end subroutine append_grid + + subroutine append_attribute(this, record, status) + class(xdmf_writer_t), intent(inout) :: this + type(attribute_record_t), intent(in) :: record + type(xdmf_status_t), intent(out) :: status + + type(attribute_record_t), allocatable :: records(:) + integer :: allocation_status, count + + count = size(this%attributes) + allocate(records(count + 1), stat=allocation_status) + if (allocation_status /= 0) then + call set_status_error(status, XDMF_ERROR_STATE, & + 'Could not store attribute metadata') + return + end if + if (count > 0) records(:count) = this%attributes + records(count + 1) = record + call move_alloc(records, this%attributes) + call set_status_success(status) + end subroutine append_attribute + + subroutine reset_writer_metadata(this) + class(xdmf_writer_t), intent(inout) :: this + + if (allocated(this%collections)) deallocate(this%collections) + if (allocated(this%grids)) deallocate(this%grids) + if (allocated(this%attributes)) deallocate(this%attributes) + if (allocated(this%series_values)) deallocate(this%series_values) + allocate(this%collections(0), this%grids(0), this%attributes(0)) + allocate(this%series_values(0)) + this%next_collection_id = 1 + this%next_grid_id = 1 + this%next_attribute_id = 1 + this%committed_steps = 0 + this%owner_token = next_writer_token + if (next_writer_token == huge(next_writer_token)) then + next_writer_token = 1_int64 + else + next_writer_token = next_writer_token + 1_int64 + end if + this%active_step_value = 0.0_real64 + this%communicator = 0 + this%rank = 0 + this%root_rank = 0 + this%definitions_locked = .false. + this%step_is_active = .false. + this%is_poisoned = .false. + this%is_collective = .false. + end subroutine reset_writer_metadata + + subroutine close_after_create_failure(this, status) + class(xdmf_writer_t), intent(inout) :: this + type(xdmf_status_t), intent(inout) :: status + + type(xdmf_status_t) :: original_status, close_status + + original_status = status + call hdf_close_file(this%hdf5_file, close_status) + if (close_status%is_error()) then + this%is_open = .true. + this%is_poisoned = .true. + status = close_status + else + this%is_open = .false. + status = original_status + end if + end subroutine close_after_create_failure + + subroutine derive_output_paths(path, xdmf_path, hdf5_path, hdf5_name) + character(len=*), intent(in) :: path + character(len=:), allocatable, intent(out) :: xdmf_path + character(len=:), allocatable, intent(out) :: hdf5_path + character(len=:), allocatable, intent(out) :: hdf5_name + + character(len=:), allocatable :: trimmed, stem + integer :: separator + + trimmed = trim(path) + if (ends_with(trimmed, '.xdmf')) then + xdmf_path = trimmed + stem = trimmed(:len(trimmed) - len('.xdmf')) + hdf5_path = stem//'.h5' + else if (ends_with(trimmed, '.xmf')) then + xdmf_path = trimmed + stem = trimmed(:len(trimmed) - len('.xmf')) + hdf5_path = stem//'.h5' + else if (ends_with(trimmed, '.hdf5')) then + hdf5_path = trimmed + stem = trimmed(:len(trimmed) - len('.hdf5')) + xdmf_path = stem//'.xdmf' + else if (ends_with(trimmed, '.h5')) then + hdf5_path = trimmed + stem = trimmed(:len(trimmed) - len('.h5')) + xdmf_path = stem//'.xdmf' + else + xdmf_path = trimmed//'.xdmf' + hdf5_path = trimmed//'.h5' + end if + + separator = max(index(hdf5_path, '/', back=.true.), & + index(hdf5_path, achar(92), back=.true.)) + hdf5_name = hdf5_path(separator + 1:) + end subroutine derive_output_paths + + logical function ends_with(value, suffix) + character(len=*), intent(in) :: value, suffix + + if (len(value) < len(suffix)) then + ends_with = .false. + else + ends_with = value(len(value) - len(suffix) + 1:) == suffix + end if + end function ends_with + + function indexed_path(prefix, id) result(path) + character(len=*), intent(in) :: prefix + integer, intent(in) :: id + character(len=:), allocatable :: path + + character(len=32) :: number + + if (id < 10000) then + write(number, '(I4.4)') id + else + write(number, '(I0)') id + end if + path = prefix//trim(number) + end function indexed_path + +end module xdmf_hdf5_m diff --git a/external/xdmf-hdf5/src/xdmf_hdf5_backend.F90 b/external/xdmf-hdf5/src/xdmf_hdf5_backend.F90 new file mode 100644 index 00000000..0620895e --- /dev/null +++ b/external/xdmf-hdf5/src/xdmf_hdf5_backend.F90 @@ -0,0 +1,1135 @@ +module xdmf_hdf5_backend_m + use, intrinsic :: iso_fortran_env, only: int32, int64, real32, real64 + use hdf5 +#ifdef XDMF_HDF5_WITH_PARALLEL_HDF5 + use mpi +#endif + use xdmf_model_m, only: xdmf_status_t, xdmf_options_t, & + XDMF_ERROR_ARGUMENT, XDMF_ERROR_HDF5, XDMF_ERROR_CONSISTENCY, & + XDMF_NUMERIC_REAL32, XDMF_NUMERIC_REAL64, & + XDMF_NUMERIC_INT32, XDMF_NUMERIC_INT64, & + numeric_type_size, product_int64, set_status_success, set_status_error + + implicit none + + private + + type, public :: hdf5_file_t + private + integer(HID_T) :: id = -1_HID_T + integer(HID_T) :: transfer_property = -1_HID_T + integer :: communicator = 0 + integer :: rank = 0 + integer :: root_rank = 0 + logical :: collective = .false. + end type hdf5_file_t + + public :: hdf_create_file + public :: hdf_file_is_open + public :: hdf_close_file + public :: hdf_flush_file + public :: hdf_create_group + public :: hdf_write_dataset + public :: hdf_create_series_dataset + public :: hdf_append_series + public :: hdf_append_series_hyperslab + public :: hdf_truncate_series + + interface hdf_write_dataset + module procedure hdf_write_dataset_r4 + module procedure hdf_write_dataset_r8 + module procedure hdf_write_dataset_i4 + module procedure hdf_write_dataset_i8 + end interface hdf_write_dataset + + interface hdf_append_series + module procedure hdf_append_series_r4 + module procedure hdf_append_series_r8 + module procedure hdf_append_series_i4 + module procedure hdf_append_series_i8 + end interface hdf_append_series + + interface hdf_append_series_hyperslab + module procedure hdf_append_series_hyperslab_r4 + module procedure hdf_append_series_hyperslab_r8 + module procedure hdf_append_series_hyperslab_i4 + module procedure hdf_append_series_hyperslab_i8 + end interface hdf_append_series_hyperslab + +contains + + subroutine hdf_create_file(file, path, options, status) + type(hdf5_file_t), intent(out) :: file + character(len=*), intent(in) :: path + type(xdmf_options_t), intent(in) :: options + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: access_property + integer :: access_flag, close_error, error +#ifdef XDMF_HDF5_WITH_PARALLEL_HDF5 + integer :: mpi_error, rank_count +#endif + + call set_status_success(status) + file%transfer_property = H5P_DEFAULT_F +#ifdef XDMF_HDF5_WITH_PARALLEL_HDF5 + rank_count = 0 +#endif + call h5open_f(error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not initialize the HDF5 Fortran interface') + return + end if + access_property = -1_HID_T + call h5pcreate_f(H5P_FILE_ACCESS_F, access_property, error) + if (error == 0) then + call h5pset_fclose_degree_f(access_property, H5F_CLOSE_STRONG_F, error) + end if + if (error == 0 .and. options%collective_io) then +#ifdef XDMF_HDF5_WITH_PARALLEL_HDF5 + file%collective = .true. + file%communicator = options%communicator + file%root_rank = options%root_rank + call MPI_Comm_rank(file%communicator, file%rank, mpi_error) + if (mpi_error == MPI_SUCCESS) then + call MPI_Comm_size(file%communicator, rank_count, mpi_error) + end if + if (mpi_error /= MPI_SUCCESS .or. file%root_rank < 0 .or. & + file%root_rank >= rank_count) then + error = -1 + else + call h5pset_fapl_mpio_f(access_property, file%communicator, & + MPI_INFO_NULL, error) + end if + if (error == 0) then + call h5pcreate_f(H5P_DATASET_XFER_F, file%transfer_property, error) + end if + if (error == 0) then + call h5pset_dxpl_mpio_f(file%transfer_property, & + H5FD_MPIO_COLLECTIVE_F, error) + end if +#else + error = -1 +#endif + end if + if (error /= 0) then + if (access_property >= 0_HID_T) then + call h5pclose_f(access_property, close_error) + end if + if (file%transfer_property /= H5P_DEFAULT_F) then + call h5pclose_f(file%transfer_property, close_error) + file%transfer_property = H5P_DEFAULT_F + end if + if (options%collective_io) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'Collective HDF5 output is unavailable or has invalid MPI options') + else + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not configure HDF5 file ownership') + end if + return + end if + if (options%overwrite) then + access_flag = H5F_ACC_TRUNC_F + else + access_flag = H5F_ACC_EXCL_F + end if + call h5fcreate_f(trim(path), access_flag, file%id, error, & + H5P_DEFAULT_F, access_property) + call h5pclose_f(access_property, close_error) + if (error /= 0 .or. file%id < 0_HID_T) then + if (file%transfer_property /= H5P_DEFAULT_F) then + call h5pclose_f(file%transfer_property, close_error) + file%transfer_property = H5P_DEFAULT_F + end if + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not create HDF5 file: '//trim(path)) + return + end if + if (close_error /= 0) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not close the HDF5 file access property list') + call close_after_create_error(file, status) + return + end if + + call write_string_attribute(file%id, 'schema_name', & + 'XDMF-HDF5', status) + if (status%is_error()) then + call close_after_create_error(file, status) + return + end if + call write_string_attribute(file%id, 'schema_version', '1.0', status) + if (status%is_error()) then + call close_after_create_error(file, status) + return + end if + end subroutine hdf_create_file + + logical function hdf_file_is_open(file) + type(hdf5_file_t), intent(in) :: file + + hdf_file_is_open = file%id >= 0_HID_T + end function hdf_file_is_open + + subroutine hdf_close_file(file, status) + type(hdf5_file_t), intent(inout) :: file + type(xdmf_status_t), intent(out) :: status + + integer :: error, property_error + + call set_status_success(status) + property_error = 0 + if (file%id >= 0_HID_T) then + call h5fclose_f(file%id, error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not close the HDF5 file') + else + file%id = -1_HID_T + end if + end if + if (file%transfer_property /= H5P_DEFAULT_F) then + call h5pclose_f(file%transfer_property, property_error) + if (property_error == 0) file%transfer_property = H5P_DEFAULT_F + end if + if (property_error /= 0 .and. .not. status%is_error()) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not close the collective HDF5 transfer property list') + end if + end subroutine hdf_close_file + + subroutine hdf_flush_file(file, status) + type(hdf5_file_t), intent(in) :: file + type(xdmf_status_t), intent(out) :: status + + integer :: error + + call set_status_success(status) + if (file%id < 0_HID_T) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Cannot flush a closed HDF5 file') + return + end if + + call h5fflush_f(file%id, H5F_SCOPE_GLOBAL_F, error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not flush the HDF5 file') + end if + end subroutine hdf_flush_file + + subroutine hdf_create_group(file, path, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: group_id + integer :: error + + call set_status_success(status) + call h5gcreate_f(file%id, trim(path), group_id, error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not create HDF5 group: '//trim(path)) + return + end if + + call h5gclose_f(group_id, error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not close HDF5 group: '//trim(path)) + end if + end subroutine hdf_create_group + + subroutine hdf_write_dataset_r4(file, path, data, shape, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T) :: buffer_dims(1) + integer :: error + + call create_fixed_dataset(file, path, shape, & + hdf_datatype(XDMF_NUMERIC_REAL32), & + dataset_id, status) + if (status%is_error()) return + + buffer_dims(1) = int(size(data), HSIZE_T) + call prepare_full_transfer(file, dataset_id, buffer_dims, filespace, & + memspace, status) + if (status%is_error()) then + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + -1, status) + return + end if + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_REAL32), & + data, buffer_dims, error, memspace, filespace, file%transfer_property) + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + error, status) + end subroutine hdf_write_dataset_r4 + + subroutine hdf_write_dataset_r8(file, path, data, shape, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T) :: buffer_dims(1) + integer :: error + + call create_fixed_dataset(file, path, shape, & + hdf_datatype(XDMF_NUMERIC_REAL64), & + dataset_id, status) + if (status%is_error()) return + + buffer_dims(1) = int(size(data), HSIZE_T) + call prepare_full_transfer(file, dataset_id, buffer_dims, filespace, & + memspace, status) + if (status%is_error()) then + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + -1, status) + return + end if + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_REAL64), & + data, buffer_dims, error, memspace, filespace, file%transfer_property) + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + error, status) + end subroutine hdf_write_dataset_r8 + + subroutine hdf_write_dataset_i4(file, path, data, shape, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T) :: buffer_dims(1) + integer :: error + + call create_fixed_dataset(file, path, shape, & + hdf_datatype(XDMF_NUMERIC_INT32), & + dataset_id, status) + if (status%is_error()) return + + buffer_dims(1) = int(size(data), HSIZE_T) + call prepare_full_transfer(file, dataset_id, buffer_dims, filespace, & + memspace, status) + if (status%is_error()) then + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + -1, status) + return + end if + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_INT32), & + data, buffer_dims, error, memspace, filespace, file%transfer_property) + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + error, status) + end subroutine hdf_write_dataset_i4 + + subroutine hdf_write_dataset_i8(file, path, data, shape, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T) :: buffer_dims(1) + integer :: error + + call create_fixed_dataset(file, path, shape, & + hdf_datatype(XDMF_NUMERIC_INT64), & + dataset_id, status) + if (status%is_error()) return + + buffer_dims(1) = int(size(data), HSIZE_T) + call prepare_full_transfer(file, dataset_id, buffer_dims, filespace, & + memspace, status) + if (status%is_error()) then + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + -1, status) + return + end if + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_INT64), & + data, buffer_dims, error, memspace, filespace, file%transfer_property) + call finish_fixed_write(file, dataset_id, filespace, memspace, path, & + error, status) + end subroutine hdf_write_dataset_i8 + + subroutine hdf_create_series_dataset(file, path, numeric_type, shape, & + options, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer, intent(in) :: numeric_type + integer(int64), intent(in) :: shape(:) + type(xdmf_options_t), intent(in) :: options + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataspace_id, dataset_id, property_id, datatype + integer(HSIZE_T), allocatable :: dims(:), maxdims(:), chunks(:) + integer :: close_error, error, rank + + call set_status_success(status) + dataspace_id = -1_HID_T + dataset_id = -1_HID_T + property_id = -1_HID_T + rank = size(shape) + 1 + allocate(dims(rank), maxdims(rank), chunks(rank)) + if (size(shape) > 0) then + dims(:rank - 1) = int(shape, HSIZE_T) + maxdims(:rank - 1) = int(shape, HSIZE_T) + call choose_chunk_shape(shape, numeric_type, & + options%chunk_target_bytes, chunks(:rank - 1)) + chunks(rank) = 1_HSIZE_T + else + chunks(rank) = 256_HSIZE_T + end if + dims(rank) = 0_HSIZE_T + maxdims(rank) = H5S_UNLIMITED_F + + call h5screate_simple_f(rank, dims, dataspace_id, error, maxdims) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not create series dataspace: '//trim(path)) + return + end if + + call h5pcreate_f(H5P_DATASET_CREATE_F, property_id, error) + if (error == 0) call h5pset_chunk_f(property_id, rank, chunks, error) + if (error == 0 .and. options%compression_level > 0) then + call h5pset_deflate_f(property_id, options%compression_level, error) + end if + if (error /= 0) then + if (property_id >= 0_HID_T) then + call h5pclose_f(property_id, close_error) + end if + call h5sclose_f(dataspace_id, close_error) + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not configure series dataset: '//trim(path)) + return + end if + + datatype = hdf_datatype(numeric_type) + call h5dcreate_f(file%id, trim(path), datatype, dataspace_id, & + dataset_id, error, property_id) + if (error /= 0) then + call h5pclose_f(property_id, close_error) + call h5sclose_f(dataspace_id, close_error) + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not create series dataset: '//trim(path)) + return + end if + + call h5dclose_f(dataset_id, error) + call h5pclose_f(property_id, close_error) + if (error == 0) error = close_error + call h5sclose_f(dataspace_id, close_error) + if (error == 0) error = close_error + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not close series dataset resources: '//trim(path)) + end if + end subroutine hdf_create_series_dataset + + subroutine hdf_append_series_r4(file, path, data, shape, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + call append_series_r4_impl(file, path, data, shape, committed_steps, & + hdf_datatype(XDMF_NUMERIC_REAL32), status) + end subroutine hdf_append_series_r4 + + subroutine hdf_append_series_r8(file, path, data, shape, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + call append_series_r8_impl(file, path, data, shape, committed_steps, & + hdf_datatype(XDMF_NUMERIC_REAL64), status) + end subroutine hdf_append_series_r8 + + subroutine hdf_append_series_i4(file, path, data, shape, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + call append_series_i4_impl(file, path, data, shape, committed_steps, & + hdf_datatype(XDMF_NUMERIC_INT32), status) + end subroutine hdf_append_series_i4 + + subroutine hdf_append_series_i8(file, path, data, shape, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + call append_series_i8_impl(file, path, data, shape, committed_steps, & + hdf_datatype(XDMF_NUMERIC_INT64), status) + end subroutine hdf_append_series_i8 + + subroutine hdf_append_series_hyperslab_r4(file, path, data, shape, offset, & + count, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:), offset(:), count(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + real(real32) :: dummy(1) + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), hdf_offset(:), hdf_count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + dummy = 0.0_real32 + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, hdf_offset, hdf_count, mem_dims, status, & + offset, count) + if (status%is_error()) return + if (size(data) == 0) then + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_REAL32), dummy, & + mem_dims, error, memspace, filespace, file%transfer_property) + else + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_REAL32), data, & + mem_dims, error, memspace, filespace, file%transfer_property) + end if + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine hdf_append_series_hyperslab_r4 + + subroutine hdf_append_series_hyperslab_r8(file, path, data, shape, offset, & + count, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:), offset(:), count(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + real(real64) :: dummy(1) + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), hdf_offset(:), hdf_count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + dummy = 0.0_real64 + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, hdf_offset, hdf_count, mem_dims, status, & + offset, count) + if (status%is_error()) return + if (size(data) == 0) then + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_REAL64), dummy, & + mem_dims, error, memspace, filespace, file%transfer_property) + else + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_REAL64), data, & + mem_dims, error, memspace, filespace, file%transfer_property) + end if + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine hdf_append_series_hyperslab_r8 + + subroutine hdf_append_series_hyperslab_i4(file, path, data, shape, offset, & + count, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:), offset(:), count(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + integer(int32) :: dummy(1) + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), hdf_offset(:), hdf_count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + dummy = 0_int32 + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, hdf_offset, hdf_count, mem_dims, status, & + offset, count) + if (status%is_error()) return + if (size(data) == 0) then + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_INT32), dummy, & + mem_dims, error, memspace, filespace, file%transfer_property) + else + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_INT32), data, & + mem_dims, error, memspace, filespace, file%transfer_property) + end if + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine hdf_append_series_hyperslab_i4 + + subroutine hdf_append_series_hyperslab_i8(file, path, data, shape, offset, & + count, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:), offset(:), count(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + integer(int64) :: dummy(1) + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), hdf_offset(:), hdf_count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + dummy = 0_int64 + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, hdf_offset, hdf_count, mem_dims, status, & + offset, count) + if (status%is_error()) return + if (size(data) == 0) then + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_INT64), dummy, & + mem_dims, error, memspace, filespace, file%transfer_property) + else + call h5dwrite_f(dataset_id, hdf_datatype(XDMF_NUMERIC_INT64), data, & + mem_dims, error, memspace, filespace, file%transfer_property) + end if + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine hdf_append_series_hyperslab_i8 + + subroutine append_series_r4_impl(file, path, data, shape, committed_steps, & + datatype, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + integer(HID_T), intent(in) :: datatype + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), offset(:), count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, offset, count, mem_dims, status) + if (status%is_error()) return + call h5dwrite_f(dataset_id, datatype, data, mem_dims, error, & + memspace, filespace, file%transfer_property) + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine append_series_r4_impl + + subroutine append_series_r8_impl(file, path, data, shape, committed_steps, & + datatype, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + real(real64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + integer(HID_T), intent(in) :: datatype + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), offset(:), count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, offset, count, mem_dims, status) + if (status%is_error()) return + call h5dwrite_f(dataset_id, datatype, data, mem_dims, error, & + memspace, filespace, file%transfer_property) + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine append_series_r8_impl + + subroutine append_series_i4_impl(file, path, data, shape, committed_steps, & + datatype, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int32), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + integer(HID_T), intent(in) :: datatype + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), offset(:), count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, offset, count, mem_dims, status) + if (status%is_error()) return + call h5dwrite_f(dataset_id, datatype, data, mem_dims, error, & + memspace, filespace, file%transfer_property) + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine append_series_i4_impl + + subroutine append_series_i8_impl(file, path, data, shape, committed_steps, & + datatype, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int64), intent(in) :: data(:) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + integer(HID_T), intent(in) :: datatype + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable :: new_dims(:), offset(:), count(:) + integer(HSIZE_T) :: mem_dims(1) + integer :: error + + call prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, offset, count, mem_dims, status) + if (status%is_error()) return + call h5dwrite_f(dataset_id, datatype, data, mem_dims, error, & + memspace, filespace, file%transfer_property) + call finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, error, status) + end subroutine append_series_i8_impl + + subroutine hdf_truncate_series(file, path, shape, committed_steps, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataset_id + integer(HSIZE_T), allocatable :: dims(:) + integer :: error, close_error, rank + + call set_status_success(status) + dataset_id = -1_HID_T + close_error = 0 + rank = size(shape) + 1 + allocate(dims(rank)) + if (size(shape) > 0) dims(:rank - 1) = int(shape, HSIZE_T) + dims(rank) = int(committed_steps, HSIZE_T) + + call h5dopen_f(file%id, trim(path), dataset_id, error) + if (error == 0) call h5dset_extent_f(dataset_id, dims, error) + if (dataset_id >= 0_HID_T) call h5dclose_f(dataset_id, close_error) + if (close_error /= 0) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Rollback succeeded but dataset close failed: '//trim(path)) + else if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not roll back series dataset: '//trim(path)) + end if + end subroutine hdf_truncate_series + + subroutine create_fixed_dataset(file, path, shape, datatype, dataset_id, status) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int64), intent(in) :: shape(:) + integer(HID_T), intent(in) :: datatype + integer(HID_T), intent(out) :: dataset_id + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataspace_id + integer(HSIZE_T), allocatable :: dims(:) + integer :: dataset_close_error, delete_error, error, close_error + + call set_status_success(status) + dataset_id = -1_HID_T + dataspace_id = -1_HID_T + close_error = 0 + if (size(shape) == 0 .or. any(shape <= 0_int64)) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'A fixed HDF5 dataset must have positive dimensions: '//trim(path)) + return + end if + + allocate(dims(size(shape))) + dims = int(shape, HSIZE_T) + call h5screate_simple_f(size(shape), dims, dataspace_id, error) + if (error == 0) then + call h5dcreate_f(file%id, trim(path), datatype, dataspace_id, & + dataset_id, error) + end if + if (dataspace_id >= 0_HID_T) call h5sclose_f(dataspace_id, close_error) + if (close_error /= 0) then + dataset_close_error = 0 + delete_error = 0 + if (dataset_id >= 0_HID_T) then + call h5dclose_f(dataset_id, dataset_close_error) + if (dataset_close_error == 0) then + dataset_id = -1_HID_T + call h5ldelete_f(file%id, trim(path), delete_error) + end if + end if + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not close fixed dataset resources: '//trim(path)) + return + end if + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not create HDF5 dataset: '//trim(path)) + end if + end subroutine create_fixed_dataset + + subroutine prepare_full_transfer(file, dataset_id, buffer_dims, filespace, & + memspace, status) + type(hdf5_file_t), intent(in) :: file + integer(HID_T), intent(in) :: dataset_id + integer(HSIZE_T), intent(in) :: buffer_dims(1) + integer(HID_T), intent(out) :: filespace, memspace + type(xdmf_status_t), intent(out) :: status + + integer :: error, close_error + + call set_status_success(status) + filespace = -1_HID_T + memspace = -1_HID_T + call h5dget_space_f(dataset_id, filespace, error) + if (error == 0) call h5screate_simple_f(1, buffer_dims, memspace, error) + if (error == 0 .and. file%collective .and. file%rank /= file%root_rank) then + call h5sselect_none_f(filespace, error) + if (error == 0) call h5sselect_none_f(memspace, error) + end if + if (error /= 0) then + if (memspace >= 0_HID_T) call h5sclose_f(memspace, close_error) + if (filespace >= 0_HID_T) call h5sclose_f(filespace, close_error) + memspace = -1_HID_T + filespace = -1_HID_T + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not configure a fixed-dataset transfer') + end if + end subroutine prepare_full_transfer + + subroutine finish_fixed_write(file, dataset_id, filespace, memspace, path, & + write_error, status) + type(hdf5_file_t), intent(in) :: file + integer(HID_T), intent(inout) :: dataset_id, filespace, memspace + character(len=*), intent(in) :: path + integer, intent(in) :: write_error + type(xdmf_status_t), intent(inout) :: status + + integer :: close_error, delete_error, space_error + + close_error = 0 + delete_error = 0 + space_error = 0 + if (memspace >= 0_HID_T) call h5sclose_f(memspace, space_error) + if (filespace >= 0_HID_T) call h5sclose_f(filespace, close_error) + if (space_error == 0) space_error = close_error + memspace = -1_HID_T + filespace = -1_HID_T + call h5dclose_f(dataset_id, close_error) + dataset_id = -1_HID_T + if (write_error /= 0 .or. close_error /= 0 .or. space_error /= 0) then + call h5ldelete_f(file%id, trim(path), delete_error) + end if + if (write_error /= 0) then + if (delete_error /= 0) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Dataset write and cleanup failed: '//trim(path)) + else + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not write HDF5 dataset: '//trim(path)) + end if + else if (close_error /= 0 .or. space_error /= 0) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not close HDF5 dataset resources: '//trim(path)) + end if + end subroutine finish_fixed_write + + subroutine prepare_append(file, path, shape, committed_steps, dataset_id, & + filespace, memspace, new_dims, offset, count, mem_dims, status, & + local_offset, local_count) + type(hdf5_file_t), intent(in) :: file + character(len=*), intent(in) :: path + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps + integer(HID_T), intent(out) :: dataset_id, filespace, memspace + integer(HSIZE_T), allocatable, intent(out) :: new_dims(:), offset(:), count(:) + integer(HSIZE_T), intent(out) :: mem_dims(1) + type(xdmf_status_t), intent(out) :: status + integer(int64), intent(in), optional :: local_offset(:), local_count(:) + + integer(HSIZE_T), allocatable :: dims(:), maxdims(:) + integer(int64) :: memory_elements + integer :: error, close_error, rank + logical :: close_failed, empty_selection + + call set_status_success(status) + dataset_id = -1_HID_T + filespace = -1_HID_T + memspace = -1_HID_T + rank = size(shape) + 1 + allocate(dims(rank), maxdims(rank), new_dims(rank), offset(rank), count(rank)) + if (present(local_offset) .neqv. present(local_count)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'A series hyperslab requires both offset and count') + return + end if + if (present(local_offset)) then + if (size(local_offset) /= size(shape) .or. & + size(local_count) /= size(shape)) then + call set_status_error(status, XDMF_ERROR_ARGUMENT, & + 'A series hyperslab rank must match the dataset rank') + return + end if + end if + + call h5dopen_f(file%id, trim(path), dataset_id, error) + if (error == 0) call h5dget_space_f(dataset_id, filespace, error) + if (error == 0) then + call h5sget_simple_extent_dims_f(filespace, dims, maxdims, error) + if (error >= 0) error = 0 + end if + if (error /= 0) then + call close_append_handles(dataset_id, filespace, memspace, close_failed) + if (close_failed) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Series open and cleanup failed: '//trim(path)) + else + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not open series dataset: '//trim(path)) + end if + return + end if + + if (size(shape) > 0) then + if (any(dims(:rank - 1) /= int(shape, HSIZE_T))) then + call close_append_handles(dataset_id, filespace, memspace, close_failed) + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Series dataset shape changed: '//trim(path)) + return + end if + end if + if (dims(rank) /= int(committed_steps, HSIZE_T)) then + call close_append_handles(dataset_id, filespace, memspace, close_failed) + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Series dataset extent is not synchronized: '//trim(path)) + return + end if + + new_dims = dims + new_dims(rank) = dims(rank) + 1_HSIZE_T + call h5dset_extent_f(dataset_id, new_dims, error) + call h5sclose_f(filespace, close_error) + if (close_error /= 0) then + call close_append_handles(dataset_id, filespace, memspace, close_failed) + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not close the original series dataspace: '//trim(path)) + return + end if + filespace = -1_HID_T + if (error == 0) call h5dget_space_f(dataset_id, filespace, error) + + offset = 0_HSIZE_T + offset(rank) = dims(rank) + if (present(local_offset)) then + if (size(shape) > 0) then + offset(:rank - 1) = int(local_offset, HSIZE_T) + count(:rank - 1) = int(local_count, HSIZE_T) + end if + else + count = new_dims + end if + count(rank) = 1_HSIZE_T + empty_selection = .false. + if (present(local_count)) empty_selection = any(local_count == 0_int64) + if (error == 0 .and. empty_selection) then + call h5sselect_none_f(filespace, error) + else if (error == 0) then + call h5sselect_hyperslab_f(filespace, H5S_SELECT_SET_F, & + offset, count, error) + end if + + if (present(local_count)) then + memory_elements = product_int64(local_count) + else + memory_elements = product_int64(shape) + end if + mem_dims(1) = int(max(1_int64, memory_elements), HSIZE_T) + if (error == 0) call h5screate_simple_f(1, mem_dims, memspace, error) + if (error == 0 .and. empty_selection) then + call h5sselect_none_f(memspace, error) + else if (error == 0 .and. .not. present(local_offset) .and. & + file%collective .and. file%rank /= file%root_rank) then + call h5sselect_none_f(filespace, error) + if (error == 0) call h5sselect_none_f(memspace, error) + end if + if (error /= 0) then + call h5dset_extent_f(dataset_id, dims, close_error) + call close_append_handles(dataset_id, filespace, memspace, close_failed) + if (close_error /= 0 .or. close_failed) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Series setup and rollback failed: '//trim(path)) + else + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not extend series dataset: '//trim(path)) + end if + end if + end subroutine prepare_append + + subroutine finish_append(dataset_id, filespace, memspace, path, shape, & + committed_steps, write_error, status) + integer(HID_T), intent(inout) :: dataset_id, filespace, memspace + character(len=*), intent(in) :: path + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: committed_steps, write_error + type(xdmf_status_t), intent(inout) :: status + + integer(HSIZE_T), allocatable :: rollback_dims(:) + integer :: error, rank + logical :: close_failed + + rank = size(shape) + 1 + if (write_error /= 0) then + allocate(rollback_dims(rank)) + if (size(shape) > 0) rollback_dims(:rank - 1) = int(shape, HSIZE_T) + rollback_dims(rank) = int(committed_steps, HSIZE_T) + call h5dset_extent_f(dataset_id, rollback_dims, error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Series append and rollback failed: '//trim(path)) + else + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not append series dataset: '//trim(path)) + end if + end if + call close_append_handles(dataset_id, filespace, memspace, close_failed) + if (close_failed) then + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'Could not close series dataset resources: '//trim(path)) + end if + end subroutine finish_append + + subroutine close_append_handles(dataset_id, filespace, memspace, close_failed) + integer(HID_T), intent(inout) :: dataset_id, filespace, memspace + logical, intent(out) :: close_failed + integer :: error + + close_failed = .false. + if (memspace >= 0_HID_T) then + call h5sclose_f(memspace, error) + if (error /= 0) close_failed = .true. + end if + if (filespace >= 0_HID_T) then + call h5sclose_f(filespace, error) + if (error /= 0) close_failed = .true. + end if + if (dataset_id >= 0_HID_T) then + call h5dclose_f(dataset_id, error) + if (error /= 0) close_failed = .true. + end if + memspace = -1_HID_T + filespace = -1_HID_T + dataset_id = -1_HID_T + end subroutine close_append_handles + + subroutine choose_chunk_shape(shape, numeric_type, target_bytes, chunks) + integer(int64), intent(in) :: shape(:) + integer, intent(in) :: numeric_type + integer(int64), intent(in) :: target_bytes + integer(HSIZE_T), intent(out) :: chunks(:) + + integer :: largest(1) + integer(int64) :: chunk_elements, target_elements + + chunks = int(max(shape, 1_int64), HSIZE_T) + target_elements = max(1_int64, target_bytes / & + max(1_int64, numeric_type_size(numeric_type))) + do + chunk_elements = product_int64(int(chunks, int64)) + if (chunk_elements >= 0_int64 .and. & + chunk_elements <= target_elements) exit + largest = maxloc(chunks) + chunks(largest(1)) = max(1_HSIZE_T, (chunks(largest(1)) + 1_HSIZE_T) / 2_HSIZE_T) + end do + end subroutine choose_chunk_shape + + integer(HID_T) function hdf_datatype(numeric_type) + integer, intent(in) :: numeric_type + + select case (numeric_type) + case (XDMF_NUMERIC_REAL32) + hdf_datatype = h5kind_to_type(real32, H5_REAL_KIND) + case (XDMF_NUMERIC_REAL64) + hdf_datatype = h5kind_to_type(real64, H5_REAL_KIND) + case (XDMF_NUMERIC_INT32) + hdf_datatype = h5kind_to_type(int32, H5_INTEGER_KIND) + case (XDMF_NUMERIC_INT64) + hdf_datatype = h5kind_to_type(int64, H5_INTEGER_KIND) + case default; hdf_datatype = -1_HID_T + end select + end function hdf_datatype + + subroutine write_string_attribute(location_id, name, value, status) + integer(HID_T), intent(in) :: location_id + character(len=*), intent(in) :: name, value + type(xdmf_status_t), intent(out) :: status + + integer(HID_T) :: dataspace_id, datatype_id, attribute_id + integer(HSIZE_T) :: dims(1) + integer(SIZE_T) :: string_size + integer :: error, close_error + + call set_status_success(status) + dataspace_id = -1_HID_T + datatype_id = -1_HID_T + attribute_id = -1_HID_T + dims(1) = 1_HSIZE_T + string_size = int(max(1, len_trim(value)), SIZE_T) + call h5screate_f(H5S_SCALAR_F, dataspace_id, error) + if (error == 0) call h5tcopy_f(H5T_FORTRAN_S1, datatype_id, error) + if (error == 0) call h5tset_size_f(datatype_id, string_size, error) + if (error == 0) then + call h5acreate_f(location_id, trim(name), datatype_id, dataspace_id, & + attribute_id, error) + end if + if (error == 0) then + call h5awrite_f(attribute_id, datatype_id, trim(value), dims, error) + end if + if (attribute_id >= 0_HID_T) call h5aclose_f(attribute_id, close_error) + if (datatype_id >= 0_HID_T) call h5tclose_f(datatype_id, close_error) + if (dataspace_id >= 0_HID_T) call h5sclose_f(dataspace_id, close_error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_HDF5, & + 'Could not write HDF5 schema attribute: '//trim(name)) + end if + end subroutine write_string_attribute + + subroutine close_after_create_error(file, status) + type(hdf5_file_t), intent(inout) :: file + type(xdmf_status_t), intent(inout) :: status + integer :: error, property_error + + error = 0 + property_error = 0 + if (file%id >= 0_HID_T) call h5fclose_f(file%id, error) + if (file%transfer_property /= H5P_DEFAULT_F) then + call h5pclose_f(file%transfer_property, property_error) + if (property_error == 0) file%transfer_property = H5P_DEFAULT_F + end if + if (error == 0 .and. property_error == 0) then + file%id = -1_HID_T + else + call set_status_error(status, XDMF_ERROR_CONSISTENCY, & + 'HDF5 file creation failed and its handle could not be closed') + end if + end subroutine close_after_create_error + +end module xdmf_hdf5_backend_m diff --git a/external/xdmf-hdf5/src/xdmf_model.F90 b/external/xdmf-hdf5/src/xdmf_model.F90 new file mode 100644 index 00000000..af5671f8 --- /dev/null +++ b/external/xdmf-hdf5/src/xdmf_model.F90 @@ -0,0 +1,424 @@ +module xdmf_model_m + use, intrinsic :: iso_fortran_env, only: int32, int64, real32, real64 + + implicit none + + private + + integer, parameter, public :: XDMF_SUCCESS = 0 + integer, parameter, public :: XDMF_ERROR_ARGUMENT = 1 + integer, parameter, public :: XDMF_ERROR_STATE = 2 + integer, parameter, public :: XDMF_ERROR_IO = 3 + integer, parameter, public :: XDMF_ERROR_HDF5 = 4 + integer, parameter, public :: XDMF_ERROR_CONSISTENCY = 5 + + integer, parameter, public :: XDMF_SERIES_NONE = 0 + integer, parameter, public :: XDMF_SERIES_TIME = 1 + integer, parameter, public :: XDMF_SERIES_FREQUENCY = 2 + integer, parameter, public :: XDMF_SERIES_PARAMETER = 3 + + integer, parameter, public :: XDMF_GEOMETRY_UNIFORM = 1 + integer, parameter, public :: XDMF_GEOMETRY_RECTILINEAR = 2 + integer, parameter, public :: XDMF_GEOMETRY_CURVILINEAR = 3 + integer, parameter, public :: XDMF_GEOMETRY_UNSTRUCTURED = 4 + + integer, parameter, public :: XDMF_TOPOLOGY_POLYVERTEX = 1 + integer, parameter, public :: XDMF_TOPOLOGY_POLYLINE = 2 + integer, parameter, public :: XDMF_TOPOLOGY_POLYGON = 3 + integer, parameter, public :: XDMF_TOPOLOGY_TRIANGLE = 4 + integer, parameter, public :: XDMF_TOPOLOGY_QUADRILATERAL = 5 + integer, parameter, public :: XDMF_TOPOLOGY_TETRAHEDRON = 6 + integer, parameter, public :: XDMF_TOPOLOGY_PYRAMID = 7 + integer, parameter, public :: XDMF_TOPOLOGY_WEDGE = 8 + integer, parameter, public :: XDMF_TOPOLOGY_HEXAHEDRON = 9 + integer, parameter, public :: XDMF_TOPOLOGY_POLYHEDRON = 16 + integer, parameter, public :: XDMF_TOPOLOGY_EDGE_3 = 34 + integer, parameter, public :: XDMF_TOPOLOGY_QUADRILATERAL_9 = 35 + integer, parameter, public :: XDMF_TOPOLOGY_TRIANGLE_6 = 36 + integer, parameter, public :: XDMF_TOPOLOGY_QUADRILATERAL_8 = 37 + integer, parameter, public :: XDMF_TOPOLOGY_TETRAHEDRON_10 = 38 + integer, parameter, public :: XDMF_TOPOLOGY_PYRAMID_13 = 39 + integer, parameter, public :: XDMF_TOPOLOGY_WEDGE_15 = 40 + integer, parameter, public :: XDMF_TOPOLOGY_WEDGE_18 = 41 + integer, parameter, public :: XDMF_TOPOLOGY_HEXAHEDRON_20 = 48 + integer, parameter, public :: XDMF_TOPOLOGY_HEXAHEDRON_24 = 49 + integer, parameter, public :: XDMF_TOPOLOGY_HEXAHEDRON_27 = 50 + integer, parameter, public :: XDMF_TOPOLOGY_MIXED = 100 + integer, parameter, public :: XDMF_TOPOLOGY_2D_SMESH = 201 + integer, parameter, public :: XDMF_TOPOLOGY_2D_RECTMESH = 202 + integer, parameter, public :: XDMF_TOPOLOGY_2D_CORECTMESH = 203 + integer, parameter, public :: XDMF_TOPOLOGY_3D_SMESH = 204 + integer, parameter, public :: XDMF_TOPOLOGY_3D_RECTMESH = 205 + integer, parameter, public :: XDMF_TOPOLOGY_3D_CORECTMESH = 206 + + integer, parameter, public :: XDMF_CENTER_NODE = 1 + integer, parameter, public :: XDMF_CENTER_EDGE = 2 + integer, parameter, public :: XDMF_CENTER_FACE = 3 + integer, parameter, public :: XDMF_CENTER_CELL = 4 + integer, parameter, public :: XDMF_CENTER_GRID = 5 + + integer, parameter, public :: XDMF_ATTRIBUTE_SCALAR = 1 + integer, parameter, public :: XDMF_ATTRIBUTE_VECTOR = 2 + integer, parameter, public :: XDMF_ATTRIBUTE_TENSOR = 3 + integer, parameter, public :: XDMF_ATTRIBUTE_TENSOR6 = 4 + integer, parameter, public :: XDMF_ATTRIBUTE_MATRIX = 5 + integer, parameter, public :: XDMF_ATTRIBUTE_GLOBAL_ID = 6 + + integer, parameter, public :: XDMF_NUMERIC_REAL32 = 1 + integer, parameter, public :: XDMF_NUMERIC_REAL64 = 2 + integer, parameter, public :: XDMF_NUMERIC_INT32 = 3 + integer, parameter, public :: XDMF_NUMERIC_INT64 = 4 + + type, public :: xdmf_status_t + private + integer :: code = XDMF_SUCCESS + character(len=:), allocatable :: detail + contains + procedure, public :: is_error => status_is_error + procedure, public :: error_code => status_error_code + procedure, public :: message => status_message + end type xdmf_status_t + + type, public :: xdmf_options_t + logical :: overwrite = .false. + integer :: series_kind = XDMF_SERIES_NONE + integer :: compression_level = 0 + integer(int64) :: chunk_target_bytes = 1048576_int64 + logical :: collective_io = .false. + integer :: communicator = 0 + integer :: root_rank = 0 + end type xdmf_options_t + + type, public :: xdmf_collection_id_t + private + integer :: value = 0 + integer(int64) :: owner = 0_int64 + end type xdmf_collection_id_t + + type, public :: xdmf_grid_id_t + private + integer :: value = 0 + integer(int64) :: owner = 0_int64 + end type xdmf_grid_id_t + + type, public :: xdmf_attribute_id_t + private + integer :: value = 0 + integer(int64) :: owner = 0_int64 + end type xdmf_attribute_id_t + + type, public :: collection_record_t + integer :: id = 0 + character(len=:), allocatable :: name + end type collection_record_t + + type, public :: grid_record_t + integer :: id = 0 + integer :: collection_id = 0 + integer :: geometry_type = 0 + integer :: topology_type = 0 + integer :: dimension = 0 + integer :: geometry_numeric_type = XDMF_NUMERIC_REAL64 + integer :: topology_numeric_type = XDMF_NUMERIC_INT64 + integer :: nodes_per_element = 0 + integer(int64) :: number_of_points = 0_int64 + integer(int64) :: number_of_elements = 0_int64 + integer(int64) :: mixed_connectivity_size = 0_int64 + integer(int64), allocatable :: dimensions(:) + integer(int64), allocatable :: axis_sizes(:) + character(len=:), allocatable :: name + character(len=:), allocatable :: group_path + character(len=:), allocatable :: origin_path + character(len=:), allocatable :: spacing_path + character(len=:), allocatable :: points_path + character(len=:), allocatable :: connectivity_path + character(len=:), allocatable :: axis_paths(:) + end type grid_record_t + + type, public :: attribute_record_t + integer :: id = 0 + integer :: grid_id = 0 + integer :: center = 0 + integer :: attribute_type = 0 + integer :: numeric_type = 0 + integer :: last_step = 0 + logical :: is_series = .false. + logical :: is_written = .false. + integer(int64) :: entity_count = 0_int64 + integer(int64), allocatable :: component_shape(:) + integer(int64), allocatable :: storage_shape(:) + character(len=:), allocatable :: name + character(len=:), allocatable :: dataset_path + end type attribute_record_t + + public :: set_status_success + public :: set_status_error + public :: make_collection_id + public :: make_grid_id + public :: make_attribute_id + public :: collection_id_value + public :: grid_id_value + public :: attribute_id_value + public :: collection_id_owner + public :: grid_id_owner + public :: attribute_id_owner + public :: topology_name + public :: topology_nodes_per_element + public :: topology_is_supported + public :: center_name + public :: attribute_type_name + public :: numeric_type_name + public :: numeric_type_precision + public :: numeric_type_size + public :: product_int64 + +contains + + logical function status_is_error(this) + class(xdmf_status_t), intent(in) :: this + + status_is_error = this%code /= XDMF_SUCCESS + end function status_is_error + + integer function status_error_code(this) + class(xdmf_status_t), intent(in) :: this + + status_error_code = this%code + end function status_error_code + + function status_message(this) result(message) + class(xdmf_status_t), intent(in) :: this + character(len=:), allocatable :: message + + if (allocated(this%detail)) then + message = this%detail + else + message = '' + end if + end function status_message + + subroutine set_status_success(status) + type(xdmf_status_t), intent(out) :: status + + status%code = XDMF_SUCCESS + status%detail = '' + end subroutine set_status_success + + subroutine set_status_error(status, code, message) + type(xdmf_status_t), intent(out) :: status + integer, intent(in) :: code + character(len=*), intent(in) :: message + + status%code = code + status%detail = trim(message) + end subroutine set_status_error + + function make_collection_id(value, owner) result(id) + integer, intent(in) :: value + integer(int64), intent(in), optional :: owner + type(xdmf_collection_id_t) :: id + + id%value = value + if (present(owner)) id%owner = owner + end function make_collection_id + + function make_grid_id(value, owner) result(id) + integer, intent(in) :: value + integer(int64), intent(in), optional :: owner + type(xdmf_grid_id_t) :: id + + id%value = value + if (present(owner)) id%owner = owner + end function make_grid_id + + function make_attribute_id(value, owner) result(id) + integer, intent(in) :: value + integer(int64), intent(in), optional :: owner + type(xdmf_attribute_id_t) :: id + + id%value = value + if (present(owner)) id%owner = owner + end function make_attribute_id + + integer function collection_id_value(id) + type(xdmf_collection_id_t), intent(in) :: id + + collection_id_value = id%value + end function collection_id_value + + integer function grid_id_value(id) + type(xdmf_grid_id_t), intent(in) :: id + + grid_id_value = id%value + end function grid_id_value + + integer function attribute_id_value(id) + type(xdmf_attribute_id_t), intent(in) :: id + + attribute_id_value = id%value + end function attribute_id_value + + integer(int64) function collection_id_owner(id) + type(xdmf_collection_id_t), intent(in) :: id + + collection_id_owner = id%owner + end function collection_id_owner + + integer(int64) function grid_id_owner(id) + type(xdmf_grid_id_t), intent(in) :: id + + grid_id_owner = id%owner + end function grid_id_owner + + integer(int64) function attribute_id_owner(id) + type(xdmf_attribute_id_t), intent(in) :: id + + attribute_id_owner = id%owner + end function attribute_id_owner + + logical function topology_is_supported(topology) + integer, intent(in) :: topology + + topology_is_supported = len(topology_name(topology)) > 0 + end function topology_is_supported + + function topology_name(topology) result(name) + integer, intent(in) :: topology + character(len=:), allocatable :: name + + select case (topology) + case (XDMF_TOPOLOGY_POLYVERTEX); name = 'Polyvertex' + case (XDMF_TOPOLOGY_POLYLINE); name = 'Polyline' + case (XDMF_TOPOLOGY_POLYGON); name = 'Polygon' + case (XDMF_TOPOLOGY_TRIANGLE); name = 'Triangle' + case (XDMF_TOPOLOGY_QUADRILATERAL); name = 'Quadrilateral' + case (XDMF_TOPOLOGY_TETRAHEDRON); name = 'Tetrahedron' + case (XDMF_TOPOLOGY_PYRAMID); name = 'Pyramid' + case (XDMF_TOPOLOGY_WEDGE); name = 'Wedge' + case (XDMF_TOPOLOGY_HEXAHEDRON); name = 'Hexahedron' + case (XDMF_TOPOLOGY_POLYHEDRON); name = 'Polyhedron' + case (XDMF_TOPOLOGY_EDGE_3); name = 'Edge_3' + case (XDMF_TOPOLOGY_QUADRILATERAL_9); name = 'Quadrilateral_9' + case (XDMF_TOPOLOGY_TRIANGLE_6); name = 'Triangle_6' + case (XDMF_TOPOLOGY_QUADRILATERAL_8); name = 'Quadrilateral_8' + case (XDMF_TOPOLOGY_TETRAHEDRON_10); name = 'Tetrahedron_10' + case (XDMF_TOPOLOGY_PYRAMID_13); name = 'Pyramid_13' + case (XDMF_TOPOLOGY_WEDGE_15); name = 'Wedge_15' + case (XDMF_TOPOLOGY_WEDGE_18); name = 'Wedge_18' + case (XDMF_TOPOLOGY_HEXAHEDRON_20); name = 'Hexahedron_20' + case (XDMF_TOPOLOGY_HEXAHEDRON_24); name = 'Hexahedron_24' + case (XDMF_TOPOLOGY_HEXAHEDRON_27); name = 'Hexahedron_27' + case (XDMF_TOPOLOGY_MIXED); name = 'Mixed' + case (XDMF_TOPOLOGY_2D_SMESH); name = '2DSMesh' + case (XDMF_TOPOLOGY_2D_RECTMESH); name = '2DRectMesh' + case (XDMF_TOPOLOGY_2D_CORECTMESH); name = '2DCoRectMesh' + case (XDMF_TOPOLOGY_3D_SMESH); name = '3DSMesh' + case (XDMF_TOPOLOGY_3D_RECTMESH); name = '3DRectMesh' + case (XDMF_TOPOLOGY_3D_CORECTMESH); name = '3DCoRectMesh' + case default; name = '' + end select + end function topology_name + + integer function topology_nodes_per_element(topology) + integer, intent(in) :: topology + + select case (topology) + case (XDMF_TOPOLOGY_POLYVERTEX); topology_nodes_per_element = 1 + case (XDMF_TOPOLOGY_TRIANGLE); topology_nodes_per_element = 3 + case (XDMF_TOPOLOGY_QUADRILATERAL); topology_nodes_per_element = 4 + case (XDMF_TOPOLOGY_TETRAHEDRON); topology_nodes_per_element = 4 + case (XDMF_TOPOLOGY_PYRAMID); topology_nodes_per_element = 5 + case (XDMF_TOPOLOGY_WEDGE); topology_nodes_per_element = 6 + case (XDMF_TOPOLOGY_HEXAHEDRON); topology_nodes_per_element = 8 + case (XDMF_TOPOLOGY_EDGE_3); topology_nodes_per_element = 3 + case (XDMF_TOPOLOGY_QUADRILATERAL_9); topology_nodes_per_element = 9 + case (XDMF_TOPOLOGY_TRIANGLE_6); topology_nodes_per_element = 6 + case (XDMF_TOPOLOGY_QUADRILATERAL_8); topology_nodes_per_element = 8 + case (XDMF_TOPOLOGY_TETRAHEDRON_10); topology_nodes_per_element = 10 + case (XDMF_TOPOLOGY_PYRAMID_13); topology_nodes_per_element = 13 + case (XDMF_TOPOLOGY_WEDGE_15); topology_nodes_per_element = 15 + case (XDMF_TOPOLOGY_WEDGE_18); topology_nodes_per_element = 18 + case (XDMF_TOPOLOGY_HEXAHEDRON_20); topology_nodes_per_element = 20 + case (XDMF_TOPOLOGY_HEXAHEDRON_24); topology_nodes_per_element = 24 + case (XDMF_TOPOLOGY_HEXAHEDRON_27); topology_nodes_per_element = 27 + case default; topology_nodes_per_element = 0 + end select + end function topology_nodes_per_element + + function center_name(center) result(name) + integer, intent(in) :: center + character(len=:), allocatable :: name + + select case (center) + case (XDMF_CENTER_NODE); name = 'Node' + case (XDMF_CENTER_EDGE); name = 'Edge' + case (XDMF_CENTER_FACE); name = 'Face' + case (XDMF_CENTER_CELL); name = 'Cell' + case (XDMF_CENTER_GRID); name = 'Grid' + case default; name = '' + end select + end function center_name + + function attribute_type_name(attribute_type) result(name) + integer, intent(in) :: attribute_type + character(len=:), allocatable :: name + + select case (attribute_type) + case (XDMF_ATTRIBUTE_SCALAR); name = 'Scalar' + case (XDMF_ATTRIBUTE_VECTOR); name = 'Vector' + case (XDMF_ATTRIBUTE_TENSOR); name = 'Tensor' + case (XDMF_ATTRIBUTE_TENSOR6); name = 'Tensor6' + case (XDMF_ATTRIBUTE_MATRIX); name = 'Matrix' + case (XDMF_ATTRIBUTE_GLOBAL_ID); name = 'GlobalID' + case default; name = '' + end select + end function attribute_type_name + + function numeric_type_name(numeric_type) result(name) + integer, intent(in) :: numeric_type + character(len=:), allocatable :: name + + select case (numeric_type) + case (XDMF_NUMERIC_REAL32, XDMF_NUMERIC_REAL64); name = 'Float' + case (XDMF_NUMERIC_INT32, XDMF_NUMERIC_INT64); name = 'Int' + case default; name = '' + end select + end function numeric_type_name + + integer function numeric_type_precision(numeric_type) + integer, intent(in) :: numeric_type + + select case (numeric_type) + case (XDMF_NUMERIC_REAL32, XDMF_NUMERIC_INT32); numeric_type_precision = 4 + case (XDMF_NUMERIC_REAL64, XDMF_NUMERIC_INT64); numeric_type_precision = 8 + case default; numeric_type_precision = 0 + end select + end function numeric_type_precision + + integer(int64) function numeric_type_size(numeric_type) + integer, intent(in) :: numeric_type + + numeric_type_size = int(numeric_type_precision(numeric_type), int64) + end function numeric_type_size + + integer(int64) function product_int64(values) + integer(int64), intent(in) :: values(:) + integer :: i + + product_int64 = 1_int64 + do i = 1, size(values) + if (values(i) < 0_int64) then + product_int64 = -1_int64 + return + end if + if (values(i) > 0_int64) then + if (product_int64 > huge(product_int64) / values(i)) then + product_int64 = -1_int64 + return + end if + end if + product_int64 = product_int64 * values(i) + end do + end function product_int64 + +end module xdmf_model_m diff --git a/external/xdmf-hdf5/src/xdmf_xml.F90 b/external/xdmf-hdf5/src/xdmf_xml.F90 new file mode 100644 index 00000000..185dc1b8 --- /dev/null +++ b/external/xdmf-hdf5/src/xdmf_xml.F90 @@ -0,0 +1,460 @@ +module xdmf_xml_m + use, intrinsic :: iso_fortran_env, only: int64, real64 + use xdmf_model_m, only: xdmf_status_t, collection_record_t, & + grid_record_t, attribute_record_t, XDMF_ERROR_IO, & + XDMF_SERIES_NONE, XDMF_SERIES_TIME, XDMF_SERIES_FREQUENCY, & + XDMF_GEOMETRY_UNIFORM, XDMF_GEOMETRY_RECTILINEAR, & + XDMF_GEOMETRY_CURVILINEAR, XDMF_GEOMETRY_UNSTRUCTURED, & + XDMF_TOPOLOGY_MIXED, XDMF_TOPOLOGY_2D_SMESH, & + XDMF_TOPOLOGY_2D_RECTMESH, XDMF_TOPOLOGY_2D_CORECTMESH, & + XDMF_TOPOLOGY_3D_SMESH, XDMF_TOPOLOGY_3D_RECTMESH, & + XDMF_TOPOLOGY_3D_CORECTMESH, topology_name, center_name, & + attribute_type_name, numeric_type_name, numeric_type_precision, & + set_status_success, set_status_error + + implicit none + + private + + public :: write_xdmf_document + +contains + + subroutine write_xdmf_document(path, hdf5_name, collections, grids, & + attributes, series_kind, series_values, status) + character(len=*), intent(in) :: path, hdf5_name + type(collection_record_t), intent(in) :: collections(:) + type(grid_record_t), intent(in) :: grids(:) + type(attribute_record_t), intent(in) :: attributes(:) + integer, intent(in) :: series_kind + real(real64), intent(in) :: series_values(:) + type(xdmf_status_t), intent(out) :: status + + integer :: unit, error, step + + call set_status_success(status) + open(newunit=unit, file=trim(path), status='replace', action='write', & + iostat=error) + if (error /= 0) then + call set_status_error(status, XDMF_ERROR_IO, & + 'Could not create XDMF file: '//trim(path)) + return + end if + + call put_line(unit, 0, '', status) + call put_line(unit, 0, '', status) + call put_line(unit, 1, '', status) + call put_line(unit, 2, & + '', & + status) + + if (series_kind == XDMF_SERIES_NONE) then + call write_spatial_contents(unit, 2, hdf5_name, collections, grids, & + attributes, 0, 0, status) + else + if (series_kind == XDMF_SERIES_TIME) then + call put_line(unit, 2, & + '', status) + else + call put_line(unit, 2, & + '', status) + end if + + do step = 1, size(series_values) + call write_series_step_header(unit, 3, series_kind, step, & + series_values(step), status) + call write_spatial_contents(unit, 4, hdf5_name, collections, grids, & + attributes, step, size(series_values), status) + call put_line(unit, 3, '', status) + end do + call put_line(unit, 2, '', status) + end if + + call put_line(unit, 1, '', status) + call put_line(unit, 0, '', status) + close(unit, iostat=error) + if (error /= 0 .and. .not. status%is_error()) then + call set_status_error(status, XDMF_ERROR_IO, & + 'Could not close XDMF file: '//trim(path)) + end if + end subroutine write_xdmf_document + + subroutine write_series_step_header(unit, indent, series_kind, step, & + value, status) + integer, intent(in) :: unit, indent, series_kind, step + real(real64), intent(in) :: value + type(xdmf_status_t), intent(inout) :: status + + character(len=:), allocatable :: step_name, value_text + + step_name = 'Step '//integer_string(int(step, int64)) + value_text = real_string(value) + call put_line(unit, indent, '', status) + if (series_kind == XDMF_SERIES_TIME) then + call put_line(unit, indent + 1, '