From 89a0ac5517aea9498685250dc5c4705bcac6840e Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Fri, 12 Dec 2025 13:48:00 -0500 Subject: [PATCH 01/34] Added ellipse marker patch --- src/common/m_ib_patches.fpp | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/common/m_ib_patches.fpp b/src/common/m_ib_patches.fpp index c0d95e6f12..18fcf5968e 100644 --- a/src/common/m_ib_patches.fpp +++ b/src/common/m_ib_patches.fpp @@ -119,6 +119,9 @@ contains ! STL+IBM patch elseif (patch_ib(i)%geometry == 5) then call s_ib_model(i, ib_markers_sf, levelset, levelset_norm) + elseif (patch_ib(i)%geometry == 6) then + call s_ib_ellipse(i, ib_markers_sf) + call s_ellipse_levelset(i, levelset, levelset_norm) end if end do !> @} @@ -762,6 +765,47 @@ contains end subroutine s_ib_cylinder + + subroutine s_ib_ellipse(patch_id, ib_markers_sf) + + integer, intent(in) :: patch_id + integer, dimension(0:m, 0:n, 0:p), intent(inout) :: ib_markers_sf + + integer :: i, j, k !< generic loop iterators + real(wp), dimension(1:3) :: xy_local !< x and y coordinates in local IB frame + real(wp), dimension(1:2) :: length, center !< x and y coordinates in local IB frame + real(wp), dimension(1:3, 1:3) :: inverse_rotation + + ! Transferring the rectangle's centroid and length information + center(1) = patch_ib(patch_id)%x_centroid + center(2) = patch_ib(patch_id)%y_centroid + length(1) = patch_ib(patch_id)%length_x + length(2) = patch_ib(patch_id)%length_y + inverse_rotation(:, :) = patch_ib(patch_id)%rotation_matrix_inverse(:, :) + + ! Checking whether the rectangle covers a particular cell in the + ! domain and verifying whether the current patch has the permission + ! to write to that cell. If both queries check out, the primitive + ! variables of the current patch are assigned to this cell. + $:GPU_PARALLEL_LOOP(private='[i,j, xy_local]', copy='[ib_markers_sf]',& + & copyin='[patch_id,center,length,inverse_rotation,x_cc,y_cc]', collapse=2) + do j = 0, n + do i = 0, m + ! get the x and y coordinates in the local IB frame + xy_local = [x_cc(i) - center(1), y_cc(j) - center(2), 0._wp] + xy_local = matmul(inverse_rotation, xy_local) + + ! Ellipse condition (x/a)^2 + (y/b)^2 <= 1 + if ((xy_local(1)/length(1))**2 + (xy_local(1)/length(1))**2) then + ! Updating the patch identities bookkeeping variable + ib_markers_sf(i, j, 0) = patch_id + end if + end do + end do + $:END_GPU_PARALLEL_LOOP() + + end subroutine s_ib_ellipse + !> The STL patch is a 2/3D geometry that is imported from an STL file. !! @param patch_id is the patch identifier !! @param ib_markers_sf Array to track patch ids From ef446f5addc81da2c82c13ec236ab4da5464d222 Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Fri, 12 Dec 2025 16:40:40 -0500 Subject: [PATCH 02/34] Added ellipse IB patch --- src/common/m_compute_levelset.fpp | 59 +++++++++++++++++++++++++- src/common/m_ib_patches.fpp | 11 ++--- src/pre_process/m_check_ib_patches.fpp | 2 + 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/src/common/m_compute_levelset.fpp b/src/common/m_compute_levelset.fpp index f343c0c47c..5346eb1b8b 100644 --- a/src/common/m_compute_levelset.fpp +++ b/src/common/m_compute_levelset.fpp @@ -23,7 +23,8 @@ module m_compute_levelset s_3D_airfoil_levelset, & s_rectangle_levelset, & s_cuboid_levelset, & - s_sphere_levelset + s_sphere_levelset, & + s_ellipse_levelset contains @@ -336,6 +337,62 @@ contains end subroutine s_rectangle_levelset + subroutine s_ellipse_levelset(ib_patch_id, levelset, levelset_norm) + + type(levelset_field), intent(INOUT), optional :: levelset + type(levelset_norm_field), intent(INOUT), optional :: levelset_norm + + integer, intent(in) :: ib_patch_id + real(wp) :: ellipse_coeffs(2) ! a and b in the ellipse equation + real(wp) :: quadratic_coeffs(3) ! A, B, C in the quadratic equation to compute levelset + + real(wp) :: length_x, length_y + real(wp), dimension(1:3) :: xy_local, normal_vector !< x and y coordinates in local IB frame + real(wp), dimension(2) :: center !< x and y coordinates in local IB frame + real(wp), dimension(1:3, 1:3) :: rotation, inverse_rotation + + integer :: i, j, k !< Loop index variables + integer :: idx !< Shortest path direction indicator + + length_x = patch_ib(ib_patch_id)%length_x + length_y = patch_ib(ib_patch_id)%length_y + center(1) = patch_ib(ib_patch_id)%x_centroid + center(2) = patch_ib(ib_patch_id)%y_centroid + inverse_rotation(:, :) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:, :) + rotation(:, :) = patch_ib(ib_patch_id)%rotation_matrix(:, :) + + ellipse_coeffs(1) = 0.5_wp * length_x + ellipse_coeffs(2) = 0.5_wp * length_y + + $:GPU_PARALLEL_LOOP(private='[i,j,k,idx,quadratic_coeffs,xy_local,normal_vector]', & + & copyin='[ib_patch_id,center,ellipse_coeffs,inverse_rotation,rotation]', collapse=2) + do i = 0, m + do j = 0, n + xy_local = [x_cc(i) - center(1), y_cc(j) - center(2), 0._wp] + xy_local = matmul(inverse_rotation, xy_local) + + ! we will get NaNs in the levelset if we compute this outside the ellipse + if ((xy_local(1)/ellipse_coeffs(1))**2 + (xy_local(2)/ellipse_coeffs(2))**2 <= 1._wp) then + + normal_vector = xy_local + normal_vector(2) = normal_vector(2) * (ellipse_coeffs(1)/ellipse_coeffs(2))**2._wp ! get the normal direction via the coordinate transofmration method + normal_vector = normal_vector / sqrt(dot_product(normal_vector, normal_vector)) ! normalize the vector + levelset_norm%sf(i, j, 0, ib_patch_id, :) = matmul(rotation, normal_vector) ! save after rotating the vector to the global frame + + ! use the normal vector to set up the quadratic equation for the levelset, using A, B, and C in indices 1, 2, and 3 + quadratic_coeffs(1) = (normal_vector(1)/ellipse_coeffs(1))**2 + (normal_vector(2)/ellipse_coeffs(2))**2 + quadratic_coeffs(2) = 2._wp * ((xy_local(1)*normal_vector(1)/(ellipse_coeffs(1)**2)) + (xy_local(2)*normal_vector(2)/(ellipse_coeffs(2)**2))) + quadratic_coeffs(3) = (xy_local(1)/ellipse_coeffs(1))**2._wp + (xy_local(2)/ellipse_coeffs(2))**2._wp - 1._wp + + ! compute the levelset with the quadratic equation + levelset%sf(i, j, 0, ib_patch_id) = -0.5_wp * (-quadratic_coeffs(2) + sqrt(quadratic_coeffs(2)**2._wp - 4._wp * quadratic_coeffs(1)*quadratic_coeffs(3))) / quadratic_coeffs(1) + end if + end do + end do + $:END_GPU_PARALLEL_LOOP() + + end subroutine s_ellipse_levelset + subroutine s_cuboid_levelset(ib_patch_id, levelset, levelset_norm) type(levelset_field), intent(INOUT), optional :: levelset diff --git a/src/common/m_ib_patches.fpp b/src/common/m_ib_patches.fpp index 18fcf5968e..8468d0b859 100644 --- a/src/common/m_ib_patches.fpp +++ b/src/common/m_ib_patches.fpp @@ -773,14 +773,15 @@ contains integer :: i, j, k !< generic loop iterators real(wp), dimension(1:3) :: xy_local !< x and y coordinates in local IB frame - real(wp), dimension(1:2) :: length, center !< x and y coordinates in local IB frame + real(wp), dimension(1:2) :: ellipse_coeffs !< a and b in the ellipse coefficients + real(wp), dimension(1:2) :: center !< x and y coordinates in local IB frame real(wp), dimension(1:3, 1:3) :: inverse_rotation ! Transferring the rectangle's centroid and length information center(1) = patch_ib(patch_id)%x_centroid center(2) = patch_ib(patch_id)%y_centroid - length(1) = patch_ib(patch_id)%length_x - length(2) = patch_ib(patch_id)%length_y + ellipse_coeffs(1) = 0.5_wp * patch_ib(patch_id)%length_x + ellipse_coeffs(2) = 0.5_wp * patch_ib(patch_id)%length_y inverse_rotation(:, :) = patch_ib(patch_id)%rotation_matrix_inverse(:, :) ! Checking whether the rectangle covers a particular cell in the @@ -788,7 +789,7 @@ contains ! to write to that cell. If both queries check out, the primitive ! variables of the current patch are assigned to this cell. $:GPU_PARALLEL_LOOP(private='[i,j, xy_local]', copy='[ib_markers_sf]',& - & copyin='[patch_id,center,length,inverse_rotation,x_cc,y_cc]', collapse=2) + & copyin='[patch_id,center,ellipse_coeffs,inverse_rotation,x_cc,y_cc]', collapse=2) do j = 0, n do i = 0, m ! get the x and y coordinates in the local IB frame @@ -796,7 +797,7 @@ contains xy_local = matmul(inverse_rotation, xy_local) ! Ellipse condition (x/a)^2 + (y/b)^2 <= 1 - if ((xy_local(1)/length(1))**2 + (xy_local(1)/length(1))**2) then + if ((xy_local(1)/ellipse_coeffs(1))**2 + (xy_local(2)/ellipse_coeffs(2))**2 <= 1._wp) then ! Updating the patch identities bookkeeping variable ib_markers_sf(i, j, 0) = patch_id end if diff --git a/src/pre_process/m_check_ib_patches.fpp b/src/pre_process/m_check_ib_patches.fpp index 7e1f9aa1d7..19493814e5 100644 --- a/src/pre_process/m_check_ib_patches.fpp +++ b/src/pre_process/m_check_ib_patches.fpp @@ -62,6 +62,8 @@ contains else if (patch_ib(i)%geometry == 5 .or. & patch_ib(i)%geometry == 12) then call s_check_model_ib_patch_geometry(i) + else if (patch_ib(i)%geometry == 6) then + print *, "Ellipse Patch" else call s_prohibit_abort("Invalid IB patch", & "patch_ib("//trim(iStr)//")%geometry must be "// & From 2f9b1beac4c083033fc8475f4568725683ed573f Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Fri, 12 Dec 2025 16:51:26 -0500 Subject: [PATCH 03/34] Added an ellipse immersed boundary patch --- examples/2D_ibm_ellipse/case.py | 97 +++++++++++++++++++++++++++++++ src/common/m_compute_levelset.fpp | 2 +- 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 examples/2D_ibm_ellipse/case.py diff --git a/examples/2D_ibm_ellipse/case.py b/examples/2D_ibm_ellipse/case.py new file mode 100644 index 0000000000..1c5d8052f7 --- /dev/null +++ b/examples/2D_ibm_ellipse/case.py @@ -0,0 +1,97 @@ +import json +import math + +Mu = 1.84e-05 +gam_a = 1.4 + +# Configuring case dictionary +print( + json.dumps( + { + # Logistics + "run_time_info": "T", + # Computational Domain Parameters + # For these computations, the cylinder is placed at the (0,0,0) + # domain origin. + # axial direction + "x_domain%beg": 0.0e00, + "x_domain%end": 6.0e-03, + # r direction + "y_domain%beg": 0.0e00, + "y_domain%end": 6.0e-03, + "cyl_coord": "F", + "m": 250, + "n": 250, + "p": 0, + "dt": 0.5e-5, + "t_step_start": 0, + "t_step_stop": 1000, # 3000 + "t_step_save": 10, # 10 + # Simulation Algorithm Parameters + # Only one patches are necessary, the air tube + "num_patches": 1, + # Use the 5 equation model + "model_eqns": 2, + "alt_soundspeed": "F", + # One fluids: air + "num_fluids": 1, + # time step + "mpp_lim": "F", + # Correct errors when computing speed of sound + "mixture_err": "T", + # Use TVD RK3 for time marching + "time_stepper": 3, + # Use WENO5 + "weno_order": 5, + "weno_eps": 1.0e-16, + "weno_Re_flux": "T", + "weno_avg": "T", + "avg_state": 2, + "mapped_weno": "T", + "null_weights": "F", + "mp_weno": "T", + "riemann_solver": 2, + "wave_speeds": 1, + # We use ghost-cell + "bc_x%beg": -3, + "bc_x%end": -3, + "bc_y%beg": -3, + "bc_y%end": -3, + # Set IB to True and add 1 patch + "ib": "T", + "num_ibs": 1, + "viscous": "T", + # Formatted Database Files Structure Parameters + "format": 1, + "precision": 2, + "prim_vars_wrt": "T", + "E_wrt": "T", + "parallel_io": "T", + # Patch: Constant Tube filled with air + # Specify the cylindrical air tube grid geometry + "patch_icpp(1)%geometry": 3, + "patch_icpp(1)%x_centroid": 3.0e-03, + # Uniform medium density, centroid is at the center of the domain + "patch_icpp(1)%y_centroid": 3.0e-03, + "patch_icpp(1)%length_x": 6.0e-03, + "patch_icpp(1)%length_y": 6.0e-03, + # Specify the patch primitive variables + "patch_icpp(1)%vel(1)": 0.05e00, + "patch_icpp(1)%vel(2)": 0.0e00, + "patch_icpp(1)%pres": 1.0e00, + "patch_icpp(1)%alpha_rho(1)": 1.0e00, + "patch_icpp(1)%alpha(1)": 1.0e00, + # Patch: Cylinder Immersed Boundary + "patch_ib(1)%geometry": 6, + "patch_ib(1)%x_centroid": 1.5e-03, + "patch_ib(1)%y_centroid": 3.0e-03, + "patch_ib(1)%length_x": 0.4e-03, + "patch_ib(1)%length_y": 0.2e-03, + "patch_ib(1)%slip": "F", + # Fluids Physical Parameters + "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) + "fluid_pp(1)%pi_inf": 0, + "fluid_pp(1)%Re(1)": 2500000, + } + ) +) diff --git a/src/common/m_compute_levelset.fpp b/src/common/m_compute_levelset.fpp index 5346eb1b8b..69ddda5fd5 100644 --- a/src/common/m_compute_levelset.fpp +++ b/src/common/m_compute_levelset.fpp @@ -384,7 +384,7 @@ contains quadratic_coeffs(2) = 2._wp * ((xy_local(1)*normal_vector(1)/(ellipse_coeffs(1)**2)) + (xy_local(2)*normal_vector(2)/(ellipse_coeffs(2)**2))) quadratic_coeffs(3) = (xy_local(1)/ellipse_coeffs(1))**2._wp + (xy_local(2)/ellipse_coeffs(2))**2._wp - 1._wp - ! compute the levelset with the quadratic equation + ! compute the levelset with the quadratic equation [ -B + sqrt(B^2 - 4AC) ] / 2A levelset%sf(i, j, 0, ib_patch_id) = -0.5_wp * (-quadratic_coeffs(2) + sqrt(quadratic_coeffs(2)**2._wp - 4._wp * quadratic_coeffs(1)*quadratic_coeffs(3))) / quadratic_coeffs(1) end if end do From 693354f04564e15ed3855d5dbbbe7e9390bcd1f1 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Wed, 17 Dec 2025 16:58:58 -0500 Subject: [PATCH 04/34] added viscous stress tensor calculation --- src/simulation/m_ibm.fpp | 12 ++++-- src/simulation/m_rhs.fpp | 4 +- src/simulation/m_time_steppers.fpp | 2 +- src/simulation/m_viscous.fpp | 64 ++++++++++++++++++++++++++++-- 4 files changed, 73 insertions(+), 9 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 048032b9ae..986fa5029e 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -997,7 +997,7 @@ contains ! compute the surface integrals of the IB via a volume integraion method described in ! "A coupled IBM/Euler-Lagrange framework for simulating shock-induced particle size segregation" ! by Archana Sridhar and Jesse Capecelatro - subroutine s_compute_ib_forces(pressure) + subroutine s_compute_ib_forces(pressure, velocities, dynamic_viscosity, bulk_viscosity) ! real(wp), dimension(idwbuff(1)%beg:idwbuff(1)%end, & ! idwbuff(2)%beg:idwbuff(2)%end, & @@ -1006,14 +1006,14 @@ contains integer :: i, j, k, l, ib_idx real(wp), dimension(num_ibs, 3) :: forces, torques + real(wp), dimension(1:3, 1:3) :: viscous_stress_tensor real(wp), dimension(1:3) :: pressure_divergence, radial_vector, local_torque_contribution real(wp) :: cell_volume, dx, dy, dz forces = 0._wp torques = 0._wp - ! TODO :: This is currently only valid inviscid, and needs to be extended to add viscocity - $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,pressure_divergence,cell_volume,local_torque_contribution, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib]', collapse=3) + $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,pressure_divergence,cell_volume,local_torque_contribution, viscous_stress_tensor, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib]', collapse=3) do i = 0, m do j = 0, n do k = 0, p @@ -1046,6 +1046,12 @@ contains ! Update the force values atomically to prevent race conditions call s_cross_product(radial_vector, pressure_divergence, local_torque_contribution) ! separate out to make atomics safe local_torque_contribution = local_torque_contribution*cell_volume + + ! get the viscous stress and add its contribution + if (viscous) then + s_compute_viscous_stress_tensor(viscous_stress_tensor, velocities, dynamic_viscosity, bulk_viscosity, i, j, k) + end if + do l = 1, 3 $:GPU_ATOMIC(atomic='update') forces(ib_idx, l) = forces(ib_idx, l) - (pressure_divergence(l)*cell_volume) diff --git a/src/simulation/m_rhs.fpp b/src/simulation/m_rhs.fpp index 47fa433ca9..78570fc2ff 100644 --- a/src/simulation/m_rhs.fpp +++ b/src/simulation/m_rhs.fpp @@ -1635,14 +1635,14 @@ contains if (cyl_coord .and. ((bc_y%beg == -2) .or. (bc_y%beg == -14))) then if (viscous) then if (p > 0) then - call s_compute_viscous_stress_tensor(q_prim_vf, & + call s_compute_viscous_stress_cylindrical_boundary(q_prim_vf, & dq_prim_dx_vf(mom_idx%beg:mom_idx%end), & dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & dq_prim_dz_vf(mom_idx%beg:mom_idx%end), & tau_Re_vf, & idwbuff(1), idwbuff(2), idwbuff(3)) else - call s_compute_viscous_stress_tensor(q_prim_vf, & + call s_compute_viscous_stress_cylindrical_boundary(q_prim_vf, & dq_prim_dx_vf(mom_idx%beg:mom_idx%end), & dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & diff --git a/src/simulation/m_time_steppers.fpp b/src/simulation/m_time_steppers.fpp index f17689d6bc..cfd8241395 100644 --- a/src/simulation/m_time_steppers.fpp +++ b/src/simulation/m_time_steppers.fpp @@ -627,7 +627,7 @@ contains if (patch_ib(i)%moving_ibm == 2) then ! if we are using two-way coupling, apply force and torque ! compute the force and torque on the IB from the fluid - call s_compute_ib_forces(q_prim_vf(E_idx)) + call s_compute_ib_forces(q_prim_vf(E_idx), q_prim_vf(momxb:momxb+2)%sf) ! update the velocity from the force value patch_ib(i)%vel = patch_ib(i)%vel + rk_coef(s, 3)*dt*(patch_ib(i)%force/patch_ib(i)%mass)/rk_coef(s, 4) diff --git a/src/simulation/m_viscous.fpp b/src/simulation/m_viscous.fpp index 1b01e09404..50c3b073e2 100644 --- a/src/simulation/m_viscous.fpp +++ b/src/simulation/m_viscous.fpp @@ -21,7 +21,7 @@ module m_viscous use m_finite_differences private; public s_get_viscous, & - s_compute_viscous_stress_tensor, & + s_compute_viscous_stress_cylindrical_boundary, & s_initialize_viscous_module, & s_reconstruct_cell_boundary_values_visc_deriv, & s_finalize_viscous_module @@ -60,7 +60,7 @@ contains ! @param grad_x_vf Cell-average primitive variable derivatives, x-dir ! @param grad_y_vf Cell-average primitive variable derivatives, y-dir ! @param grad_z_vf Cell-average primitive variable derivatives, z-dir - subroutine s_compute_viscous_stress_tensor(q_prim_vf, grad_x_vf, grad_y_vf, grad_z_vf, & + subroutine s_compute_viscous_stress_cylindrical_boundary(q_prim_vf, grad_x_vf, grad_y_vf, grad_z_vf, & tau_Re_vf, & ix, iy, iz) @@ -518,7 +518,7 @@ contains $:END_GPU_PARALLEL_LOOP() end if #:endif - end subroutine s_compute_viscous_stress_tensor + end subroutine s_compute_viscous_stress_cylindrical_boundary !> Computes viscous terms !! @param q_cons_vf Cell-averaged conservative variables @@ -1511,6 +1511,64 @@ contains end subroutine s_compute_fd_gradient + ! computes the viscous stress tensor at a particule i, j, k element + subroutine s_compute_viscous_stress_tensor(viscous_stress_tensor, velocities, dynamic_viscosity, bulk_viscosity, i, j, k) + $:GPU_ROUTINE(parallelism='[seq]') + + real(wp), dimension(1:3, 1:3), intent(inout) :: viscous_stress_tensor + type(scalar_field), dimension(1:3), intent(in) :: velocities + real(wp), intent(in) :: dynamic_viscosity, bulk_viscosity + integer, intent(in) :: i, j, k + + real(wp), dimension(1:3, 1:3) :: velocity_gradient_tensor, shear_strain_tensor + real(wp), dimension(1:3) :: dx + real(wp) :: divergence + integer :: l, q ! iterators + + ! zero the viscous stress, collection of velocity diriviatives, and spacial finite differences + viscous_stress_tensor = 0._wp + shear_strain_tensor = 0._wp + velocity_gradient_tensor = 0._wp + dx = 0._wp + + ! get the change in x used in the finite difference equaiont + dx(1) = 0.5_wp * (x_cc(i+1) - x_cc(i-1)) + dx(2) = 0.5_wp * (y_cc(j+1) - y_cc(j-1)) + if (num_dims == 3) then + dx(3) = 0.5_wp * (z_cc(k+1) - z_cc(k-1)) + end if + + ! compute the velocity gradient tensor + do l = 1:num_dims + velocity_gradient_tensor(l,1) = (velocities(l)%sf(i+1, j, k) - velocities(l)%sf(i-1, j, k)) / (2._wp * dx(1)) + velocity_gradient_tensor(l,2) = (velocities(l)%sf(i, j+1, k) - velocities(l)%sf(i, j-1, k)) / (2._wp * dx(2)) + if (num_dims == 3) then + velocity_gradient_tensor(l,3) = (velocities(l)%sf(i, j, k+1) - velocities(l)%sf(i, j, k-1)) / (2._wp * dx(3)) + end if + end do + + ! compute divergence + divergence = velocity_gradient_tensor(1, 1) + velocity_gradient_tensor(2, 2) + velocity_gradient_tensor(3, 3) + + ! set up the shear stress tensor + do l = 1:num_dims + do q = 1:num_dims + shear_strain_tensor(l, q) = 0.5_wp * (velocity_gradient_tensor(l,q) + velocity_gradient_tensor(q,l)) + end do + end do + + ! populate the viscous_stress_tensor + do l = 1num_dims + do q = 1:num_dims + viscous_stress_tensor(l, q) = shear_strain_tensor(l, q)*dynamic_viscosity*2._wp + if (l == q) then + viscous_stress_tensor(l, q) = viscous_stress_tensor(l, q) + divergence * bulk_viscosity + end if + end do + end do + + end subroutine s_compute_viscous_stress_tensor + impure subroutine s_finalize_viscous_module() @:DEALLOCATE(Res_viscous) From 31c9d1a5b754654747fdfbdca43303b3a114ec1e Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Thu, 18 Dec 2025 15:28:51 -0500 Subject: [PATCH 05/34] Finally added the compute from the viscous stress --- src/simulation/m_ibm.fpp | 77 +++++++++++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 17 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 986fa5029e..9f43f44410 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1003,17 +1003,19 @@ contains ! idwbuff(2)%beg:idwbuff(2)%end, & ! idwbuff(3)%beg:idwbuff(3)%end), intent(in) :: pressure type(scalar_field), intent(in) :: pressure + type(scalar_field), dimension(1:3), intent(in) :: velocities + real(wp), intent(in) :: dynamic_viscosity, bulk_viscosity - integer :: i, j, k, l, ib_idx + integer :: i, j, k, l, q, ib_idx real(wp), dimension(num_ibs, 3) :: forces, torques - real(wp), dimension(1:3, 1:3) :: viscous_stress_tensor - real(wp), dimension(1:3) :: pressure_divergence, radial_vector, local_torque_contribution + real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations + real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution real(wp) :: cell_volume, dx, dy, dz forces = 0._wp torques = 0._wp - $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,pressure_divergence,cell_volume,local_torque_contribution, viscous_stress_tensor, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib]', collapse=3) + $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,velocities,dynamic_viscosity,bulk_viscosity]', collapse=3) do i = 0, m do j = 0, n do k = 0, p @@ -1029,34 +1031,68 @@ contains dx = x_cc(i + 1) - x_cc(i) dy = y_cc(j + 1) - y_cc(j) - ! use a finite difference to compute the 2D components of the gradient of the pressure and cell volume - pressure_divergence(1) = (pressure%sf(i + 1, j, k) - pressure%sf(i - 1, j, k))/(2._wp*dx) - pressure_divergence(2) = (pressure%sf(i, j + 1, k) - pressure%sf(i, j - 1, k))/(2._wp*dy) + ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume + local_force_contribution(1) = (pressure%sf(i + 1, j, k) - pressure%sf(i - 1, j, k))/(2._wp*dx) + local_force_contribution(2) = (pressure%sf(i, j + 1, k) - pressure%sf(i, j - 1, k))/(2._wp*dy) cell_volume = dx*dy - - ! add the 3D component, if we are working in 3 dimensions + ! add the 3D component of the pressure gradient, if we are working in 3 dimensions if (num_dims == 3) then dz = z_cc(k + 1) - z_cc(k) - pressure_divergence(3) = (pressure%sf(i, j, k + 1) - pressure%sf(i, j, k - 1))/(2._wp*dz) + local_force_contribution(3) = (pressure%sf(i, j, k + 1) - pressure%sf(i, j, k - 1))/(2._wp*dz) cell_volume = cell_volume*dz else - pressure_divergence(3) = 0._wp + local_force_contribution(3) = 0._wp end if ! Update the force values atomically to prevent race conditions - call s_cross_product(radial_vector, pressure_divergence, local_torque_contribution) ! separate out to make atomics safe - local_torque_contribution = local_torque_contribution*cell_volume + call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution) - ! get the viscous stress and add its contribution + ! get the viscous stress and add its contribution if that is considered + ! TODO :: This is really bad code if (viscous) then - s_compute_viscous_stress_tensor(viscous_stress_tensor, velocities, dynamic_viscosity, bulk_viscosity, i, j, k) + ! get the linear force component first + call s_compute_viscous_stress_tensor(viscous_stress_div_1, velocities, dynamic_viscosity, bulk_viscosity, i-1, j, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, velocities, dynamic_viscosity, bulk_viscosity, i+1, j, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force + do l = 1, 3 + ! take the cross products for the torque componenet + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross products + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque + + call s_compute_viscous_stress_tensor(viscous_stress_div_1, velocities, dynamic_viscosity, bulk_viscosity, i, j-1, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, velocities, dynamic_viscosity, bulk_viscosity, i, j+1, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div) / (2._wp * dy) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) + do l = 1, 3 + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) + + if (dum_dims == 3) then + call s_compute_viscous_stress_tensor(viscous_stress_div_1, velocities, dynamic_viscosity, bulk_viscosity, i, j, k-1) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, velocities, dynamic_viscosity, bulk_viscosity, i, j, k+1) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) + do l = 1, 3 + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) + end if end if do l = 1, 3 $:GPU_ATOMIC(atomic='update') - forces(ib_idx, l) = forces(ib_idx, l) - (pressure_divergence(l)*cell_volume) + forces(ib_idx, l) = forces(ib_idx, l) - (local_force_contribution(l)*cell_volume) $:GPU_ATOMIC(atomic='update') - torques(ib_idx, l) = torques(ib_idx, l) - local_torque_contribution(l) + torques(ib_idx, l) = torques(ib_idx, l) - local_torque_contribution(l)*cell_volume end do end if end if @@ -1069,6 +1105,13 @@ contains call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3) call s_mpi_allreduce_vectors_sum(torques, torques, num_ibs, 3) + ! consider gravity after reducing to avoid double counting + if (body_forces) then + do i = 1, num_ibs + forces(i, 2) = forces(i, 2) - 9.8*patch_ib(ib_idx)%mass ! -9.8 m/s/s acceleration in the y direction + end do + end if + ! apply the summed forces do i = 1, num_ibs patch_ib(i)%force(:) = forces(i, :) From 402bfe2a939d52085b0e9ba2ac0429c420c8ef19 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Thu, 18 Dec 2025 15:35:22 -0500 Subject: [PATCH 06/34] Added body forces --- src/simulation/m_ibm.fpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 9f43f44410..406f4eac0c 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1105,12 +1105,19 @@ contains call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3) call s_mpi_allreduce_vectors_sum(torques, torques, num_ibs, 3) - ! consider gravity after reducing to avoid double counting - if (body_forces) then - do i = 1, num_ibs - forces(i, 2) = forces(i, 2) - 9.8*patch_ib(ib_idx)%mass ! -9.8 m/s/s acceleration in the y direction - end do - end if + ! consider body forces after reducing to avoid double counting + + do i = 1, num_ibs + if (bf_x) then + forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(ib_idx)%mass + end if + if (bf_y) then + forces(i, 2) = forces(i, 3) + accel_bf(2)*patch_ib(ib_idx)%mass + end if + if (bf_z) then + forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(ib_idx)%mass + end if + end do ! apply the summed forces do i = 1, num_ibs From 82ce8beb447718f4c4bcbde619c144b815e5c5e2 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Thu, 18 Dec 2025 16:08:09 -0500 Subject: [PATCH 07/34] compiles --- src/simulation/m_ibm.fpp | 29 +++++++++++++------------- src/simulation/m_time_steppers.fpp | 2 +- src/simulation/m_viscous.fpp | 33 +++++++++++++++--------------- 3 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 406f4eac0c..e92575be25 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -26,6 +26,8 @@ module m_ibm use m_ib_patches + use m_viscous + implicit none private :: s_compute_image_points, & @@ -997,13 +999,12 @@ contains ! compute the surface integrals of the IB via a volume integraion method described in ! "A coupled IBM/Euler-Lagrange framework for simulating shock-induced particle size segregation" ! by Archana Sridhar and Jesse Capecelatro - subroutine s_compute_ib_forces(pressure, velocities, dynamic_viscosity, bulk_viscosity) + subroutine s_compute_ib_forces(q_prim_vf, dynamic_viscosity, bulk_viscosity) ! real(wp), dimension(idwbuff(1)%beg:idwbuff(1)%end, & ! idwbuff(2)%beg:idwbuff(2)%end, & ! idwbuff(3)%beg:idwbuff(3)%end), intent(in) :: pressure - type(scalar_field), intent(in) :: pressure - type(scalar_field), dimension(1:3), intent(in) :: velocities + type(scalar_field), dimension(1:sys_size), intent(in) :: q_prim_vf real(wp), intent(in) :: dynamic_viscosity, bulk_viscosity integer :: i, j, k, l, q, ib_idx @@ -1015,7 +1016,7 @@ contains forces = 0._wp torques = 0._wp - $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,velocities,dynamic_viscosity,bulk_viscosity]', collapse=3) + $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) do i = 0, m do j = 0, n do k = 0, p @@ -1032,13 +1033,13 @@ contains dy = y_cc(j + 1) - y_cc(j) ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume - local_force_contribution(1) = (pressure%sf(i + 1, j, k) - pressure%sf(i - 1, j, k))/(2._wp*dx) - local_force_contribution(2) = (pressure%sf(i, j + 1, k) - pressure%sf(i, j - 1, k))/(2._wp*dy) + local_force_contribution(1) = (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) + local_force_contribution(2) = (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) cell_volume = dx*dy ! add the 3D component of the pressure gradient, if we are working in 3 dimensions if (num_dims == 3) then dz = z_cc(k + 1) - z_cc(k) - local_force_contribution(3) = (pressure%sf(i, j, k + 1) - pressure%sf(i, j, k - 1))/(2._wp*dz) + local_force_contribution(3) = (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) cell_volume = cell_volume*dz else local_force_contribution(3) = 0._wp @@ -1051,8 +1052,8 @@ contains ! TODO :: This is really bad code if (viscous) then ! get the linear force component first - call s_compute_viscous_stress_tensor(viscous_stress_div_1, velocities, dynamic_viscosity, bulk_viscosity, i-1, j, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, velocities, dynamic_viscosity, bulk_viscosity, i+1, j, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i-1, j, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, bulk_viscosity, i+1, j, k) viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force do l = 1, 3 @@ -1063,8 +1064,8 @@ contains viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross products local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque - call s_compute_viscous_stress_tensor(viscous_stress_div_1, velocities, dynamic_viscosity, bulk_viscosity, i, j-1, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, velocities, dynamic_viscosity, bulk_viscosity, i, j+1, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j-1, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j+1, k) viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div) / (2._wp * dy) local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) do l = 1, 3 @@ -1074,9 +1075,9 @@ contains viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) - if (dum_dims == 3) then - call s_compute_viscous_stress_tensor(viscous_stress_div_1, velocities, dynamic_viscosity, bulk_viscosity, i, j, k-1) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, velocities, dynamic_viscosity, bulk_viscosity, i, j, k+1) + if (num_dims == 3) then + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j, k-1) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j, k+1) viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) do l = 1, 3 diff --git a/src/simulation/m_time_steppers.fpp b/src/simulation/m_time_steppers.fpp index cfd8241395..959629cfd0 100644 --- a/src/simulation/m_time_steppers.fpp +++ b/src/simulation/m_time_steppers.fpp @@ -627,7 +627,7 @@ contains if (patch_ib(i)%moving_ibm == 2) then ! if we are using two-way coupling, apply force and torque ! compute the force and torque on the IB from the fluid - call s_compute_ib_forces(q_prim_vf(E_idx), q_prim_vf(momxb:momxb+2)%sf) + call s_compute_ib_forces(q_prim_vf, fluid_pp(1)%Re(1), fluid_pp(1)%Re(2)) ! update the velocity from the force value patch_ib(i)%vel = patch_ib(i)%vel + rk_coef(s, 3)*dt*(patch_ib(i)%force/patch_ib(i)%mass)/rk_coef(s, 4) diff --git a/src/simulation/m_viscous.fpp b/src/simulation/m_viscous.fpp index 50c3b073e2..41d7692229 100644 --- a/src/simulation/m_viscous.fpp +++ b/src/simulation/m_viscous.fpp @@ -24,7 +24,8 @@ module m_viscous s_compute_viscous_stress_cylindrical_boundary, & s_initialize_viscous_module, & s_reconstruct_cell_boundary_values_visc_deriv, & - s_finalize_viscous_module + s_finalize_viscous_module, & + s_compute_viscous_stress_tensor type(int_bounds_info) :: iv type(int_bounds_info) :: is1_viscous, is2_viscous, is3_viscous @@ -1512,11 +1513,11 @@ contains end subroutine s_compute_fd_gradient ! computes the viscous stress tensor at a particule i, j, k element - subroutine s_compute_viscous_stress_tensor(viscous_stress_tensor, velocities, dynamic_viscosity, bulk_viscosity, i, j, k) + subroutine s_compute_viscous_stress_tensor(viscous_stress_tensor, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j, k) $:GPU_ROUTINE(parallelism='[seq]') real(wp), dimension(1:3, 1:3), intent(inout) :: viscous_stress_tensor - type(scalar_field), dimension(1:3), intent(in) :: velocities + type(scalar_field), dimension(1:sys_size), intent(in) :: q_prim_vf real(wp), intent(in) :: dynamic_viscosity, bulk_viscosity integer, intent(in) :: i, j, k @@ -1539,11 +1540,11 @@ contains end if ! compute the velocity gradient tensor - do l = 1:num_dims - velocity_gradient_tensor(l,1) = (velocities(l)%sf(i+1, j, k) - velocities(l)%sf(i-1, j, k)) / (2._wp * dx(1)) - velocity_gradient_tensor(l,2) = (velocities(l)%sf(i, j+1, k) - velocities(l)%sf(i, j-1, k)) / (2._wp * dx(2)) + do l = 1, num_dims + velocity_gradient_tensor(l,1) = (q_prim_vf(momxb+l)%sf(i+1, j, k) - q_prim_vf(momxb+l)%sf(i-1, j, k)) / (2._wp * dx(1)) + velocity_gradient_tensor(l,2) = (q_prim_vf(momxb+l)%sf(i, j+1, k) - q_prim_vf(momxb+l)%sf(i, j-1, k)) / (2._wp * dx(2)) if (num_dims == 3) then - velocity_gradient_tensor(l,3) = (velocities(l)%sf(i, j, k+1) - velocities(l)%sf(i, j, k-1)) / (2._wp * dx(3)) + velocity_gradient_tensor(l,3) = (q_prim_vf(momxb+l)%sf(i, j, k+1) - q_prim_vf(momxb+l)%sf(i, j, k-1)) / (2._wp * dx(3)) end if end do @@ -1551,20 +1552,20 @@ contains divergence = velocity_gradient_tensor(1, 1) + velocity_gradient_tensor(2, 2) + velocity_gradient_tensor(3, 3) ! set up the shear stress tensor - do l = 1:num_dims - do q = 1:num_dims + do l = 1, num_dims + do q = 1, num_dims shear_strain_tensor(l, q) = 0.5_wp * (velocity_gradient_tensor(l,q) + velocity_gradient_tensor(q,l)) end do end do ! populate the viscous_stress_tensor - do l = 1num_dims - do q = 1:num_dims - viscous_stress_tensor(l, q) = shear_strain_tensor(l, q)*dynamic_viscosity*2._wp - if (l == q) then - viscous_stress_tensor(l, q) = viscous_stress_tensor(l, q) + divergence * bulk_viscosity - end if - end do + do l = 1, num_dims + do q = 1, num_dims + viscous_stress_tensor(l, q) = shear_strain_tensor(l, q)*dynamic_viscosity*2._wp + if (l == q) then + viscous_stress_tensor(l, q) = viscous_stress_tensor(l, q) + divergence * bulk_viscosity + end if + end do end do end subroutine s_compute_viscous_stress_tensor From eaa9e36c53cdc9daa83f900ce5979fc9f34ee650 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Thu, 18 Dec 2025 17:12:11 -0500 Subject: [PATCH 08/34] Getting errors with viscosity turned on. Going to take a break for the day. --- src/simulation/m_ibm.fpp | 6 ++++-- src/simulation/m_viscous.fpp | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index e92575be25..adde9862a0 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1016,6 +1016,7 @@ contains forces = 0._wp torques = 0._wp + ! TODO :: Change this to a loop over ghost points $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) do i = 0, m do j = 0, n @@ -1050,7 +1051,8 @@ contains ! get the viscous stress and add its contribution if that is considered ! TODO :: This is really bad code - if (viscous) then + ! if (viscous) then + if (.false.) then ! get the linear force component first call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i-1, j, k) call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, bulk_viscosity, i+1, j, k) @@ -1061,7 +1063,7 @@ contains call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross products + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j-1, k) diff --git a/src/simulation/m_viscous.fpp b/src/simulation/m_viscous.fpp index 41d7692229..fdb201ee19 100644 --- a/src/simulation/m_viscous.fpp +++ b/src/simulation/m_viscous.fpp @@ -1541,10 +1541,10 @@ contains ! compute the velocity gradient tensor do l = 1, num_dims - velocity_gradient_tensor(l,1) = (q_prim_vf(momxb+l)%sf(i+1, j, k) - q_prim_vf(momxb+l)%sf(i-1, j, k)) / (2._wp * dx(1)) - velocity_gradient_tensor(l,2) = (q_prim_vf(momxb+l)%sf(i, j+1, k) - q_prim_vf(momxb+l)%sf(i, j-1, k)) / (2._wp * dx(2)) + velocity_gradient_tensor(l,1) = (q_prim_vf(momxb+l-1)%sf(i+1, j, k) - q_prim_vf(momxb+l-1)%sf(i-1, j, k)) / (2._wp * dx(1)) + velocity_gradient_tensor(l,2) = (q_prim_vf(momxb+l-1)%sf(i, j+1, k) - q_prim_vf(momxb+l-1)%sf(i, j-1, k)) / (2._wp * dx(2)) if (num_dims == 3) then - velocity_gradient_tensor(l,3) = (q_prim_vf(momxb+l)%sf(i, j, k+1) - q_prim_vf(momxb+l)%sf(i, j, k-1)) / (2._wp * dx(3)) + velocity_gradient_tensor(l,3) = (q_prim_vf(momxb+l-1)%sf(i, j, k+1) - q_prim_vf(momxb+l-1)%sf(i, j, k-1)) / (2._wp * dx(3)) end if end do From 66aa089b2921eecc4690d21f0ba73fc38bba81a6 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 19 Dec 2025 09:18:19 -0500 Subject: [PATCH 09/34] new viscous example --- examples/2D_mibm_falling_sediment/case.py | 101 ++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 examples/2D_mibm_falling_sediment/case.py diff --git a/examples/2D_mibm_falling_sediment/case.py b/examples/2D_mibm_falling_sediment/case.py new file mode 100644 index 0000000000..f61dd9293d --- /dev/null +++ b/examples/2D_mibm_falling_sediment/case.py @@ -0,0 +1,101 @@ +import json +import math + +Mu = 1.84e-05 +gam_a = 1.4 + +# Configuring case dictionary +print( + json.dumps( + { + # Logistics + "run_time_info": "T", + # Computational Domain Parameters + # For these computations, the cylinder is placed at the (0,0,0) + # domain origin. + # axial direction + "x_domain%beg": 0.0e00, + "x_domain%end": 6.0e-03, + # r direction + "y_domain%beg": 0.0e00, + "y_domain%end": 6.0e-03, + "cyl_coord": "F", + "m": 250, + "n": 250, + "p": 0, + "dt": 0.5e-5, + "t_step_start": 0, + "t_step_stop": 5000, # 3000 + "t_step_save": 50, # 10 + # Simulation Algorithm Parameters + # Only one patches are necessary, the air tube + "num_patches": 1, + # Use the 5 equation model + "model_eqns": 2, + "alt_soundspeed": "F", + # One fluids: air + "num_fluids": 1, + # time step + "mpp_lim": "F", + # Correct errors when computing speed of sound + "mixture_err": "T", + # Use TVD RK3 for time marching + "time_stepper": 3, + # Use WENO5 + "weno_order": 5, + "weno_eps": 1.0e-16, + "weno_Re_flux": "T", + "weno_avg": "T", + "avg_state": 2, + "mapped_weno": "T", + "null_weights": "F", + "mp_weno": "T", + "riemann_solver": 2, + "wave_speeds": 1, + # We use ghost-cell + "bc_x%beg": -3, + "bc_x%end": -3, + "bc_y%beg": -3, + "bc_y%end": -3, + # Set IB to True and add 1 patch + "ib": "T", + "num_ibs": 1, + "viscous": "T", + # Formatted Database Files Structure Parameters + "format": 1, + "precision": 2, + "prim_vars_wrt": "T", + "E_wrt": "T", + "parallel_io": "T", + # Patch: Constant Tube filled with air + # Specify the cylindrical air tube grid geometry + "patch_icpp(1)%geometry": 3, + "patch_icpp(1)%x_centroid": 3.0e-03, + # Uniform medium density, centroid is at the center of the domain + "patch_icpp(1)%y_centroid": 3.0e-03, + "patch_icpp(1)%length_x": 6.0e-03, + "patch_icpp(1)%length_y": 6.0e-03, + # Specify the patch primitive variables + "patch_icpp(1)%vel(1)": 0.00e00, + "patch_icpp(1)%vel(2)": 0.0e00, + "patch_icpp(1)%pres": 1.0e00, + "patch_icpp(1)%alpha_rho(1)": 1.0e00, + "patch_icpp(1)%alpha(1)": 1.0e00, + # Patch: Cylinder Immersed Boundary + "patch_ib(1)%geometry": 6, + "patch_ib(1)%moving_ibm": 2, + "patch_ib(1)%x_centroid": 1.5e-03, + "patch_ib(1)%y_centroid": 3.0e-03, + "patch_ib(1)%length_x": 0.4e-03, + "patch_ib(1)%length_y": 0.2e-03, + "patch_ib(1)%vel(2)": -0.05e00, + "patch_ib(1)%angles(3)": -math.pi / 4., + "patch_ib(1)%mass": 1.0e-6, + "patch_ib(1)%slip": "F", + # Fluids Physical Parameters + "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) + "fluid_pp(1)%pi_inf": 0, + "fluid_pp(1)%Re(1)": 2500000, + } + ) +) From a6c85bb992c64e2d16d003bdf5d005684e3252e4 Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Fri, 19 Dec 2025 11:06:52 -0500 Subject: [PATCH 10/34] Looks like it is approximately working --- src/simulation/m_ibm.fpp | 182 +++++++++++++++-------------- src/simulation/m_time_steppers.fpp | 2 +- src/simulation/m_viscous.fpp | 28 +++-- 3 files changed, 114 insertions(+), 98 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index adde9862a0..19a91b55c3 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -199,12 +199,23 @@ contains type(ghost_point) :: innerp ! set the Moving IBM interior Pressure Values - $:GPU_PARALLEL_LOOP(private='[i,j,k]', copyin='[E_idx]', collapse=3) + $:GPU_PARALLEL_LOOP(private='[i,j,k,patch_id,rho]', copyin='[E_idx,momxb]', collapse=3) do l = 0, p do k = 0, n do j = 0, m - if (ib_markers%sf(j, k, l) /= 0) then + patch_id = ib_markers%sf(j, k, l) + if (patch_id /= 0) then q_prim_vf(E_idx)%sf(j, k, l) = 1._wp + if (patch_ib(patch_id)%moving_ibm > 0._wp) then + rho = 0._wp + do i = 1, num_fluids + rho = rho + q_prim_vf(contxb+i-1)%sf(j, k, l) + end do + + do i = 1, num_dims + q_cons_vf(momxb+i-1)%sf(j, k, l) = patch_ib(patch_id)%vel(i) * rho + end do + end if end if end do end do @@ -999,15 +1010,15 @@ contains ! compute the surface integrals of the IB via a volume integraion method described in ! "A coupled IBM/Euler-Lagrange framework for simulating shock-induced particle size segregation" ! by Archana Sridhar and Jesse Capecelatro - subroutine s_compute_ib_forces(q_prim_vf, dynamic_viscosity, bulk_viscosity) + subroutine s_compute_ib_forces(q_prim_vf, dynamic_viscosity) ! real(wp), dimension(idwbuff(1)%beg:idwbuff(1)%end, & ! idwbuff(2)%beg:idwbuff(2)%end, & ! idwbuff(3)%beg:idwbuff(3)%end), intent(in) :: pressure type(scalar_field), dimension(1:sys_size), intent(in) :: q_prim_vf - real(wp), intent(in) :: dynamic_viscosity, bulk_viscosity + real(wp), intent(in) :: dynamic_viscosity - integer :: i, j, k, l, q, ib_idx + integer :: gp_id, i, j, k, l, q, ib_idx real(wp), dimension(num_ibs, 3) :: forces, torques real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution @@ -1018,89 +1029,88 @@ contains ! TODO :: Change this to a loop over ghost points $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) - do i = 0, m - do j = 0, n - do k = 0, p - ib_idx = ib_markers%sf(i, j, k) - if (ib_idx /= 0) then ! only need to compute the gradient for cells inside a IB - if (patch_ib(ib_idx)%moving_ibm == 2) then ! make sure that this IB has 2-way coupling enabled - ! get the vector pointing to the grid cell from the IB centroid - if (num_dims == 3) then - radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid] - else - radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp] - end if - dx = x_cc(i + 1) - x_cc(i) - dy = y_cc(j + 1) - y_cc(j) - - ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume - local_force_contribution(1) = (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) - local_force_contribution(2) = (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) - cell_volume = dx*dy - ! add the 3D component of the pressure gradient, if we are working in 3 dimensions - if (num_dims == 3) then - dz = z_cc(k + 1) - z_cc(k) - local_force_contribution(3) = (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) - cell_volume = cell_volume*dz - else - local_force_contribution(3) = 0._wp - end if + do gp_id = 1, num_gps + i = ghost_points(gp_id)%loc(1) + j = ghost_points(gp_id)%loc(2) + k = ghost_points(gp_id)%loc(3) + ib_idx = ghost_points(gp_id)%ib_patch_id + if (ib_idx /= 0 .and. patch_ib(ib_idx)%moving_ibm == 2) then ! only need to compute the gradient for cells inside a IB + ! get the vector pointing to the grid cell from the IB centroid + if (num_dims == 3) then + radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid] + else + radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp] + end if + dx = x_cc(i + 1) - x_cc(i) + dy = y_cc(j + 1) - y_cc(j) + + ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume + local_force_contribution(1) = (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) + local_force_contribution(2) = (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) + cell_volume = dx*dy + ! add the 3D component of the pressure gradient, if we are working in 3 dimensions + if (num_dims == 3) then + dz = z_cc(k + 1) - z_cc(k) + local_force_contribution(3) = (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) + cell_volume = cell_volume*dz + else + local_force_contribution(3) = 0._wp + end if - ! Update the force values atomically to prevent race conditions - call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution) - - ! get the viscous stress and add its contribution if that is considered - ! TODO :: This is really bad code - ! if (viscous) then - if (.false.) then - ! get the linear force component first - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i-1, j, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, bulk_viscosity, i+1, j, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force - do l = 1, 3 - ! take the cross products for the torque componenet - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) - end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque - - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j-1, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j+1, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div) / (2._wp * dy) - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) - do l = 1, 3 - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) - end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) - - if (num_dims == 3) then - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j, k-1) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j, k+1) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) - do l = 1, 3 - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) - end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) - end if - end if + ! Update the force values atomically to prevent race conditions + call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution) + + ! get the viscous stress and add its contribution if that is considered + ! TODO :: This is really bad code + ! if (viscous) then + if (viscous) then + ! get the linear force component first + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i-1, j, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i+1, j, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force + do l = 1, 3 + ! take the cross products for the torque componenet + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do - do l = 1, 3 - $:GPU_ATOMIC(atomic='update') - forces(ib_idx, l) = forces(ib_idx, l) - (local_force_contribution(l)*cell_volume) - $:GPU_ATOMIC(atomic='update') - torques(ib_idx, l) = torques(ib_idx, l) - local_torque_contribution(l)*cell_volume - end do - end if + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque + + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j-1, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j+1, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) + do l = 1, 3 + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do + + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3) + + if (num_dims == 3) then + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k-1) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k+1) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) + do l = 1, 3 + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3) end if + end if + + do l = 1, 3 + $:GPU_ATOMIC(atomic='update') + forces(ib_idx, l) = forces(ib_idx, l) - (local_force_contribution(l)*cell_volume) + $:GPU_ATOMIC(atomic='update') + torques(ib_idx, l) = torques(ib_idx, l) - local_torque_contribution(l)*cell_volume end do - end do + end if end do $:END_GPU_PARALLEL_LOOP() @@ -1160,9 +1170,11 @@ contains ! if the IB is in 2D or a 3D sphere, we can compute this exactly if (patch_ib(ib_marker)%geometry == 2) then ! circle - patch_ib(ib_marker)%moment = 0.5*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 + patch_ib(ib_marker)%moment = 0.5_wp * patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 elseif (patch_ib(ib_marker)%geometry == 3) then ! rectangle patch_ib(ib_marker)%moment = patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2)/6._wp + elseif (patch_ib(ib_marker)%geometry ==63) then ! ellipse + patch_ib(ib_marker)%moment = 0.25_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2) elseif (patch_ib(ib_marker)%geometry == 8) then ! sphere patch_ib(ib_marker)%moment = 0.4*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 diff --git a/src/simulation/m_time_steppers.fpp b/src/simulation/m_time_steppers.fpp index 959629cfd0..1a6b1fd18c 100644 --- a/src/simulation/m_time_steppers.fpp +++ b/src/simulation/m_time_steppers.fpp @@ -627,7 +627,7 @@ contains if (patch_ib(i)%moving_ibm == 2) then ! if we are using two-way coupling, apply force and torque ! compute the force and torque on the IB from the fluid - call s_compute_ib_forces(q_prim_vf, fluid_pp(1)%Re(1), fluid_pp(1)%Re(2)) + call s_compute_ib_forces(q_prim_vf, 1._wp / fluid_pp(1)%Re(1)) ! update the velocity from the force value patch_ib(i)%vel = patch_ib(i)%vel + rk_coef(s, 3)*dt*(patch_ib(i)%force/patch_ib(i)%mass)/rk_coef(s, 4) diff --git a/src/simulation/m_viscous.fpp b/src/simulation/m_viscous.fpp index fdb201ee19..855befec84 100644 --- a/src/simulation/m_viscous.fpp +++ b/src/simulation/m_viscous.fpp @@ -1513,22 +1513,21 @@ contains end subroutine s_compute_fd_gradient ! computes the viscous stress tensor at a particule i, j, k element - subroutine s_compute_viscous_stress_tensor(viscous_stress_tensor, q_prim_vf, dynamic_viscosity, bulk_viscosity, i, j, k) + subroutine s_compute_viscous_stress_tensor(viscous_stress_tensor, q_prim_vf, dynamic_viscosity, i, j, k) $:GPU_ROUTINE(parallelism='[seq]') real(wp), dimension(1:3, 1:3), intent(inout) :: viscous_stress_tensor type(scalar_field), dimension(1:sys_size), intent(in) :: q_prim_vf - real(wp), intent(in) :: dynamic_viscosity, bulk_viscosity + real(wp), intent(in) :: dynamic_viscosity integer, intent(in) :: i, j, k - real(wp), dimension(1:3, 1:3) :: velocity_gradient_tensor, shear_strain_tensor + real(wp), dimension(1:3, 1:3) :: velocity_gradient_tensor real(wp), dimension(1:3) :: dx real(wp) :: divergence integer :: l, q ! iterators ! zero the viscous stress, collection of velocity diriviatives, and spacial finite differences viscous_stress_tensor = 0._wp - shear_strain_tensor = 0._wp velocity_gradient_tensor = 0._wp dx = 0._wp @@ -1549,25 +1548,30 @@ contains end do ! compute divergence - divergence = velocity_gradient_tensor(1, 1) + velocity_gradient_tensor(2, 2) + velocity_gradient_tensor(3, 3) + divergence = 0._wp + do l = 1, num_dims + divergence = divergence + velocity_gradient_tensor(l, l) + end do ! set up the shear stress tensor do l = 1, num_dims do q = 1, num_dims - shear_strain_tensor(l, q) = 0.5_wp * (velocity_gradient_tensor(l,q) + velocity_gradient_tensor(q,l)) + viscous_stress_tensor(l, q) = dynamic_viscosity * (velocity_gradient_tensor(l,q) + velocity_gradient_tensor(q,l)) end do end do ! populate the viscous_stress_tensor do l = 1, num_dims - do q = 1, num_dims - viscous_stress_tensor(l, q) = shear_strain_tensor(l, q)*dynamic_viscosity*2._wp - if (l == q) then - viscous_stress_tensor(l, q) = viscous_stress_tensor(l, q) + divergence * bulk_viscosity - end if - end do + viscous_stress_tensor(l, l) = viscous_stress_tensor(l, l) - 2._wp * divergence * dynamic_viscosity / 3._wp end do + if (num_dims == 2) then + do l = 1, 3 + viscous_stress_tensor(3, l) = 0._wp + viscous_stress_tensor(l, 3) = 0._wp + end do + end if + end subroutine s_compute_viscous_stress_tensor impure subroutine s_finalize_viscous_module() From 989414794e778ebd5593f7339d18bcf2efd9fa54 Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Fri, 19 Dec 2025 15:40:56 -0500 Subject: [PATCH 11/34] Case file modifications --- examples/2D_mibm_falling_sediment/case.py | 45 ++++++++++++++--------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/examples/2D_mibm_falling_sediment/case.py b/examples/2D_mibm_falling_sediment/case.py index f61dd9293d..6726d6edd6 100644 --- a/examples/2D_mibm_falling_sediment/case.py +++ b/examples/2D_mibm_falling_sediment/case.py @@ -4,6 +4,11 @@ Mu = 1.84e-05 gam_a = 1.4 +total_time = 2.0 +num_time_steps = 500000 +num_saves = 200 + + # Configuring case dictionary print( json.dumps( @@ -20,13 +25,13 @@ "y_domain%beg": 0.0e00, "y_domain%end": 6.0e-03, "cyl_coord": "F", - "m": 250, - "n": 250, + "m": 200, + "n": 800, "p": 0, - "dt": 0.5e-5, + "dt": float(total_time / num_time_steps), "t_step_start": 0, - "t_step_stop": 5000, # 3000 - "t_step_save": 50, # 10 + "t_step_stop": int(num_time_steps), # 3000 + "t_step_save": int(num_time_steps / 200), # 10 # Simulation Algorithm Parameters # Only one patches are necessary, the air tube "num_patches": 1, @@ -70,11 +75,11 @@ # Patch: Constant Tube filled with air # Specify the cylindrical air tube grid geometry "patch_icpp(1)%geometry": 3, - "patch_icpp(1)%x_centroid": 3.0e-03, + "patch_icpp(1)%x_centroid": 0.2, # Uniform medium density, centroid is at the center of the domain - "patch_icpp(1)%y_centroid": 3.0e-03, - "patch_icpp(1)%length_x": 6.0e-03, - "patch_icpp(1)%length_y": 6.0e-03, + "patch_icpp(1)%y_centroid": 1.4, + "patch_icpp(1)%length_x": 0.4, + "patch_icpp(1)%length_y": 2.8, # Specify the patch primitive variables "patch_icpp(1)%vel(1)": 0.00e00, "patch_icpp(1)%vel(2)": 0.0e00, @@ -84,18 +89,24 @@ # Patch: Cylinder Immersed Boundary "patch_ib(1)%geometry": 6, "patch_ib(1)%moving_ibm": 2, - "patch_ib(1)%x_centroid": 1.5e-03, - "patch_ib(1)%y_centroid": 3.0e-03, - "patch_ib(1)%length_x": 0.4e-03, - "patch_ib(1)%length_y": 0.2e-03, - "patch_ib(1)%vel(2)": -0.05e00, - "patch_ib(1)%angles(3)": -math.pi / 4., - "patch_ib(1)%mass": 1.0e-6, + "patch_ib(1)%x_centroid": 0.2, + "patch_ib(1)%y_centroid": 2.4, + "patch_ib(1)%length_x": 0.1, + "patch_ib(1)%length_y": 0.05, + "patch_ib(1)%vel(2)": 0.00e00, + "patch_ib(1)%angles(3)": math.pi / 4., + "patch_ib(1)%mass": 1.1e-6, "patch_ib(1)%slip": "F", # Fluids Physical Parameters "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) "fluid_pp(1)%pi_inf": 0, - "fluid_pp(1)%Re(1)": 2500000, + "fluid_pp(1)%Re(1)": 1000000, + # Body Forces + "bf_y": "T", + "k_y": 0.0, + "w_y": 0.0, + "p_y": 0.0, + "g_y": -9.81, # gravity } ) ) From b949d6c554c63f45d4a3349fe5d8a6bda452ce0a Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 19 Dec 2025 20:36:15 -0500 Subject: [PATCH 12/34] Found a couple errors --- src/simulation/m_ibm.fpp | 163 +++++++++++++++++++-------------------- 1 file changed, 81 insertions(+), 82 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 19a91b55c3..91b3449299 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1027,108 +1027,107 @@ contains forces = 0._wp torques = 0._wp - ! TODO :: Change this to a loop over ghost points - $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) - do gp_id = 1, num_gps - i = ghost_points(gp_id)%loc(1) - j = ghost_points(gp_id)%loc(2) - k = ghost_points(gp_id)%loc(3) - ib_idx = ghost_points(gp_id)%ib_patch_id - if (ib_idx /= 0 .and. patch_ib(ib_idx)%moving_ibm == 2) then ! only need to compute the gradient for cells inside a IB - ! get the vector pointing to the grid cell from the IB centroid - if (num_dims == 3) then - radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid] - else - radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp] - end if - dx = x_cc(i + 1) - x_cc(i) - dy = y_cc(j + 1) - y_cc(j) - - ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume - local_force_contribution(1) = (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) - local_force_contribution(2) = (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) - cell_volume = dx*dy - ! add the 3D component of the pressure gradient, if we are working in 3 dimensions - if (num_dims == 3) then - dz = z_cc(k + 1) - z_cc(k) - local_force_contribution(3) = (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) - cell_volume = cell_volume*dz - else - local_force_contribution(3) = 0._wp - end if - - ! Update the force values atomically to prevent race conditions - call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution) - - ! get the viscous stress and add its contribution if that is considered - ! TODO :: This is really bad code - ! if (viscous) then - if (viscous) then - ! get the linear force component first - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i-1, j, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i+1, j, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force - do l = 1, 3 - ! take the cross products for the torque componenet - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) - end do - - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque - - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j-1, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j+1, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) - do l = 1, 3 - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) - end do + if (num_gps > 0) then + $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) + do gp_id = 1, num_gps + i = ghost_points(gp_id)%loc(1) + j = ghost_points(gp_id)%loc(2) + k = ghost_points(gp_id)%loc(3) + ib_idx = ghost_points(gp_id)%ib_patch_id + if (ib_idx /= 0 .and. patch_ib(ib_idx)%moving_ibm == 2) then ! only need to compute the gradient for cells inside a IB + ! get the vector pointing to the grid cell from the IB centroid + if (num_dims == 3) then + radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid] + else + radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp] + end if + dx = x_cc(i + 1) - x_cc(i) + dy = y_cc(j + 1) - y_cc(j) + + ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume + local_force_contribution(1) = (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) + local_force_contribution(2) = (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) + cell_volume = dx*dy + ! add the 3D component of the pressure gradient, if we are working in 3 dimensions + if (num_dims == 3) then + dz = z_cc(k + 1) - z_cc(k) + local_force_contribution(3) = (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) + cell_volume = cell_volume*dz + else + local_force_contribution(3) = 0._wp + end if - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3) + ! Update the force values atomically to prevent race conditions + call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution) + + ! get the viscous stress and add its contribution if that is considered + ! TODO :: This is really bad code + if (viscous) then + ! get the linear force component first + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i-1, j, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i+1, j, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force + do l = 1, 3 + ! take the cross products for the torque componenet + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do - if (num_dims == 3) then - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k-1) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k+1) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque + + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j-1, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j+1, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) do l = 1, 3 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3) + + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3) + + if (num_dims == 3) then + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k-1) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k+1) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) + do l = 1, 3 + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3) + end if end if - end if - do l = 1, 3 - $:GPU_ATOMIC(atomic='update') - forces(ib_idx, l) = forces(ib_idx, l) - (local_force_contribution(l)*cell_volume) - $:GPU_ATOMIC(atomic='update') - torques(ib_idx, l) = torques(ib_idx, l) - local_torque_contribution(l)*cell_volume - end do - end if - end do - $:END_GPU_PARALLEL_LOOP() + do l = 1, 3 + $:GPU_ATOMIC(atomic='update') + forces(ib_idx, l) = forces(ib_idx, l) - (local_force_contribution(l)*cell_volume) + $:GPU_ATOMIC(atomic='update') + torques(ib_idx, l) = torques(ib_idx, l) - local_torque_contribution(l)*cell_volume + end do + end if + end do + $:END_GPU_PARALLEL_LOOP() + end if ! reduce the forces across all MPI ranks call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3) call s_mpi_allreduce_vectors_sum(torques, torques, num_ibs, 3) ! consider body forces after reducing to avoid double counting - do i = 1, num_ibs if (bf_x) then - forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(ib_idx)%mass + forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass end if if (bf_y) then - forces(i, 2) = forces(i, 3) + accel_bf(2)*patch_ib(ib_idx)%mass + forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass end if if (bf_z) then - forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(ib_idx)%mass + forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass end if end do From 02d45bd3b4d8359e9135835ccfca3fce8a2627df Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Sat, 20 Dec 2025 12:22:23 -0500 Subject: [PATCH 13/34] Updated case file --- examples/2D_mibm_falling_sediment/case.py | 27 +++++++++++------------ 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/examples/2D_mibm_falling_sediment/case.py b/examples/2D_mibm_falling_sediment/case.py index 6726d6edd6..25fd8837be 100644 --- a/examples/2D_mibm_falling_sediment/case.py +++ b/examples/2D_mibm_falling_sediment/case.py @@ -5,9 +5,10 @@ gam_a = 1.4 total_time = 2.0 -num_time_steps = 500000 +num_time_steps = 100000 +dt = float(total_time / num_time_steps) num_saves = 200 - +steps_per_save = int(num_time_steps / num_saves) # Configuring case dictionary print( @@ -18,20 +19,18 @@ # Computational Domain Parameters # For these computations, the cylinder is placed at the (0,0,0) # domain origin. - # axial direction - "x_domain%beg": 0.0e00, - "x_domain%end": 6.0e-03, - # r direction - "y_domain%beg": 0.0e00, - "y_domain%end": 6.0e-03, + "x_domain%beg": 0.0, + "x_domain%end": 0.4, + "y_domain%beg": 0.0, + "y_domain%end": 2.8, "cyl_coord": "F", - "m": 200, - "n": 800, + "m": 100, + "n": 700, "p": 0, - "dt": float(total_time / num_time_steps), + "dt": dt, "t_step_start": 0, - "t_step_stop": int(num_time_steps), # 3000 - "t_step_save": int(num_time_steps / 200), # 10 + "t_step_stop": num_time_steps, # 3000 + "t_step_save": steps_per_save, # 10 # Simulation Algorithm Parameters # Only one patches are necessary, the air tube "num_patches": 1, @@ -100,7 +99,7 @@ # Fluids Physical Parameters "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) "fluid_pp(1)%pi_inf": 0, - "fluid_pp(1)%Re(1)": 1000000, + "fluid_pp(1)%Re(1)": 100000, # Body Forces "bf_y": "T", "k_y": 0.0, From 61e33089912b95f7d001d7826eecd276c069fc87 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Mon, 22 Dec 2025 13:44:07 -0500 Subject: [PATCH 14/34] Fixed the IB errors --- src/simulation/m_ibm.fpp | 164 ++++++++++++++++++++------------------- 1 file changed, 85 insertions(+), 79 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 91b3449299..231cf17f42 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -212,8 +212,10 @@ contains rho = rho + q_prim_vf(contxb+i-1)%sf(j, k, l) end do + ! Sets thhe momentum do i = 1, num_dims q_cons_vf(momxb+i-1)%sf(j, k, l) = patch_ib(patch_id)%vel(i) * rho + q_prim_vf(momxb+i-1)%sf(j, k, l) = patch_ib(patch_id)%vel(i) end do end if end if @@ -1021,98 +1023,98 @@ contains integer :: gp_id, i, j, k, l, q, ib_idx real(wp), dimension(num_ibs, 3) :: forces, torques real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations - real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution + real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel real(wp) :: cell_volume, dx, dy, dz forces = 0._wp torques = 0._wp - if (num_gps > 0) then - $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) - do gp_id = 1, num_gps - i = ghost_points(gp_id)%loc(1) - j = ghost_points(gp_id)%loc(2) - k = ghost_points(gp_id)%loc(3) - ib_idx = ghost_points(gp_id)%ib_patch_id - if (ib_idx /= 0 .and. patch_ib(ib_idx)%moving_ibm == 2) then ! only need to compute the gradient for cells inside a IB - ! get the vector pointing to the grid cell from the IB centroid - if (num_dims == 3) then - radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid] - else - radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp] - end if - dx = x_cc(i + 1) - x_cc(i) - dy = y_cc(j + 1) - y_cc(j) - - ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume - local_force_contribution(1) = (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) - local_force_contribution(2) = (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) - cell_volume = dx*dy - ! add the 3D component of the pressure gradient, if we are working in 3 dimensions - if (num_dims == 3) then - dz = z_cc(k + 1) - z_cc(k) - local_force_contribution(3) = (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) - cell_volume = cell_volume*dz - else - local_force_contribution(3) = 0._wp - end if - - ! Update the force values atomically to prevent race conditions - call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution) - - ! get the viscous stress and add its contribution if that is considered - ! TODO :: This is really bad code - if (viscous) then - ! get the linear force component first - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i-1, j, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i+1, j, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force - do l = 1, 3 - ! take the cross products for the torque componenet - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) - end do - - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque - - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j-1, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j+1, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) - do l = 1, 3 - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) - end do + $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) + do i = 0, m + do j = 0, n + do k = 0, p + ib_idx = ib_markers%sf(i, j, k) + if (ib_idx /= 0) then + ! get the vector pointing to the grid cell from the IB centroid + if (num_dims == 3) then + radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid] + else + radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp] + end if + dx = x_cc(i + 1) - x_cc(i) + dy = y_cc(j + 1) - y_cc(j) + + ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume + local_force_contribution(1) = -1._wp * (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) ! force is the negative pressure gradient + local_force_contribution(2) = -1._wp * (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) + cell_volume = abs(dx*dy) + ! add the 3D component of the pressure gradient, if we are working in 3 dimensions + if (num_dims == 3) then + dz = z_cc(k + 1) - z_cc(k) + local_force_contribution(3) = -1._wp * (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) + cell_volume = abs(cell_volume*dz) + else + local_force_contribution(3) = 0._wp + end if - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3) + ! Update the force values atomically to prevent race conditions + call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution) + + ! get the viscous stress and add its contribution if that is considered + ! TODO :: This is really bad code + ! if (.false.) then + if (viscous) then + ! get the linear force component first + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i-1, j, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i+1, j, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force + do l = 1, 3 + ! take the cross products for the torque componenet + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do - if (num_dims == 3) then - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k-1) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k+1) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque + + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j-1, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j+1, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) do l = 1, 3 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) - local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3) + + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3) + + if (num_dims == 3) then + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k-1) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k+1) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) + do l = 1, 3 + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + end do + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3) + end if end if - end if - do l = 1, 3 - $:GPU_ATOMIC(atomic='update') - forces(ib_idx, l) = forces(ib_idx, l) - (local_force_contribution(l)*cell_volume) - $:GPU_ATOMIC(atomic='update') - torques(ib_idx, l) = torques(ib_idx, l) - local_torque_contribution(l)*cell_volume - end do - end if + do l = 1, 3 + $:GPU_ATOMIC(atomic='update') + forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume) + $:GPU_ATOMIC(atomic='update') + torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume + end do + end if + end do end do - $:END_GPU_PARALLEL_LOOP() - end if + end do + $:END_GPU_PARALLEL_LOOP() ! reduce the forces across all MPI ranks call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3) @@ -1137,6 +1139,10 @@ contains patch_ib(i)%torque(:) = matmul(patch_ib(i)%rotation_matrix_inverse, torques(i, :)) ! torques must be computed in the local coordinates of the IB end do + ! print *, "drag force: ", forces(1, 1:2), " || torque: ", torques(1, 3) + vel = [0.05_wp, 0._wp, 0._wp] - patch_ib(1)%vel + print *, "drag coef: ", 2._wp * sqrt(dot_product(forces(1, :), forces(1, :))) / ((sqrt(dot_product(vel,vel))**2) * 2._wp * 0.3e-03) + end subroutine s_compute_ib_forces !> Subroutine to deallocate memory reserved for the IBM module @@ -1172,7 +1178,7 @@ contains patch_ib(ib_marker)%moment = 0.5_wp * patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 elseif (patch_ib(ib_marker)%geometry == 3) then ! rectangle patch_ib(ib_marker)%moment = patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2)/6._wp - elseif (patch_ib(ib_marker)%geometry ==63) then ! ellipse + elseif (patch_ib(ib_marker)%geometry == 6) then ! ellipse patch_ib(ib_marker)%moment = 0.25_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2) elseif (patch_ib(ib_marker)%geometry == 8) then ! sphere patch_ib(ib_marker)%moment = 0.4*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 From aa5c0e48cc80d428cff78808539061b29bbeb9e1 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Mon, 22 Dec 2025 15:49:16 -0500 Subject: [PATCH 15/34] Fixed torque not actually applying a rotation and randomly causing nans --- src/simulation/m_ibm.fpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 231cf17f42..1dd25d564e 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -98,8 +98,8 @@ contains moving_immersed_boundary_flag = .false. do i = 1, num_ibs if (patch_ib(i)%moving_ibm /= 0) then + call s_compute_moment_of_inertia(i, patch_ib(i)%angular_vel) moving_immersed_boundary_flag = .true. - end if call s_update_ib_rotation_matrix(i) end do @@ -1139,9 +1139,9 @@ contains patch_ib(i)%torque(:) = matmul(patch_ib(i)%rotation_matrix_inverse, torques(i, :)) ! torques must be computed in the local coordinates of the IB end do - ! print *, "drag force: ", forces(1, 1:2), " || torque: ", torques(1, 3) - vel = [0.05_wp, 0._wp, 0._wp] - patch_ib(1)%vel - print *, "drag coef: ", 2._wp * sqrt(dot_product(forces(1, :), forces(1, :))) / ((sqrt(dot_product(vel,vel))**2) * 2._wp * 0.3e-03) + ! print *, "Acceleration: ", forces(1, 1:2) / patch_ib(1)%mass, " || torque: ", torques(1, 3) + ! vel = [0.05_wp, 0._wp, 0._wp] - patch_ib(1)%vel + ! print *, "drag coef: ", 2._wp * sqrt(dot_product(forces(1, :), forces(1, :))) / (dot_product(vel,vel) * 2._wp * 0.3e-03) end subroutine s_compute_ib_forces @@ -1156,21 +1156,21 @@ contains subroutine s_compute_moment_of_inertia(ib_marker, axis) - real(wp), dimension(3), optional :: axis !< the axis about which we compute the moment. Only required in 3D. + real(wp), dimension(3), intent(in) :: axis !< the axis about which we compute the moment. Only required in 3D. integer, intent(in) :: ib_marker real(wp) :: moment, distance_to_axis, cell_volume - real(wp), dimension(3) :: position, closest_point_along_axis, vector_to_axis + real(wp), dimension(3) :: position, closest_point_along_axis, vector_to_axis, normal_axis integer :: i, j, k, count if (p == 0) then - axis = [0, 1, 0] + normal_axis = [0, 1, 0] else if (sqrt(sum(axis**2)) == 0) then ! if the object is not actually rotating at this time, return a dummy value and exit patch_ib(ib_marker)%moment = 1._wp return else - axis = axis/sqrt(sum(axis)) + normal_axis = axis/sqrt(sum(axis)) end if ! if the IB is in 2D or a 3D sphere, we can compute this exactly @@ -1191,7 +1191,7 @@ contains cell_volume = cell_volume*(z_cc(1) - z_cc(0)) end if - $:GPU_PARALLEL_LOOP(private='[position,closest_point_along_axis,vector_to_axis,distance_to_axis]', copy='[moment,count]', copyin='[ib_marker,cell_volume,axis]', collapse=3) + $:GPU_PARALLEL_LOOP(private='[position,closest_point_along_axis,vector_to_axis,distance_to_axis]', copy='[moment,count]', copyin='[ib_marker,cell_volume,normal_axis]', collapse=3) do i = 0, m do j = 0, n do k = 0, p @@ -1207,7 +1207,7 @@ contains end if ! project the position along the axis to find the closest distance to the rotation axis - closest_point_along_axis = axis*dot_product(axis, position) + closest_point_along_axis = normal_axis*dot_product(axis, position) vector_to_axis = position - closest_point_along_axis distance_to_axis = dot_product(vector_to_axis, vector_to_axis) ! saves the distance to the axis squared From 1a5a903c24fdceeb104439490df2c3b24cefd0b2 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Tue, 23 Dec 2025 13:47:34 -0500 Subject: [PATCH 16/34] Changes to the falling sediment that make it more in-line with the original paper --- examples/2D_mibm_falling_sediment/case.py | 44 ++++++++++++----------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/examples/2D_mibm_falling_sediment/case.py b/examples/2D_mibm_falling_sediment/case.py index 25fd8837be..efd7a04162 100644 --- a/examples/2D_mibm_falling_sediment/case.py +++ b/examples/2D_mibm_falling_sediment/case.py @@ -7,9 +7,11 @@ total_time = 2.0 num_time_steps = 100000 dt = float(total_time / num_time_steps) -num_saves = 200 +num_saves = 1000 steps_per_save = int(num_time_steps / num_saves) +length = 0.4e-2 + # Configuring case dictionary print( json.dumps( @@ -19,10 +21,10 @@ # Computational Domain Parameters # For these computations, the cylinder is placed at the (0,0,0) # domain origin. - "x_domain%beg": 0.0, - "x_domain%end": 0.4, - "y_domain%beg": 0.0, - "y_domain%end": 2.8, + "x_domain%beg": 0.0e-2, + "x_domain%end": length, + "y_domain%beg": 0.0e-2, + "y_domain%end": 7.*length, "cyl_coord": "F", "m": 100, "n": 700, @@ -57,10 +59,10 @@ "riemann_solver": 2, "wave_speeds": 1, # We use ghost-cell - "bc_x%beg": -3, - "bc_x%end": -3, - "bc_y%beg": -3, - "bc_y%end": -3, + "bc_x%beg": -15, + "bc_x%end": -15, + "bc_y%beg": -15, + "bc_y%end": -15, # Set IB to True and add 1 patch "ib": "T", "num_ibs": 1, @@ -74,32 +76,32 @@ # Patch: Constant Tube filled with air # Specify the cylindrical air tube grid geometry "patch_icpp(1)%geometry": 3, - "patch_icpp(1)%x_centroid": 0.2, + "patch_icpp(1)%x_centroid": length/2., # Uniform medium density, centroid is at the center of the domain - "patch_icpp(1)%y_centroid": 1.4, - "patch_icpp(1)%length_x": 0.4, - "patch_icpp(1)%length_y": 2.8, + "patch_icpp(1)%y_centroid": 7.*length/2., + "patch_icpp(1)%length_x": length, + "patch_icpp(1)%length_y": 7. * length, # Specify the patch primitive variables "patch_icpp(1)%vel(1)": 0.00e00, "patch_icpp(1)%vel(2)": 0.0e00, - "patch_icpp(1)%pres": 1.0e00, + "patch_icpp(1)%pres": f"1.0 + 9.81*{7. * length} - 9.81*y", # Set up a linear pressure gradient to start with # 1.0e00 at the top, "patch_icpp(1)%alpha_rho(1)": 1.0e00, "patch_icpp(1)%alpha(1)": 1.0e00, # Patch: Cylinder Immersed Boundary "patch_ib(1)%geometry": 6, "patch_ib(1)%moving_ibm": 2, - "patch_ib(1)%x_centroid": 0.2, - "patch_ib(1)%y_centroid": 2.4, - "patch_ib(1)%length_x": 0.1, - "patch_ib(1)%length_y": 0.05, - "patch_ib(1)%vel(2)": 0.00e00, + "patch_ib(1)%x_centroid": length/2., + "patch_ib(1)%y_centroid": 6. * length, + "patch_ib(1)%length_x": length / 4., + "patch_ib(1)%length_y": length / 8, + "patch_ib(1)%vel(2)": 0.0e00, "patch_ib(1)%angles(3)": math.pi / 4., - "patch_ib(1)%mass": 1.1e-6, + "patch_ib(1)%mass": 1.1 * math.pi * length * length / 32., # density of 1.1e-6 times the volume of the ellipse "patch_ib(1)%slip": "F", # Fluids Physical Parameters "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) "fluid_pp(1)%pi_inf": 0, - "fluid_pp(1)%Re(1)": 100000, + "fluid_pp(1)%Re(1)": 100000, # kenimatic viscosity of 0.01 cm^2/s # Body Forces "bf_y": "T", "k_y": 0.0, From 4c2b02d68dbb19f5a66993d664f921df804ae343 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Wed, 24 Dec 2025 11:08:03 -0500 Subject: [PATCH 17/34] Minor clean ups --- examples/2D_mibm_falling_sediment/case.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/2D_mibm_falling_sediment/case.py b/examples/2D_mibm_falling_sediment/case.py index efd7a04162..8af8181e51 100644 --- a/examples/2D_mibm_falling_sediment/case.py +++ b/examples/2D_mibm_falling_sediment/case.py @@ -1,16 +1,18 @@ import json import math -Mu = 1.84e-05 +Mu = 0.1 * 1e-4 # kenimatic viscosity of 0.01 cm^2/s gam_a = 1.4 -total_time = 2.0 +total_time = 0.35 +# total_time = 2.0 num_time_steps = 100000 dt = float(total_time / num_time_steps) num_saves = 1000 steps_per_save = int(num_time_steps / num_saves) length = 0.4e-2 +avg_speed = 5.5*length / total_time # Configuring case dictionary print( @@ -101,7 +103,7 @@ # Fluids Physical Parameters "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) "fluid_pp(1)%pi_inf": 0, - "fluid_pp(1)%Re(1)": 100000, # kenimatic viscosity of 0.01 cm^2/s + "fluid_pp(1)%Re(1)": 1. / Mu, # Body Forces "bf_y": "T", "k_y": 0.0, From 19808acc3615f2056313345fdcd67d5c8b8bf068 Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Mon, 5 Jan 2026 09:44:59 -0500 Subject: [PATCH 18/34] Found a factor of 4 error in the mass calculations --- examples/2D_mibm_falling_sediment/case.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/2D_mibm_falling_sediment/case.py b/examples/2D_mibm_falling_sediment/case.py index 8af8181e51..5361732841 100644 --- a/examples/2D_mibm_falling_sediment/case.py +++ b/examples/2D_mibm_falling_sediment/case.py @@ -1,7 +1,7 @@ import json import math -Mu = 0.1 * 1e-4 # kenimatic viscosity of 0.01 cm^2/s +Mu = 0.01 * 1e-4 # kenimatic viscosity of 0.01 cm^2/s gam_a = 1.4 total_time = 0.35 @@ -75,8 +75,7 @@ "prim_vars_wrt": "T", "E_wrt": "T", "parallel_io": "T", - # Patch: Constant Tube filled with air - # Specify the cylindrical air tube grid geometry + # Specify the rectangle patch geometry "patch_icpp(1)%geometry": 3, "patch_icpp(1)%x_centroid": length/2., # Uniform medium density, centroid is at the center of the domain @@ -98,7 +97,7 @@ "patch_ib(1)%length_y": length / 8, "patch_ib(1)%vel(2)": 0.0e00, "patch_ib(1)%angles(3)": math.pi / 4., - "patch_ib(1)%mass": 1.1 * math.pi * length * length / 32., # density of 1.1e-6 times the volume of the ellipse + "patch_ib(1)%mass": 1.1 * math.pi * length * length / 128., # density of 1.1 times the volume of the ellipse to give density ratio of 1.1 "patch_ib(1)%slip": "F", # Fluids Physical Parameters "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) From 9f3cb404a61cc9d44ff8f95e457acbea8b889f79 Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Mon, 5 Jan 2026 15:12:49 -0500 Subject: [PATCH 19/34] corrected calculations for patches --- src/simulation/m_ibm.fpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 1dd25d564e..fb44b633f0 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1136,13 +1136,9 @@ contains ! apply the summed forces do i = 1, num_ibs patch_ib(i)%force(:) = forces(i, :) - patch_ib(i)%torque(:) = matmul(patch_ib(i)%rotation_matrix_inverse, torques(i, :)) ! torques must be computed in the local coordinates of the IB + patch_ib(i)%torque(:) = matmul(patch_ib(i)%rotation_matrix_inverse, torques(i, :)) ! torques must be converted to the local coordinates of the IB end do - ! print *, "Acceleration: ", forces(1, 1:2) / patch_ib(1)%mass, " || torque: ", torques(1, 3) - ! vel = [0.05_wp, 0._wp, 0._wp] - patch_ib(1)%vel - ! print *, "drag coef: ", 2._wp * sqrt(dot_product(forces(1, :), forces(1, :))) / (dot_product(vel,vel) * 2._wp * 0.3e-03) - end subroutine s_compute_ib_forces !> Subroutine to deallocate memory reserved for the IBM module @@ -1179,7 +1175,7 @@ contains elseif (patch_ib(ib_marker)%geometry == 3) then ! rectangle patch_ib(ib_marker)%moment = patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2)/6._wp elseif (patch_ib(ib_marker)%geometry == 6) then ! ellipse - patch_ib(ib_marker)%moment = 0.25_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2) + patch_ib(ib_marker)%moment = 0.0625_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2) elseif (patch_ib(ib_marker)%geometry == 8) then ! sphere patch_ib(ib_marker)%moment = 0.4*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 From 9ffed4e587a09508c8ef896a5729de463eaec855 Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Fri, 9 Jan 2026 11:22:10 -0500 Subject: [PATCH 20/34] removed falling sediment, as it is a bad comparison, but replaced it with a shock cylinder --- examples/2D_mibm_falling_sediment/case.py | 114 ------------------ examples/2D_mibm_shock_cylinder/case.py | 136 ++++++++++++++++++++++ 2 files changed, 136 insertions(+), 114 deletions(-) delete mode 100644 examples/2D_mibm_falling_sediment/case.py create mode 100644 examples/2D_mibm_shock_cylinder/case.py diff --git a/examples/2D_mibm_falling_sediment/case.py b/examples/2D_mibm_falling_sediment/case.py deleted file mode 100644 index 5361732841..0000000000 --- a/examples/2D_mibm_falling_sediment/case.py +++ /dev/null @@ -1,114 +0,0 @@ -import json -import math - -Mu = 0.01 * 1e-4 # kenimatic viscosity of 0.01 cm^2/s -gam_a = 1.4 - -total_time = 0.35 -# total_time = 2.0 -num_time_steps = 100000 -dt = float(total_time / num_time_steps) -num_saves = 1000 -steps_per_save = int(num_time_steps / num_saves) - -length = 0.4e-2 -avg_speed = 5.5*length / total_time - -# Configuring case dictionary -print( - json.dumps( - { - # Logistics - "run_time_info": "T", - # Computational Domain Parameters - # For these computations, the cylinder is placed at the (0,0,0) - # domain origin. - "x_domain%beg": 0.0e-2, - "x_domain%end": length, - "y_domain%beg": 0.0e-2, - "y_domain%end": 7.*length, - "cyl_coord": "F", - "m": 100, - "n": 700, - "p": 0, - "dt": dt, - "t_step_start": 0, - "t_step_stop": num_time_steps, # 3000 - "t_step_save": steps_per_save, # 10 - # Simulation Algorithm Parameters - # Only one patches are necessary, the air tube - "num_patches": 1, - # Use the 5 equation model - "model_eqns": 2, - "alt_soundspeed": "F", - # One fluids: air - "num_fluids": 1, - # time step - "mpp_lim": "F", - # Correct errors when computing speed of sound - "mixture_err": "T", - # Use TVD RK3 for time marching - "time_stepper": 3, - # Use WENO5 - "weno_order": 5, - "weno_eps": 1.0e-16, - "weno_Re_flux": "T", - "weno_avg": "T", - "avg_state": 2, - "mapped_weno": "T", - "null_weights": "F", - "mp_weno": "T", - "riemann_solver": 2, - "wave_speeds": 1, - # We use ghost-cell - "bc_x%beg": -15, - "bc_x%end": -15, - "bc_y%beg": -15, - "bc_y%end": -15, - # Set IB to True and add 1 patch - "ib": "T", - "num_ibs": 1, - "viscous": "T", - # Formatted Database Files Structure Parameters - "format": 1, - "precision": 2, - "prim_vars_wrt": "T", - "E_wrt": "T", - "parallel_io": "T", - # Specify the rectangle patch geometry - "patch_icpp(1)%geometry": 3, - "patch_icpp(1)%x_centroid": length/2., - # Uniform medium density, centroid is at the center of the domain - "patch_icpp(1)%y_centroid": 7.*length/2., - "patch_icpp(1)%length_x": length, - "patch_icpp(1)%length_y": 7. * length, - # Specify the patch primitive variables - "patch_icpp(1)%vel(1)": 0.00e00, - "patch_icpp(1)%vel(2)": 0.0e00, - "patch_icpp(1)%pres": f"1.0 + 9.81*{7. * length} - 9.81*y", # Set up a linear pressure gradient to start with # 1.0e00 at the top, - "patch_icpp(1)%alpha_rho(1)": 1.0e00, - "patch_icpp(1)%alpha(1)": 1.0e00, - # Patch: Cylinder Immersed Boundary - "patch_ib(1)%geometry": 6, - "patch_ib(1)%moving_ibm": 2, - "patch_ib(1)%x_centroid": length/2., - "patch_ib(1)%y_centroid": 6. * length, - "patch_ib(1)%length_x": length / 4., - "patch_ib(1)%length_y": length / 8, - "patch_ib(1)%vel(2)": 0.0e00, - "patch_ib(1)%angles(3)": math.pi / 4., - "patch_ib(1)%mass": 1.1 * math.pi * length * length / 128., # density of 1.1 times the volume of the ellipse to give density ratio of 1.1 - "patch_ib(1)%slip": "F", - # Fluids Physical Parameters - "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) - "fluid_pp(1)%pi_inf": 0, - "fluid_pp(1)%Re(1)": 1. / Mu, - # Body Forces - "bf_y": "T", - "k_y": 0.0, - "w_y": 0.0, - "p_y": 0.0, - "g_y": -9.81, # gravity - } - ) -) diff --git a/examples/2D_mibm_shock_cylinder/case.py b/examples/2D_mibm_shock_cylinder/case.py new file mode 100644 index 0000000000..89a2b493ce --- /dev/null +++ b/examples/2D_mibm_shock_cylinder/case.py @@ -0,0 +1,136 @@ +import json +import math + +# fluid parameters +Mu = 1.84e-05 +gam_a = 1.4 + +# domain size and speed +mach_number = 1.5 +pre_shock_pressure = 1 +pre_shock_density = 1.4 +pre_shock_speed = 0.0 +post_shock_pressure = 2.4583 +post_shock_density = 2.6069 +post_shock_speed = 0.6944 + +domain_size = 4. +wave_front = -1.5 + +total_time = 1.5 +num_time_steps = 2000 +dt = float(total_time / num_time_steps) +num_saves = 100 +steps_to_save = int(num_time_steps / num_saves) + +# Configuring case dictionary +print( + json.dumps( + { + # Logistics + "run_time_info": "T", + # Computational Domain Parameters + # For these computations, the cylinder is placed at the (0,0,0) + # domain origin. + # axial direction + "x_domain%beg": -domain_size * 0.5, + "x_domain%end": domain_size * 0.5, + # r direction + "y_domain%beg": -domain_size * 0.5, + "y_domain%end": domain_size * 0.5, + "cyl_coord": "F", + "m": 1000, + "n": 1000, + "p": 0, + "dt": dt, + "t_step_start": 0, + "t_step_stop": num_time_steps, # 10000, + "t_step_save": steps_to_save, + # Simulation Algorithm Parameters + # Only one patches are necessary, the air tube + "num_patches": 2, + # Use the 5 equation model + "model_eqns": 2, + "alt_soundspeed": "F", + # One fluids: air + "num_fluids": 1, + # time step + "mpp_lim": "F", + # Correct errors when computing speed of sound + "mixture_err": "T", + # Use TVD RK3 for time marching + "time_stepper": 3, + # Use WENO5 + "weno_order": 5, + "weno_eps": 1.0e-16, + "weno_Re_flux": "T", + "weno_avg": "T", + "avg_state": 2, + "mapped_weno": "T", + "null_weights": "F", + "mp_weno": "T", + "riemann_solver": 2, + "wave_speeds": 1, + # We use ghost-cell + "bc_x%beg": -17, + "bc_x%end": -8, + "bc_y%beg": -15, + "bc_y%end": -15, + # Set IB to True and add 1 patch + "ib": "T", + "num_ibs": 1, + "viscous": "T", + # Formatted Database Files Structure Parameters + "format": 1, + "precision": 2, + "prim_vars_wrt": "T", + "E_wrt": "T", + "parallel_io": "T", + # Patch: Constant Tube filled with air + # Specify the cylindrical air tube grid geometry + "patch_icpp(1)%geometry": 3, + "patch_icpp(2)%geometry": 3, + # patch locations + "patch_icpp(1)%x_centroid": 0.5 * wave_front + 0.25 * domain_size, + "patch_icpp(1)%y_centroid": 0., + "patch_icpp(1)%length_x": 0.5 * domain_size - wave_front, + "patch_icpp(1)%length_y": domain_size, + "patch_icpp(2)%x_centroid": 0.5 * wave_front - 0.25 * domain_size, + "patch_icpp(2)%y_centroid": 0., + "patch_icpp(2)%length_x": 0.5 * domain_size + wave_front, + "patch_icpp(2)%length_y": domain_size, + # Specify the patch primitive variables + "patch_icpp(1)%vel(1)": pre_shock_speed, + "patch_icpp(1)%vel(2)": 0.0, + "patch_icpp(1)%pres": pre_shock_pressure, + "patch_icpp(1)%alpha_rho(1)": pre_shock_density, + "patch_icpp(1)%alpha(1)": 1.0e00, + "patch_icpp(2)%vel(1)": post_shock_speed, + "patch_icpp(2)%vel(2)": 0.0, + "patch_icpp(2)%pres": post_shock_pressure, + "patch_icpp(2)%alpha_rho(1)": post_shock_density, + "patch_icpp(2)%alpha(1)": 1.0e00, + # Patch: Cylinder Immersed Boundary + "patch_ib(1)%geometry": 2, + "patch_ib(1)%x_centroid": -0.5, + "patch_ib(1)%y_centroid": 0., + "patch_ib(1)%radius": 0.5, + "patch_ib(1)%slip": "T", + "patch_ib(1)%moving_ibm": 2, + "patch_ib(1)%vel(1)": 0, + "patch_ib(1)%vel(2)": 0, + "patch_ib(1)%vel(3)": 0, + "patch_ib(1)%angles(1)": 0.0, # x-axis rotation in radians + "patch_ib(1)%angles(2)": 0.0, # y-axis rotation + "patch_ib(1)%angles(3)": 0.0, # z-axis rotation + "patch_ib(1)%angular_vel(1)": 0.0, # x-axis rotational velocity in radians per second + "patch_ib(1)%angular_vel(2)": 0.0, # y-axis rotation + "patch_ib(1)%angular_vel(3)": 0.0, # z-axis rotation + "patch_ib(1)%mass": 0.5, # z-axis rotation + # Fluids Physical Parameters + "fluid_pp(1)%gamma": 1.0e00 / (gam_a - 1.0e00), # 2.50(Not 1.40) + "fluid_pp(1)%pi_inf": 0, + "fluid_pp(1)%Re(1)": 2500000, + } + ) +) From 091a750d9a78831b9cff2469fd8810b77a053f01 Mon Sep 17 00:00:00 2001 From: "Daniel J. Vickers" Date: Fri, 9 Jan 2026 11:24:39 -0500 Subject: [PATCH 21/34] Added note on reference that it is from --- examples/2D_mibm_shock_cylinder/case.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/2D_mibm_shock_cylinder/case.py b/examples/2D_mibm_shock_cylinder/case.py index 89a2b493ce..b962b0c269 100644 --- a/examples/2D_mibm_shock_cylinder/case.py +++ b/examples/2D_mibm_shock_cylinder/case.py @@ -1,8 +1,10 @@ import json import math +# This case is a recreation of the case from "Moving overlapping grids with adaptive mesh refinement for high-speed reactive and non-reactive flow" +# by William D. Henshaw and Donald W. Schwendeman + # fluid parameters -Mu = 1.84e-05 gam_a = 1.4 # domain size and speed From 18b7dcc7ad3a66260613dd23a226cb2e258257d4 Mon Sep 17 00:00:00 2001 From: Daniel J Vickers Date: Fri, 9 Jan 2026 16:12:31 -0500 Subject: [PATCH 22/34] Succesfully ran on phoenix on GPU --- src/simulation/m_ibm.fpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index fb44b633f0..6105a43b3f 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1029,7 +1029,7 @@ contains forces = 0._wp torques = 0._wp - $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity,bulk_viscosity]', collapse=3) + $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity]', collapse=3) do i = 0, m do j = 0, n do k = 0, p From feedba22e323e221a9a1a206719a5a3ba13977c2 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 9 Jan 2026 16:27:59 -0500 Subject: [PATCH 23/34] Generated golden files --- tests/5600D63B/golden-metadata.txt | 193 +++++++++++++++++++++++++++++ tests/5600D63B/golden.txt | 11 ++ tests/7FA04E95/golden-metadata.txt | 193 +++++++++++++++++++++++++++++ tests/7FA04E95/golden.txt | 11 ++ 4 files changed, 408 insertions(+) create mode 100644 tests/5600D63B/golden-metadata.txt create mode 100644 tests/5600D63B/golden.txt create mode 100644 tests/7FA04E95/golden-metadata.txt create mode 100644 tests/7FA04E95/golden.txt diff --git a/tests/5600D63B/golden-metadata.txt b/tests/5600D63B/golden-metadata.txt new file mode 100644 index 0000000000..87feb7fece --- /dev/null +++ b/tests/5600D63B/golden-metadata.txt @@ -0,0 +1,193 @@ +This file was created on 2026-01-09 16:23:05.537791. + +mfc.sh: + + Invocation: test --generate -o 5600D63B + Lock: mpi=Yes & gpu=No & debug=No & gcov=No & unified=No & single=No & mixed=No & fastmath=No + Git: 18b7dcc7ad3a66260613dd23a226cb2e258257d4 on viscous-stress-and-ellipse-ib (clean) + +post_process: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : OFF + POST_PROCESS : ON + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +simulation: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : ON + POST_PROCESS : OFF + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +pre_process: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : ON + SIMULATION : OFF + POST_PROCESS : OFF + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +syscheck: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : OFF + POST_PROCESS : OFF + SYSCHECK : ON + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +CPU: + + CPU Info: + From lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Address sizes: 46 bits physical, 48 bits virtual + Byte Order: Little Endian + CPU(s): 20 + On-line CPU(s) list: 0-19 + Vendor ID: GenuineIntel + Model name: 12th Gen Intel(R) Core(TM) i7-12700K + CPU family: 6 + Model: 151 + Thread(s) per core: 2 + Core(s) per socket: 12 + Socket(s): 1 + Stepping: 2 + CPU(s) scaling MHz: 23% + CPU max MHz: 5100.0000 + CPU min MHz: 800.0000 + BogoMIPS: 7219.20 + Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault cat_l2 cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect user_shstk avx_vnni dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req hfi vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize pconfig arch_lbr ibt flush_l1d arch_capabilities + Virtualization: VT-x + L1d cache: 512 KiB (12 instances) + L1i cache: 512 KiB (12 instances) + L2 cache: 12 MiB (9 instances) + L3 cache: 25 MiB (1 instance) + NUMA node(s): 1 + NUMA node0 CPU(s): 0-19 + Vulnerability Gather data sampling: Not affected + Vulnerability Ghostwrite: Not affected + Vulnerability Indirect target selection: Not affected + Vulnerability Itlb multihit: Not affected + Vulnerability L1tf: Not affected + Vulnerability Mds: Not affected + Vulnerability Meltdown: Not affected + Vulnerability Mmio stale data: Not affected + Vulnerability Reg file data sampling: Mitigation; Clear Register File + Vulnerability Retbleed: Not affected + Vulnerability Spec rstack overflow: Not affected + Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl + Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization + Vulnerability Spectre v2: Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S + Vulnerability Srbds: Not affected + Vulnerability Tsa: Not affected + Vulnerability Tsx async abort: Not affected + Vulnerability Vmscape: Mitigation; IBPB before exit to userspace + diff --git a/tests/5600D63B/golden.txt b/tests/5600D63B/golden.txt new file mode 100644 index 0000000000..8cafaa4276 --- /dev/null +++ b/tests/5600D63B/golden.txt @@ -0,0 +1,11 @@ +D/cons.1.00.000000.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/cons.1.00.000050.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/cons.2.00.000000.dat 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 +D/cons.2.00.000050.dat 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 +D/cons.3.00.000000.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/cons.3.00.000050.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/cons.4.00.000000.dat 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 +D/cons.4.00.000050.dat 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 2.50125 +D/cons.5.00.000000.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/cons.5.00.000050.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/ib_markers.00.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \ No newline at end of file diff --git a/tests/7FA04E95/golden-metadata.txt b/tests/7FA04E95/golden-metadata.txt new file mode 100644 index 0000000000..31c6dd7a52 --- /dev/null +++ b/tests/7FA04E95/golden-metadata.txt @@ -0,0 +1,193 @@ +This file was created on 2026-01-09 16:27:49.075261. + +mfc.sh: + + Invocation: test --generate -o 7FA04E95 + Lock: mpi=Yes & gpu=No & debug=No & gcov=No & unified=No & single=No & mixed=No & fastmath=No + Git: 18b7dcc7ad3a66260613dd23a226cb2e258257d4 on viscous-stress-and-ellipse-ib (clean) + +syscheck: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : OFF + POST_PROCESS : OFF + SYSCHECK : ON + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +simulation: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : ON + POST_PROCESS : OFF + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +pre_process: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : ON + SIMULATION : OFF + POST_PROCESS : OFF + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +post_process: + + CMake Configuration: + + CMake v3.28.3 on schwarzschild + + C : GNU v13.3.0 (/usr/bin/cc) + Fortran : GNU v13.3.0 (/usr/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : OFF + POST_PROCESS : ON + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /home/dan/Documents/repos/MFC/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /usr/bin/cc + CXX : /usr/bin/c++ + FC : /usr/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +CPU: + + CPU Info: + From lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Address sizes: 46 bits physical, 48 bits virtual + Byte Order: Little Endian + CPU(s): 20 + On-line CPU(s) list: 0-19 + Vendor ID: GenuineIntel + Model name: 12th Gen Intel(R) Core(TM) i7-12700K + CPU family: 6 + Model: 151 + Thread(s) per core: 2 + Core(s) per socket: 12 + Socket(s): 1 + Stepping: 2 + CPU(s) scaling MHz: 18% + CPU max MHz: 5100.0000 + CPU min MHz: 800.0000 + BogoMIPS: 7219.20 + Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault cat_l2 cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect user_shstk avx_vnni dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req hfi vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize pconfig arch_lbr ibt flush_l1d arch_capabilities + Virtualization: VT-x + L1d cache: 512 KiB (12 instances) + L1i cache: 512 KiB (12 instances) + L2 cache: 12 MiB (9 instances) + L3 cache: 25 MiB (1 instance) + NUMA node(s): 1 + NUMA node0 CPU(s): 0-19 + Vulnerability Gather data sampling: Not affected + Vulnerability Ghostwrite: Not affected + Vulnerability Indirect target selection: Not affected + Vulnerability Itlb multihit: Not affected + Vulnerability L1tf: Not affected + Vulnerability Mds: Not affected + Vulnerability Meltdown: Not affected + Vulnerability Mmio stale data: Not affected + Vulnerability Reg file data sampling: Mitigation; Clear Register File + Vulnerability Retbleed: Not affected + Vulnerability Spec rstack overflow: Not affected + Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl + Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization + Vulnerability Spectre v2: Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS SW sequence; BHI BHI_DIS_S + Vulnerability Srbds: Not affected + Vulnerability Tsa: Not affected + Vulnerability Tsx async abort: Not affected + Vulnerability Vmscape: Mitigation; IBPB before exit to userspace + diff --git a/tests/7FA04E95/golden.txt b/tests/7FA04E95/golden.txt new file mode 100644 index 0000000000..28b8f8e315 --- /dev/null +++ b/tests/7FA04E95/golden.txt @@ -0,0 +1,11 @@ +D/cons.1.00.000000.dat 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 2.6069 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 +D/cons.1.00.000050.dat 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495381 2.60690283494451 2.60690283494451 2.60690283495381 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60690283495417 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690178 2.60704515686088 2.60704515589689 2.60704515589689 2.60704515686088 2.60704515690178 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60704515690204 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714554 2.6083935171458 2.60839351713272 2.60839351587007 2.60839348352436 2.60839348352436 2.60839351587007 2.60839351713272 2.6083935171458 2.60839351714554 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 2.60839351714553 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782675 1.81733171782697 1.81733171783446 1.81733171842423 1.81733174507932 1.81733256336721 1.81733256336721 1.81733174507932 1.81733171842423 1.81733171783446 1.81733171782697 1.81733171782675 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.81733171782674 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910931 1.42165257910792 1.42165257907115 1.42165257945289 1.42165262941556 1.42165514421912 1.42165514421912 1.42165262941556 1.42165257945289 1.42165257907115 1.42165257910792 1.42165257910931 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.42165257910932 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636875 1.40060529636777 1.40060529628739 1.40060529052652 1.40060515186962 1.40059965348549 1.40059965348549 1.40060515186962 1.40060529052652 1.40060529628739 1.40060529636777 1.40060529636875 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.40060529636878 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.40001254353257 1.40001254354282 1.40001254402326 1.4000125542067 1.40001261487162 1.40002165080181 1.40002165080181 1.40001261487162 1.4000125542067 1.40001254402326 1.40001254354282 1.40001254353257 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.4000125435324 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079547 1.40000021079223 1.40000021200116 1.4000003212415 1.40001085191248 1.4004648380843 1.4004648380843 1.40001085191248 1.4000003212415 1.40000021200116 1.40000021079223 1.40000021079547 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000021079562 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000296245 1.4000000029624 1.40000000243307 1.39999998371969 1.40000008710515 1.40000924860148 1.41160785392326 1.41160785392326 1.40000924860148 1.40000008710515 1.39999998371969 1.40000000243307 1.4000000029624 1.40000000296245 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000296246 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003002 1.3999999999802 1.39999999702452 1.39999999726311 1.40000000142593 1.40000453320649 1.40000453320649 1.40000000142593 1.39999999726312 1.39999999702452 1.3999999999802 1.40000000003002 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.40000000003006 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.40000000000003 1.40000000016377 1.40000000877023 1.40000000801444 1.40000000218721 1.40000000010841 1.40000000010841 1.40000000218721 1.40000000801444 1.40000000877023 1.40000000016377 1.40000000000003 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.40000000000002 1.40000000031024 1.40000001633567 1.40000001919894 1.40000001684864 1.40000000871591 1.40000000871591 1.40000001684864 1.40000001919894 1.40000001633567 1.40000000031024 1.40000000000002 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.40000000000006 1.40000000000621 1.40000000121957 1.40000003817621 1.40000002997814 1.40000004828495 1.40000004828495 1.40000002997814 1.40000003817621 1.40000000121957 1.40000000000621 1.40000000000006 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.40000000000009 1.40000000000742 1.40000000138368 1.40000004002579 1.40000005133886 1.40000005133886 1.40000004002579 1.40000000138368 1.40000000000742 1.40000000000009 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.40000000000027 1.40000000001998 1.4000000010934 1.40000000100878 1.40000000100878 1.4000000010934 1.40000000001998 1.40000000000027 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.40000000000001 1.40000000000019 1.40000000000107 1.40000000000204 1.40000000000204 1.40000000000107 1.40000000000019 1.40000000000001 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.40000000000001 1.4 1.4 1.4 1.4 1.40000000000001 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.4 +D/cons.2.00.000000.dat 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 1.81023136 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/cons.2.00.000050.dat 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117008 1.81023007117457 1.81023007117457 1.81023007117008 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81023007117005 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.8101653957959 1.81016539579563 1.81016539628093 1.81016539628093 1.81016539579563 1.8101653957959 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.81016539579586 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206016 1.80972917205994 1.8097291720484 1.80972917139131 1.80972918865923 1.80972918865923 1.80972917139131 1.8097291720484 1.80972917205994 1.80972917206016 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 1.80972917206017 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233611 0.63766622232822 0.63766622200235 0.63766620725486 0.6376653403223 0.6376653403223 0.63766620725486 0.63766622200235 0.63766622232822 0.63766622233611 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.63766622233616 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818286 0.02414334818369 0.02414334822137 0.0241433487588 0.02414334065295 0.02414052503154 0.02414052503154 0.02414334065295 0.0241433487588 0.02414334822137 0.02414334818369 0.02414334818286 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.02414334818285 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246727 0.00060751246813 0.00060751253715 0.00060751783838 0.00060774840819 0.00061861718286 0.00061861718286 0.00060774840819 0.00060751783838 0.00060751253715 0.00060751246813 0.00060751246727 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 0.00060751246729 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481947e-05 1.254480699e-05 1.254416979e-05 1.253409463e-05 1.190306503e-05 2.43849261e-06 2.43849261e-06 1.190306503e-05 1.253409463e-05 1.254416979e-05 1.254480699e-05 1.254481947e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 1.254481946e-05 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1083941e-07 2.1212819e-07 2.1885066e-07 4.72775069e-06 2.420860373e-05 2.420860373e-05 4.72775069e-06 2.1885066e-07 2.1212819e-07 2.1083941e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.1080499e-07 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.93553e-09 2.75015e-09 4.8545921e-07 6.30747554e-06 0.00176873168121 0.00176873168121 6.30747554e-06 4.8545921e-07 2.75015e-09 2.93553e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 2.95347e-09 3.007e-11 3.007e-11 3.007e-11 3.007e-11 3.007e-11 3.007e-11 3.006e-11 3.005e-11 2.528e-11 -6.7826e-10 2.050908e-08 5.755655e-08 4.04155232e-06 4.04155232e-06 5.755655e-08 2.050908e-08 -6.7826e-10 2.528e-11 3.005e-11 3.006e-11 3.007e-11 3.007e-11 3.007e-11 3.007e-11 3.007e-11 3.007e-11 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.138e-11 -4.8354e-10 1.6883393e-07 4.1383547e-07 1.43530862e-06 1.43530862e-06 4.1383547e-07 1.6883393e-07 -4.8354e-10 -1.138e-11 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.96e-12 2.2114e-10 6.7890653e-07 1.19365817e-06 1.91735081e-06 1.91735081e-06 1.19365817e-06 6.7890653e-07 2.2114e-10 4.96e-12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.58e-12 3.9609e-10 1.688845e-08 1.59970876e-06 2.00835217e-06 2.00835217e-06 1.59970876e-06 1.688845e-08 3.9609e-10 5.58e-12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4e-14 4.16e-12 9.3498e-10 3.922594e-08 5.011214e-08 5.011214e-08 3.922594e-08 9.3498e-10 4.16e-12 4e-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0 9e-14 2.34e-12 1.10711e-09 1.00178e-09 1.00178e-09 1.10711e-09 2.34e-12 9e-14 0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2e-13 1.07e-12 2.04e-12 2.04e-12 1.07e-12 2e-13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 1e-14 1e-14 1e-14 1e-14 1e-14 1e-14 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 +D/cons.3.00.000000.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/cons.3.00.000050.dat 0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 1.8e-13 4.4e-13 -4.4e-13 -1.8e-13 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 0.0 1e-14 8e-14 2.423e-11 5.92e-11 -5.92e-11 -2.423e-11 -8e-14 -1e-14 -0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 0.0 7e-14 1.831e-11 1.41308e-09 3.41665e-09 -3.41665e-09 -1.41308e-09 -1.831e-11 -7e-14 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 -1e-14 -1.5e-13 -4.5e-13 -2.922e-10 -1.304713e-08 -3.352907e-08 3.352907e-08 1.304713e-08 2.922e-10 4.5e-13 1.5e-13 1e-14 0.0 0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 1e-14 6.8e-13 1.1e-13 -8.3209e-10 -4.971259e-08 -1.3207432e-07 1.3207432e-07 4.971259e-08 8.3209e-10 -1.1e-13 -6.8e-13 -1e-14 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 3e-14 3.4e-13 3.637e-11 1.60771e-09 7.389693e-08 1.9471438e-07 -1.9471438e-07 -7.389693e-08 -1.60771e-09 -3.637e-11 -3.4e-13 -3e-14 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -1.8e-13 -2.06e-12 -1.1711e-10 -9.2192e-10 -9.089697e-08 -2.6503635e-07 2.6503635e-07 9.089697e-08 9.2192e-10 1.1711e-10 2.06e-12 1.8e-13 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 1.7e-13 -1.077e-11 -1.65643e-09 -1.2840394e-07 -3.98176488e-06 -9.960611098e-05 9.960611098e-05 3.98176488e-06 1.2840394e-07 1.65643e-09 1.077e-11 -1.7e-13 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 1e-14 5e-14 5.3892e-10 1.893086e-08 7.938829e-07 -3.52853109e-06 -0.00441660343476 0.00441660343476 3.52853109e-06 -7.938829e-07 -1.893086e-08 -5.3892e-10 -5e-14 -1e-14 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4e-14 4.797e-11 2.75073e-09 2.0527163e-07 3.3594481e-07 -9.8416071e-07 9.8416071e-07 -3.3594481e-07 -2.0527163e-07 -2.75073e-09 -4.797e-11 -4e-14 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -3e-14 -1.6392e-10 -8.50652e-09 -5.713172e-07 -8.2969458e-07 -9.5687415e-07 9.5687415e-07 8.2969458e-07 5.713172e-07 8.50652e-09 1.6392e-10 3e-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -2e-14 -3.1537e-10 -1.628959e-08 -9.7602276e-07 -1.02616104e-06 -5.4555893e-07 5.4555893e-07 1.02616104e-06 9.7602276e-07 1.628959e-08 3.1537e-10 2e-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -6e-14 -1.29e-12 -9.6101e-10 -2.150927e-08 -8.6811278e-07 -3.5679978e-07 3.5679978e-07 8.6811278e-07 2.150927e-08 9.6101e-10 1.29e-12 6e-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -5e-14 -3.39e-12 -5.8724e-10 -1.41961e-09 -1.6722e-10 1.6722e-10 1.41961e-09 5.8724e-10 3.39e-12 5e-14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -1.7e-13 -1.997e-11 -1.809e-11 4.84e-12 -4.84e-12 1.809e-11 1.997e-11 1.7e-13 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -1e-14 -0.0 -0.0 0.0 0.0 1e-14 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 -0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 +D/cons.4.00.000000.dat 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 6.774262328192 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 +D/cons.4.00.000050.dat 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.77427010652179 6.7742701065207 6.77427010649538 6.77427010649538 6.7742701065207 6.77427010652179 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.7742701065218 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392753 6.77466075392676 6.77466075380148 6.77466075119074 6.77466075119074 6.77466075380148 6.77466075392676 6.77466075392753 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77466075392754 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620396 6.77863494620462 6.77863494615656 6.77863494183944 6.77863485534575 6.77863485534575 6.77863494183944 6.77863494615656 6.77863494620462 6.77863494620396 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 6.77863494620395 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 3.99893988577812 3.99893988577875 3.9989398857979 3.99893988741608 3.99893996043527 3.99894206703891 3.99894206703891 3.99893996043527 3.99893988741608 3.9989398857979 3.99893988577875 3.99893988577812 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 3.9989398857781 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427508 2.55743731427158 2.5574373141791 2.55743731511906 2.55743743946872 2.55744366199821 2.55744366199821 2.55743743946872 2.55743731511906 2.5574373141791 2.55743731427158 2.55743731427508 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.55743731427511 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884359 2.50151548884112 2.5015154886402 2.5015154742378 2.50151512761981 2.50150138203538 2.50150138203538 2.50151512761981 2.5015154742378 2.5015154886402 2.50151548884112 2.50151548884359 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50151548884365 2.50003135991596 2.50003135991596 2.50003135991596 2.50003135991596 2.50003135991596 2.50003135991596 2.50003135991597 2.50003135991639 2.50003135994201 2.50003136114311 2.50003138660164 2.50003153824949 2.50005412764368 2.50005412764368 2.50003153824949 2.50003138660164 2.50003136114311 2.50003135994201 2.50003135991639 2.50003135991597 2.50003135991596 2.50003135991596 2.50003135991596 2.50003135991596 2.50003135991596 2.50003135991596 2.50000052698943 2.50000052698943 2.50000052698943 2.50000052698943 2.50000052698943 2.50000052698943 2.50000052698942 2.50000052698904 2.50000052698094 2.50000053000326 2.50000080310428 2.50002713065179 2.50116367922259 2.50116367922259 2.5000271306518 2.50000080310428 2.50000053000326 2.50000052698094 2.50000052698904 2.50000052698942 2.50000052698943 2.50000052698943 2.50000052698943 2.50000052698943 2.50000052698943 2.50000052698943 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000740613 2.50000000740601 2.50000000608267 2.49999995929923 2.50000021776334 2.50002312225409 2.53062188600415 2.53062188600415 2.50002312225409 2.50000021776334 2.49999995929923 2.50000000608267 2.50000000740601 2.50000000740613 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000740615 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000007515 2.50000000007506 2.4999999999505 2.49999999256131 2.4999999931578 2.50000000356488 2.50001133337323 2.50001133337323 2.50000000356488 2.4999999931578 2.49999999256131 2.4999999999505 2.50000000007506 2.50000000007515 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000007516 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000007 2.50000000040941 2.50000002192558 2.50000002003624 2.50000000546834 2.5000000002721 2.5000000002721 2.50000000546834 2.50000002003624 2.50000002192558 2.50000000040941 2.50000000000007 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.50000000000006 2.5000000007756 2.50000004083919 2.50000004799785 2.50000004212249 2.5000000217912 2.5000000217912 2.50000004212249 2.50000004799785 2.50000004083919 2.5000000007756 2.50000000000006 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.50000000000015 2.50000000001552 2.50000000304892 2.50000009544052 2.50000007494654 2.50000012071388 2.50000012071388 2.50000007494654 2.50000009544052 2.50000000304892 2.50000000001552 2.50000000000015 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.50000000000001 2.50000000000024 2.50000000001856 2.50000000345919 2.5000001000645 2.50000012834716 2.50000012834716 2.5000001000645 2.50000000345919 2.50000000001856 2.50000000000024 2.50000000000001 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.50000000000001 2.50000000000067 2.50000000004995 2.5000000027335 2.50000000252196 2.50000000252196 2.5000000027335 2.50000000004995 2.50000000000067 2.50000000000001 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.50000000000002 2.50000000000048 2.50000000000267 2.50000000000509 2.50000000000509 2.50000000000267 2.50000000000048 2.50000000000002 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.50000000000002 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000001 2.50000000000002 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 +D/cons.5.00.000000.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/cons.5.00.000050.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/ib_markers.00.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \ No newline at end of file From f7c2577ab4cc0c8388bec7e5f6231213c80b0b5a Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 9 Jan 2026 16:29:55 -0500 Subject: [PATCH 24/34] spelling and formatting --- src/common/m_compute_levelset.fpp | 12 +-- src/common/m_ib_patches.fpp | 5 +- src/simulation/m_ibm.fpp | 82 ++++++++++---------- src/simulation/m_rhs.fpp | 20 ++--- src/simulation/m_time_steppers.fpp | 2 +- src/simulation/m_viscous.fpp | 120 ++++++++++++++--------------- 6 files changed, 120 insertions(+), 121 deletions(-) diff --git a/src/common/m_compute_levelset.fpp b/src/common/m_compute_levelset.fpp index 69ddda5fd5..c7a3df21cf 100644 --- a/src/common/m_compute_levelset.fpp +++ b/src/common/m_compute_levelset.fpp @@ -361,8 +361,8 @@ contains inverse_rotation(:, :) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:, :) rotation(:, :) = patch_ib(ib_patch_id)%rotation_matrix(:, :) - ellipse_coeffs(1) = 0.5_wp * length_x - ellipse_coeffs(2) = 0.5_wp * length_y + ellipse_coeffs(1) = 0.5_wp*length_x + ellipse_coeffs(2) = 0.5_wp*length_y $:GPU_PARALLEL_LOOP(private='[i,j,k,idx,quadratic_coeffs,xy_local,normal_vector]', & & copyin='[ib_patch_id,center,ellipse_coeffs,inverse_rotation,rotation]', collapse=2) @@ -375,17 +375,17 @@ contains if ((xy_local(1)/ellipse_coeffs(1))**2 + (xy_local(2)/ellipse_coeffs(2))**2 <= 1._wp) then normal_vector = xy_local - normal_vector(2) = normal_vector(2) * (ellipse_coeffs(1)/ellipse_coeffs(2))**2._wp ! get the normal direction via the coordinate transofmration method - normal_vector = normal_vector / sqrt(dot_product(normal_vector, normal_vector)) ! normalize the vector + normal_vector(2) = normal_vector(2)*(ellipse_coeffs(1)/ellipse_coeffs(2))**2._wp ! get the normal direction via the coordinate transformation method + normal_vector = normal_vector/sqrt(dot_product(normal_vector, normal_vector)) ! normalize the vector levelset_norm%sf(i, j, 0, ib_patch_id, :) = matmul(rotation, normal_vector) ! save after rotating the vector to the global frame ! use the normal vector to set up the quadratic equation for the levelset, using A, B, and C in indices 1, 2, and 3 quadratic_coeffs(1) = (normal_vector(1)/ellipse_coeffs(1))**2 + (normal_vector(2)/ellipse_coeffs(2))**2 - quadratic_coeffs(2) = 2._wp * ((xy_local(1)*normal_vector(1)/(ellipse_coeffs(1)**2)) + (xy_local(2)*normal_vector(2)/(ellipse_coeffs(2)**2))) + quadratic_coeffs(2) = 2._wp*((xy_local(1)*normal_vector(1)/(ellipse_coeffs(1)**2)) + (xy_local(2)*normal_vector(2)/(ellipse_coeffs(2)**2))) quadratic_coeffs(3) = (xy_local(1)/ellipse_coeffs(1))**2._wp + (xy_local(2)/ellipse_coeffs(2))**2._wp - 1._wp ! compute the levelset with the quadratic equation [ -B + sqrt(B^2 - 4AC) ] / 2A - levelset%sf(i, j, 0, ib_patch_id) = -0.5_wp * (-quadratic_coeffs(2) + sqrt(quadratic_coeffs(2)**2._wp - 4._wp * quadratic_coeffs(1)*quadratic_coeffs(3))) / quadratic_coeffs(1) + levelset%sf(i, j, 0, ib_patch_id) = -0.5_wp*(-quadratic_coeffs(2) + sqrt(quadratic_coeffs(2)**2._wp - 4._wp*quadratic_coeffs(1)*quadratic_coeffs(3)))/quadratic_coeffs(1) end if end do end do diff --git a/src/common/m_ib_patches.fpp b/src/common/m_ib_patches.fpp index 8468d0b859..9d22479ab2 100644 --- a/src/common/m_ib_patches.fpp +++ b/src/common/m_ib_patches.fpp @@ -765,7 +765,6 @@ contains end subroutine s_ib_cylinder - subroutine s_ib_ellipse(patch_id, ib_markers_sf) integer, intent(in) :: patch_id @@ -780,8 +779,8 @@ contains ! Transferring the rectangle's centroid and length information center(1) = patch_ib(patch_id)%x_centroid center(2) = patch_ib(patch_id)%y_centroid - ellipse_coeffs(1) = 0.5_wp * patch_ib(patch_id)%length_x - ellipse_coeffs(2) = 0.5_wp * patch_ib(patch_id)%length_y + ellipse_coeffs(1) = 0.5_wp*patch_ib(patch_id)%length_x + ellipse_coeffs(2) = 0.5_wp*patch_ib(patch_id)%length_y inverse_rotation(:, :) = patch_ib(patch_id)%rotation_matrix_inverse(:, :) ! Checking whether the rectangle covers a particular cell in the diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 6105a43b3f..2ddc3580f7 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -98,7 +98,7 @@ contains moving_immersed_boundary_flag = .false. do i = 1, num_ibs if (patch_ib(i)%moving_ibm /= 0) then - call s_compute_moment_of_inertia(i, patch_ib(i)%angular_vel) + call s_compute_moment_of_inertia(i, patch_ib(i)%angular_vel) moving_immersed_boundary_flag = .true. end if call s_update_ib_rotation_matrix(i) @@ -207,16 +207,16 @@ contains if (patch_id /= 0) then q_prim_vf(E_idx)%sf(j, k, l) = 1._wp if (patch_ib(patch_id)%moving_ibm > 0._wp) then - rho = 0._wp - do i = 1, num_fluids - rho = rho + q_prim_vf(contxb+i-1)%sf(j, k, l) - end do - - ! Sets thhe momentum - do i = 1, num_dims - q_cons_vf(momxb+i-1)%sf(j, k, l) = patch_ib(patch_id)%vel(i) * rho - q_prim_vf(momxb+i-1)%sf(j, k, l) = patch_ib(patch_id)%vel(i) - end do + rho = 0._wp + do i = 1, num_fluids + rho = rho + q_prim_vf(contxb + i - 1)%sf(j, k, l) + end do + + ! Sets the momentum + do i = 1, num_dims + q_cons_vf(momxb + i - 1)%sf(j, k, l) = patch_ib(patch_id)%vel(i)*rho + q_prim_vf(momxb + i - 1)%sf(j, k, l) = patch_ib(patch_id)%vel(i) + end do end if end if end do @@ -1022,7 +1022,7 @@ contains integer :: gp_id, i, j, k, l, q, ib_idx real(wp), dimension(num_ibs, 3) :: forces, torques - real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations + real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel real(wp) :: cell_volume, dx, dy, dz @@ -1045,16 +1045,16 @@ contains dy = y_cc(j + 1) - y_cc(j) ! Get the pressure contribution to force via a finite difference to compute the 2D components of the gradient of the pressure and cell volume - local_force_contribution(1) = -1._wp * (q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) ! force is the negative pressure gradient - local_force_contribution(2) = -1._wp * (q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) + local_force_contribution(1) = -1._wp*(q_prim_vf(E_idx)%sf(i + 1, j, k) - q_prim_vf(E_idx)%sf(i - 1, j, k))/(2._wp*dx) ! force is the negative pressure gradient + local_force_contribution(2) = -1._wp*(q_prim_vf(E_idx)%sf(i, j + 1, k) - q_prim_vf(E_idx)%sf(i, j - 1, k))/(2._wp*dy) cell_volume = abs(dx*dy) ! add the 3D component of the pressure gradient, if we are working in 3 dimensions if (num_dims == 3) then dz = z_cc(k + 1) - z_cc(k) - local_force_contribution(3) = -1._wp * (q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) + local_force_contribution(3) = -1._wp*(q_prim_vf(E_idx)%sf(i, j, k + 1) - q_prim_vf(E_idx)%sf(i, j, k - 1))/(2._wp*dz) cell_volume = abs(cell_volume*dz) else - local_force_contribution(3) = 0._wp + local_force_contribution(3) = 0._wp end if ! Update the force values atomically to prevent race conditions @@ -1065,41 +1065,41 @@ contains ! if (.false.) then if (viscous) then ! get the linear force component first - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i-1, j, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i+1, j, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the viscous stress tensor - local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x componenets of the derivative to the force + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i - 1, j, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i + 1, j, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dx) ! get the x derivative of the viscous stress tensor + local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x components of the derivative to the force do l = 1, 3 - ! take the cross products for the torque componenet + ! take the cross products for the torque component call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dx) ! get the x derivative of the cross product + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dx) ! get the x derivative of the cross product local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque - - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j-1, k) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j+1, k) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j - 1, k) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j + 1, k) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dy) local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) do l = 1, 3 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dy) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dy) local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3) if (num_dims == 3) then - call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k-1) - call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k+1) - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k - 1) + call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k + 1) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dz) local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) do l = 1, 3 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1) / (2._wp * dz) + viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dz) local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3) end if end if @@ -1122,15 +1122,15 @@ contains ! consider body forces after reducing to avoid double counting do i = 1, num_ibs - if (bf_x) then - forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass - end if - if (bf_y) then - forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass - end if - if (bf_z) then - forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass - end if + if (bf_x) then + forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass + end if + if (bf_y) then + forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass + end if + if (bf_z) then + forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass + end if end do ! apply the summed forces @@ -1171,7 +1171,7 @@ contains ! if the IB is in 2D or a 3D sphere, we can compute this exactly if (patch_ib(ib_marker)%geometry == 2) then ! circle - patch_ib(ib_marker)%moment = 0.5_wp * patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 + patch_ib(ib_marker)%moment = 0.5_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2 elseif (patch_ib(ib_marker)%geometry == 3) then ! rectangle patch_ib(ib_marker)%moment = patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2)/6._wp elseif (patch_ib(ib_marker)%geometry == 6) then ! ellipse diff --git a/src/simulation/m_rhs.fpp b/src/simulation/m_rhs.fpp index 78570fc2ff..eb6f70cf11 100644 --- a/src/simulation/m_rhs.fpp +++ b/src/simulation/m_rhs.fpp @@ -1636,18 +1636,18 @@ contains if (viscous) then if (p > 0) then call s_compute_viscous_stress_cylindrical_boundary(q_prim_vf, & - dq_prim_dx_vf(mom_idx%beg:mom_idx%end), & - dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & - dq_prim_dz_vf(mom_idx%beg:mom_idx%end), & - tau_Re_vf, & - idwbuff(1), idwbuff(2), idwbuff(3)) + dq_prim_dx_vf(mom_idx%beg:mom_idx%end), & + dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & + dq_prim_dz_vf(mom_idx%beg:mom_idx%end), & + tau_Re_vf, & + idwbuff(1), idwbuff(2), idwbuff(3)) else call s_compute_viscous_stress_cylindrical_boundary(q_prim_vf, & - dq_prim_dx_vf(mom_idx%beg:mom_idx%end), & - dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & - dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & - tau_Re_vf, & - idwbuff(1), idwbuff(2), idwbuff(3)) + dq_prim_dx_vf(mom_idx%beg:mom_idx%end), & + dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & + dq_prim_dy_vf(mom_idx%beg:mom_idx%end), & + tau_Re_vf, & + idwbuff(1), idwbuff(2), idwbuff(3)) end if $:GPU_PARALLEL_LOOP(private='[i,j,l]', collapse=2) diff --git a/src/simulation/m_time_steppers.fpp b/src/simulation/m_time_steppers.fpp index 1a6b1fd18c..b196b3afa3 100644 --- a/src/simulation/m_time_steppers.fpp +++ b/src/simulation/m_time_steppers.fpp @@ -627,7 +627,7 @@ contains if (patch_ib(i)%moving_ibm == 2) then ! if we are using two-way coupling, apply force and torque ! compute the force and torque on the IB from the fluid - call s_compute_ib_forces(q_prim_vf, 1._wp / fluid_pp(1)%Re(1)) + call s_compute_ib_forces(q_prim_vf, 1._wp/fluid_pp(1)%Re(1)) ! update the velocity from the force value patch_ib(i)%vel = patch_ib(i)%vel + rk_coef(s, 3)*dt*(patch_ib(i)%force/patch_ib(i)%mass)/rk_coef(s, 4) diff --git a/src/simulation/m_viscous.fpp b/src/simulation/m_viscous.fpp index 855befec84..c6b053bdaf 100644 --- a/src/simulation/m_viscous.fpp +++ b/src/simulation/m_viscous.fpp @@ -21,7 +21,7 @@ module m_viscous use m_finite_differences private; public s_get_viscous, & - s_compute_viscous_stress_cylindrical_boundary, & + s_compute_viscous_stress_cylindrical_boundary, & s_initialize_viscous_module, & s_reconstruct_cell_boundary_values_visc_deriv, & s_finalize_viscous_module, & @@ -62,8 +62,8 @@ contains ! @param grad_y_vf Cell-average primitive variable derivatives, y-dir ! @param grad_z_vf Cell-average primitive variable derivatives, z-dir subroutine s_compute_viscous_stress_cylindrical_boundary(q_prim_vf, grad_x_vf, grad_y_vf, grad_z_vf, & - tau_Re_vf, & - ix, iy, iz) + tau_Re_vf, & + ix, iy, iz) type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf type(scalar_field), dimension(num_dims), intent(in) :: grad_x_vf, grad_y_vf, grad_z_vf @@ -1514,63 +1514,63 @@ contains ! computes the viscous stress tensor at a particule i, j, k element subroutine s_compute_viscous_stress_tensor(viscous_stress_tensor, q_prim_vf, dynamic_viscosity, i, j, k) - $:GPU_ROUTINE(parallelism='[seq]') - - real(wp), dimension(1:3, 1:3), intent(inout) :: viscous_stress_tensor - type(scalar_field), dimension(1:sys_size), intent(in) :: q_prim_vf - real(wp), intent(in) :: dynamic_viscosity - integer, intent(in) :: i, j, k - - real(wp), dimension(1:3, 1:3) :: velocity_gradient_tensor - real(wp), dimension(1:3) :: dx - real(wp) :: divergence - integer :: l, q ! iterators - - ! zero the viscous stress, collection of velocity diriviatives, and spacial finite differences - viscous_stress_tensor = 0._wp - velocity_gradient_tensor = 0._wp - dx = 0._wp - - ! get the change in x used in the finite difference equaiont - dx(1) = 0.5_wp * (x_cc(i+1) - x_cc(i-1)) - dx(2) = 0.5_wp * (y_cc(j+1) - y_cc(j-1)) - if (num_dims == 3) then - dx(3) = 0.5_wp * (z_cc(k+1) - z_cc(k-1)) - end if - - ! compute the velocity gradient tensor - do l = 1, num_dims - velocity_gradient_tensor(l,1) = (q_prim_vf(momxb+l-1)%sf(i+1, j, k) - q_prim_vf(momxb+l-1)%sf(i-1, j, k)) / (2._wp * dx(1)) - velocity_gradient_tensor(l,2) = (q_prim_vf(momxb+l-1)%sf(i, j+1, k) - q_prim_vf(momxb+l-1)%sf(i, j-1, k)) / (2._wp * dx(2)) - if (num_dims == 3) then - velocity_gradient_tensor(l,3) = (q_prim_vf(momxb+l-1)%sf(i, j, k+1) - q_prim_vf(momxb+l-1)%sf(i, j, k-1)) / (2._wp * dx(3)) - end if - end do - - ! compute divergence - divergence = 0._wp - do l = 1, num_dims - divergence = divergence + velocity_gradient_tensor(l, l) - end do - - ! set up the shear stress tensor - do l = 1, num_dims - do q = 1, num_dims - viscous_stress_tensor(l, q) = dynamic_viscosity * (velocity_gradient_tensor(l,q) + velocity_gradient_tensor(q,l)) - end do - end do - - ! populate the viscous_stress_tensor - do l = 1, num_dims - viscous_stress_tensor(l, l) = viscous_stress_tensor(l, l) - 2._wp * divergence * dynamic_viscosity / 3._wp - end do - - if (num_dims == 2) then - do l = 1, 3 - viscous_stress_tensor(3, l) = 0._wp - viscous_stress_tensor(l, 3) = 0._wp - end do - end if + $:GPU_ROUTINE(parallelism='[seq]') + + real(wp), dimension(1:3, 1:3), intent(inout) :: viscous_stress_tensor + type(scalar_field), dimension(1:sys_size), intent(in) :: q_prim_vf + real(wp), intent(in) :: dynamic_viscosity + integer, intent(in) :: i, j, k + + real(wp), dimension(1:3, 1:3) :: velocity_gradient_tensor + real(wp), dimension(1:3) :: dx + real(wp) :: divergence + integer :: l, q ! iterators + + ! zero the viscous stress, collection of velocity diriviatives, and spacial finite differences + viscous_stress_tensor = 0._wp + velocity_gradient_tensor = 0._wp + dx = 0._wp + + ! get the change in x used in the finite difference equaiont + dx(1) = 0.5_wp*(x_cc(i + 1) - x_cc(i - 1)) + dx(2) = 0.5_wp*(y_cc(j + 1) - y_cc(j - 1)) + if (num_dims == 3) then + dx(3) = 0.5_wp*(z_cc(k + 1) - z_cc(k - 1)) + end if + + ! compute the velocity gradient tensor + do l = 1, num_dims + velocity_gradient_tensor(l, 1) = (q_prim_vf(momxb + l - 1)%sf(i + 1, j, k) - q_prim_vf(momxb + l - 1)%sf(i - 1, j, k))/(2._wp*dx(1)) + velocity_gradient_tensor(l, 2) = (q_prim_vf(momxb + l - 1)%sf(i, j + 1, k) - q_prim_vf(momxb + l - 1)%sf(i, j - 1, k))/(2._wp*dx(2)) + if (num_dims == 3) then + velocity_gradient_tensor(l, 3) = (q_prim_vf(momxb + l - 1)%sf(i, j, k + 1) - q_prim_vf(momxb + l - 1)%sf(i, j, k - 1))/(2._wp*dx(3)) + end if + end do + + ! compute divergence + divergence = 0._wp + do l = 1, num_dims + divergence = divergence + velocity_gradient_tensor(l, l) + end do + + ! set up the shear stress tensor + do l = 1, num_dims + do q = 1, num_dims + viscous_stress_tensor(l, q) = dynamic_viscosity*(velocity_gradient_tensor(l, q) + velocity_gradient_tensor(q, l)) + end do + end do + + ! populate the viscous_stress_tensor + do l = 1, num_dims + viscous_stress_tensor(l, l) = viscous_stress_tensor(l, l) - 2._wp*divergence*dynamic_viscosity/3._wp + end do + + if (num_dims == 2) then + do l = 1, 3 + viscous_stress_tensor(3, l) = 0._wp + viscous_stress_tensor(l, 3) = 0._wp + end do + end if end subroutine s_compute_viscous_stress_tensor From e909026d788d5484e6ed8d999de4504804f8a222 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 9 Jan 2026 16:32:26 -0500 Subject: [PATCH 25/34] examples need to be commited for formatting as well --- examples/2D_mibm_shock_cylinder/case.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/2D_mibm_shock_cylinder/case.py b/examples/2D_mibm_shock_cylinder/case.py index b962b0c269..0ca5cbb635 100644 --- a/examples/2D_mibm_shock_cylinder/case.py +++ b/examples/2D_mibm_shock_cylinder/case.py @@ -2,7 +2,7 @@ import math # This case is a recreation of the case from "Moving overlapping grids with adaptive mesh refinement for high-speed reactive and non-reactive flow" -# by William D. Henshaw and Donald W. Schwendeman +# by William D. Henshaw and Donald W. Schwendeman # fluid parameters gam_a = 1.4 @@ -16,7 +16,7 @@ post_shock_density = 2.6069 post_shock_speed = 0.6944 -domain_size = 4. +domain_size = 4.0 wave_front = -1.5 total_time = 1.5 @@ -90,32 +90,32 @@ "parallel_io": "T", # Patch: Constant Tube filled with air # Specify the cylindrical air tube grid geometry - "patch_icpp(1)%geometry": 3, + "patch_icpp(1)%geometry": 3, "patch_icpp(2)%geometry": 3, - # patch locations + # patch locations "patch_icpp(1)%x_centroid": 0.5 * wave_front + 0.25 * domain_size, - "patch_icpp(1)%y_centroid": 0., + "patch_icpp(1)%y_centroid": 0.0, "patch_icpp(1)%length_x": 0.5 * domain_size - wave_front, "patch_icpp(1)%length_y": domain_size, "patch_icpp(2)%x_centroid": 0.5 * wave_front - 0.25 * domain_size, - "patch_icpp(2)%y_centroid": 0., + "patch_icpp(2)%y_centroid": 0.0, "patch_icpp(2)%length_x": 0.5 * domain_size + wave_front, "patch_icpp(2)%length_y": domain_size, # Specify the patch primitive variables "patch_icpp(1)%vel(1)": pre_shock_speed, "patch_icpp(1)%vel(2)": 0.0, "patch_icpp(1)%pres": pre_shock_pressure, - "patch_icpp(1)%alpha_rho(1)": pre_shock_density, + "patch_icpp(1)%alpha_rho(1)": pre_shock_density, "patch_icpp(1)%alpha(1)": 1.0e00, "patch_icpp(2)%vel(1)": post_shock_speed, "patch_icpp(2)%vel(2)": 0.0, "patch_icpp(2)%pres": post_shock_pressure, - "patch_icpp(2)%alpha_rho(1)": post_shock_density, + "patch_icpp(2)%alpha_rho(1)": post_shock_density, "patch_icpp(2)%alpha(1)": 1.0e00, # Patch: Cylinder Immersed Boundary "patch_ib(1)%geometry": 2, "patch_ib(1)%x_centroid": -0.5, - "patch_ib(1)%y_centroid": 0., + "patch_ib(1)%y_centroid": 0.0, "patch_ib(1)%radius": 0.5, "patch_ib(1)%slip": "T", "patch_ib(1)%moving_ibm": 2, From 5b3b328fd7352a5faa88353ee5e09c80ddf55309 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 9 Jan 2026 16:36:33 -0500 Subject: [PATCH 26/34] fixed normalization error in numeric moment of inertia calculation --- src/simulation/m_ibm.fpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 2ddc3580f7..176ebfd350 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1203,7 +1203,7 @@ contains end if ! project the position along the axis to find the closest distance to the rotation axis - closest_point_along_axis = normal_axis*dot_product(axis, position) + closest_point_along_axis = normal_axis*dot_product(normal_axis, position) vector_to_axis = position - closest_point_along_axis distance_to_axis = dot_product(vector_to_axis, vector_to_axis) ! saves the distance to the axis squared From e5cd3547d0229e36b57f5e18a9d6b8fd04108a97 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 9 Jan 2026 16:38:53 -0500 Subject: [PATCH 27/34] The normal axis in 2D is always z-hat --- src/simulation/m_ibm.fpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 176ebfd350..78243fa58c 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1160,7 +1160,7 @@ contains integer :: i, j, k, count if (p == 0) then - normal_axis = [0, 1, 0] + normal_axis = [0, 0, 1] else if (sqrt(sum(axis**2)) == 0) then ! if the object is not actually rotating at this time, return a dummy value and exit patch_ib(ib_marker)%moment = 1._wp From 7da350d961bcc5392c00b4521c4a9065d37a1999 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Fri, 9 Jan 2026 16:55:05 -0500 Subject: [PATCH 28/34] Cleared an old TODO for pre-process checking the ellipse patch --- src/pre_process/m_check_ib_patches.fpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/pre_process/m_check_ib_patches.fpp b/src/pre_process/m_check_ib_patches.fpp index 19493814e5..55595b0e98 100644 --- a/src/pre_process/m_check_ib_patches.fpp +++ b/src/pre_process/m_check_ib_patches.fpp @@ -63,7 +63,7 @@ contains patch_ib(i)%geometry == 12) then call s_check_model_ib_patch_geometry(i) else if (patch_ib(i)%geometry == 6) then - print *, "Ellipse Patch" + call s_check_ellipse_ib_patch_geometry(i) else call s_prohibit_abort("Invalid IB patch", & "patch_ib("//trim(iStr)//")%geometry must be "// & @@ -94,6 +94,25 @@ contains .or. f_is_default(patch_ib(patch_id)%y_centroid), & 'in circle IB patch '//trim(iStr)) + end subroutine s_check_circle_ib_patch_geometry + + !> This subroutine verifies that the geometric parameters of + !! the circle patch have consistently been inputted by the + !! user. + !! @param patch_id Patch identifier + impure subroutine s_check_ellipse_ib_patch_geometry(patch_id) + + integer, intent(in) :: patch_id + + call s_int_to_str(patch_id, iStr) + + @:PROHIBIT(n == 0 .or. p > 0 & + .or. patch_ib(patch_id)%length_x <= 0._wp & + .or. patch_ib(patch_id)%length_y <= 0._wp & + .or. f_is_default(patch_ib(patch_id)%x_centroid) & + .or. f_is_default(patch_ib(patch_id)%y_centroid), & + 'in ellipse IB patch '//trim(iStr)) + end subroutine s_check_circle_ib_patch_geometry !> This subroutine verifies that the geometric parameters of From 3c41c90e90b7201851d234fabc46675ec372e67b Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Sat, 10 Jan 2026 09:09:30 -0500 Subject: [PATCH 29/34] Error in ellipse ib patch check --- src/pre_process/m_check_ib_patches.fpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pre_process/m_check_ib_patches.fpp b/src/pre_process/m_check_ib_patches.fpp index 55595b0e98..25077feaf1 100644 --- a/src/pre_process/m_check_ib_patches.fpp +++ b/src/pre_process/m_check_ib_patches.fpp @@ -113,7 +113,7 @@ contains .or. f_is_default(patch_ib(patch_id)%y_centroid), & 'in ellipse IB patch '//trim(iStr)) - end subroutine s_check_circle_ib_patch_geometry + end subroutine s_check_ellipse_ib_patch_geometry !> This subroutine verifies that the geometric parameters of !! the airfoil patch have consistently been inputted by the From 137376d502a1c00c529c852f65695345ca5b79bf Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Sat, 10 Jan 2026 09:14:39 -0500 Subject: [PATCH 30/34] Ran formatting again --- src/pre_process/m_check_ib_patches.fpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pre_process/m_check_ib_patches.fpp b/src/pre_process/m_check_ib_patches.fpp index 25077feaf1..1b09929dda 100644 --- a/src/pre_process/m_check_ib_patches.fpp +++ b/src/pre_process/m_check_ib_patches.fpp @@ -96,8 +96,8 @@ contains end subroutine s_check_circle_ib_patch_geometry - !> This subroutine verifies that the geometric parameters of - !! the circle patch have consistently been inputted by the + !> This subroutine verifies that the geometric parameters of + !! the ellipse patch have consistently been inputted by the !! user. !! @param patch_id Patch identifier impure subroutine s_check_ellipse_ib_patch_geometry(patch_id) From e262ef9387a432cc58ead795fa521c27e17e29be Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Sat, 10 Jan 2026 09:27:51 -0500 Subject: [PATCH 31/34] Took recomendation for undefined behavior of same vector for in/out --- src/simulation/m_ibm.fpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 78243fa58c..8242227f13 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1023,13 +1023,13 @@ contains integer :: gp_id, i, j, k, l, q, ib_idx real(wp), dimension(num_ibs, 3) :: forces, torques real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations - real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel + real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel, viscous_cross_1, viscous_cross_2 real(wp) :: cell_volume, dx, dy, dz forces = 0._wp torques = 0._wp - $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity]', collapse=3) + $:GPU_PARALLEL_LOOP(private='[ib_idx,radial_vector,local_force_contribution,cell_volume,local_torque_contribution, viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, viscous_cross_1, viscous_cross_2, dx, dy, dz]', copy='[forces,torques]', copyin='[ib_markers,patch_ib,dynamic_viscosity]', collapse=3) do i = 0, m do j = 0, n do k = 0, p @@ -1071,11 +1071,11 @@ contains local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3) ! add te x components of the derivative to the force do l = 1, 3 ! take the cross products for the torque component - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dx) ! get the x derivative of the cross product + viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dx) ! get the x derivative of the cross product local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3) ! apply the cross product derivative to the torque call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j - 1, k) @@ -1083,11 +1083,11 @@ contains viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dy) local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3) do l = 1, 3 - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dy) + viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dy) local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3) if (num_dims == 3) then @@ -1096,10 +1096,10 @@ contains viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dz) local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3) do l = 1, 3 - call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_stress_div_1(l, 1:3)) - call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_stress_div_2(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3)) + call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3)) end do - viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dz) + viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dz) local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3) end if end if From 8e6ba64e0d3557eec57d7026bf007216cf2cd978 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Sat, 10 Jan 2026 09:31:06 -0500 Subject: [PATCH 32/34] Fixed build error --- src/simulation/m_ibm.fpp | 4 ++-- tests/5600D63B/golden-metadata.txt | 30 +++++++++++++++--------------- tests/7FA04E95/golden-metadata.txt | 30 +++++++++++++++--------------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 8242227f13..4cad91de5e 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -1022,8 +1022,8 @@ contains integer :: gp_id, i, j, k, l, q, ib_idx real(wp), dimension(num_ibs, 3) :: forces, torques - real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations - real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel, viscous_cross_1, viscous_cross_2 + real(wp), dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, viscous_cross_1, viscous_cross_2 ! viscous stress tensor with temp vectors to hold divergence calculations + real(wp), dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel real(wp) :: cell_volume, dx, dy, dz forces = 0._wp diff --git a/tests/5600D63B/golden-metadata.txt b/tests/5600D63B/golden-metadata.txt index 87feb7fece..54dc299d7b 100644 --- a/tests/5600D63B/golden-metadata.txt +++ b/tests/5600D63B/golden-metadata.txt @@ -1,12 +1,12 @@ -This file was created on 2026-01-09 16:23:05.537791. +This file was created on 2026-01-10 09:29:50.350999. mfc.sh: Invocation: test --generate -o 5600D63B Lock: mpi=Yes & gpu=No & debug=No & gcov=No & unified=No & single=No & mixed=No & fastmath=No - Git: 18b7dcc7ad3a66260613dd23a226cb2e258257d4 on viscous-stress-and-ellipse-ib (clean) + Git: e262ef9387a432cc58ead795fa521c27e17e29be on viscous-stress-and-ellipse-ib (dirty) -post_process: +pre_process: CMake Configuration: @@ -15,9 +15,9 @@ post_process: C : GNU v13.3.0 (/usr/bin/cc) Fortran : GNU v13.3.0 (/usr/bin/gfortran) - PRE_PROCESS : OFF + PRE_PROCESS : ON SIMULATION : OFF - POST_PROCESS : ON + POST_PROCESS : OFF SYSCHECK : OFF DOCUMENTATION : OFF ALL : OFF @@ -40,7 +40,7 @@ post_process: OMPI_CXX : OMPI_FC : -simulation: +syscheck: CMake Configuration: @@ -50,9 +50,9 @@ simulation: Fortran : GNU v13.3.0 (/usr/bin/gfortran) PRE_PROCESS : OFF - SIMULATION : ON + SIMULATION : OFF POST_PROCESS : OFF - SYSCHECK : OFF + SYSCHECK : ON DOCUMENTATION : OFF ALL : OFF @@ -74,7 +74,7 @@ simulation: OMPI_CXX : OMPI_FC : -pre_process: +simulation: CMake Configuration: @@ -83,8 +83,8 @@ pre_process: C : GNU v13.3.0 (/usr/bin/cc) Fortran : GNU v13.3.0 (/usr/bin/gfortran) - PRE_PROCESS : ON - SIMULATION : OFF + PRE_PROCESS : OFF + SIMULATION : ON POST_PROCESS : OFF SYSCHECK : OFF DOCUMENTATION : OFF @@ -108,7 +108,7 @@ pre_process: OMPI_CXX : OMPI_FC : -syscheck: +post_process: CMake Configuration: @@ -119,8 +119,8 @@ syscheck: PRE_PROCESS : OFF SIMULATION : OFF - POST_PROCESS : OFF - SYSCHECK : ON + POST_PROCESS : ON + SYSCHECK : OFF DOCUMENTATION : OFF ALL : OFF @@ -160,7 +160,7 @@ CPU: Core(s) per socket: 12 Socket(s): 1 Stepping: 2 - CPU(s) scaling MHz: 23% + CPU(s) scaling MHz: 32% CPU max MHz: 5100.0000 CPU min MHz: 800.0000 BogoMIPS: 7219.20 diff --git a/tests/7FA04E95/golden-metadata.txt b/tests/7FA04E95/golden-metadata.txt index 31c6dd7a52..5464c03831 100644 --- a/tests/7FA04E95/golden-metadata.txt +++ b/tests/7FA04E95/golden-metadata.txt @@ -1,12 +1,12 @@ -This file was created on 2026-01-09 16:27:49.075261. +This file was created on 2026-01-10 09:30:46.874399. mfc.sh: Invocation: test --generate -o 7FA04E95 Lock: mpi=Yes & gpu=No & debug=No & gcov=No & unified=No & single=No & mixed=No & fastmath=No - Git: 18b7dcc7ad3a66260613dd23a226cb2e258257d4 on viscous-stress-and-ellipse-ib (clean) + Git: e262ef9387a432cc58ead795fa521c27e17e29be on viscous-stress-and-ellipse-ib (dirty) -syscheck: +simulation: CMake Configuration: @@ -16,9 +16,9 @@ syscheck: Fortran : GNU v13.3.0 (/usr/bin/gfortran) PRE_PROCESS : OFF - SIMULATION : OFF + SIMULATION : ON POST_PROCESS : OFF - SYSCHECK : ON + SYSCHECK : OFF DOCUMENTATION : OFF ALL : OFF @@ -40,7 +40,7 @@ syscheck: OMPI_CXX : OMPI_FC : -simulation: +pre_process: CMake Configuration: @@ -49,8 +49,8 @@ simulation: C : GNU v13.3.0 (/usr/bin/cc) Fortran : GNU v13.3.0 (/usr/bin/gfortran) - PRE_PROCESS : OFF - SIMULATION : ON + PRE_PROCESS : ON + SIMULATION : OFF POST_PROCESS : OFF SYSCHECK : OFF DOCUMENTATION : OFF @@ -74,7 +74,7 @@ simulation: OMPI_CXX : OMPI_FC : -pre_process: +post_process: CMake Configuration: @@ -83,9 +83,9 @@ pre_process: C : GNU v13.3.0 (/usr/bin/cc) Fortran : GNU v13.3.0 (/usr/bin/gfortran) - PRE_PROCESS : ON + PRE_PROCESS : OFF SIMULATION : OFF - POST_PROCESS : OFF + POST_PROCESS : ON SYSCHECK : OFF DOCUMENTATION : OFF ALL : OFF @@ -108,7 +108,7 @@ pre_process: OMPI_CXX : OMPI_FC : -post_process: +syscheck: CMake Configuration: @@ -119,8 +119,8 @@ post_process: PRE_PROCESS : OFF SIMULATION : OFF - POST_PROCESS : ON - SYSCHECK : OFF + POST_PROCESS : OFF + SYSCHECK : ON DOCUMENTATION : OFF ALL : OFF @@ -160,7 +160,7 @@ CPU: Core(s) per socket: 12 Socket(s): 1 Stepping: 2 - CPU(s) scaling MHz: 18% + CPU(s) scaling MHz: 29% CPU max MHz: 5100.0000 CPU min MHz: 800.0000 BogoMIPS: 7219.20 From 626451875770df5e19e141eaac32311b7a8b6a49 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Sat, 10 Jan 2026 09:34:15 -0500 Subject: [PATCH 33/34] Fixed integer comparison with real --- src/simulation/m_ibm.fpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simulation/m_ibm.fpp b/src/simulation/m_ibm.fpp index 4cad91de5e..0b8ec1ab81 100644 --- a/src/simulation/m_ibm.fpp +++ b/src/simulation/m_ibm.fpp @@ -206,7 +206,7 @@ contains patch_id = ib_markers%sf(j, k, l) if (patch_id /= 0) then q_prim_vf(E_idx)%sf(j, k, l) = 1._wp - if (patch_ib(patch_id)%moving_ibm > 0._wp) then + if (patch_ib(patch_id)%moving_ibm > 0) then rho = 0._wp do i = 1, num_fluids rho = rho + q_prim_vf(contxb + i - 1)%sf(j, k, l) From ae1c63c785de3b8b25b5b74b61baab5ac153da11 Mon Sep 17 00:00:00 2001 From: danieljvickers Date: Sat, 10 Jan 2026 09:37:44 -0500 Subject: [PATCH 34/34] Small changed --- src/common/m_ib_patches.fpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/common/m_ib_patches.fpp b/src/common/m_ib_patches.fpp index 9d22479ab2..1bb00c44a3 100644 --- a/src/common/m_ib_patches.fpp +++ b/src/common/m_ib_patches.fpp @@ -776,17 +776,15 @@ contains real(wp), dimension(1:2) :: center !< x and y coordinates in local IB frame real(wp), dimension(1:3, 1:3) :: inverse_rotation - ! Transferring the rectangle's centroid and length information + ! Transferring the ellipse's centroid and length information center(1) = patch_ib(patch_id)%x_centroid center(2) = patch_ib(patch_id)%y_centroid ellipse_coeffs(1) = 0.5_wp*patch_ib(patch_id)%length_x ellipse_coeffs(2) = 0.5_wp*patch_ib(patch_id)%length_y inverse_rotation(:, :) = patch_ib(patch_id)%rotation_matrix_inverse(:, :) - ! Checking whether the rectangle covers a particular cell in the - ! domain and verifying whether the current patch has the permission - ! to write to that cell. If both queries check out, the primitive - ! variables of the current patch are assigned to this cell. + ! Checking whether the ellipse covers a particular cell in the + ! domain $:GPU_PARALLEL_LOOP(private='[i,j, xy_local]', copy='[ib_markers_sf]',& & copyin='[patch_id,center,ellipse_coeffs,inverse_rotation,x_cc,y_cc]', collapse=2) do j = 0, n