Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
74373c4
Changes to gp_class
Nov 21, 2025
439e4a5
Added a z component to the gp_class ibm labels for 3d cases
Dec 17, 2025
b1a517f
Current instance of the spherical case we are running
ivmauser Jan 26, 2026
50b446a
Beam Test Current State
ivmauser Mar 31, 2026
cbcd023
Now corrected to find dilatation corrections without compounding effects
ivmauser Apr 1, 2026
9133e3a
Plate With Hole Current
ivmauser Apr 7, 2026
d7853da
Some Updates
ivmauser Apr 14, 2026
1bcbcb6
Beam under tension case with artificial damping for steady state
ivmauser Apr 22, 2026
fa1d9b1
NOSB Initial Implementation
ivmauser Apr 30, 2026
9b7fda0
Slightly more efficient memory allocation
ivmauser Apr 30, 2026
41434d8
Implemented cubic, also fixed nb (1 is now ok based on sizing?)
ivmauser May 1, 2026
07d4035
Cirrection to how traceE is stored, added comment
ivmauser May 4, 2026
8ecdc04
Now should only apply force on end particle, and maintain length
ivmauser May 5, 2026
8ca3882
Correction to ensure middle term
ivmauser May 5, 2026
8bb7e19
NOSB Plate with hole case
ivmauser May 7, 2026
17a2cd9
Now have separate cooldown and continuous or not for damping
ivmauser May 7, 2026
db7a31e
Removed extra print statement from debugging
ivmauser May 7, 2026
d0d97b6
NOSB Cylinder case (potentially corrected putting particles outside t…
ivmauser Jun 28, 2026
def4010
temporary back up of Jesse's original implementation
ivmauser Jul 1, 2026
3750e19
Updates to simulation.f90
ivmauser Jul 1, 2026
045b4ca
Some amr and pd for peridigm
ivmauser Sep 4, 2026
e0ceb2c
work in progress peridigm plate with hole test
ivmauser Sep 4, 2026
c26ea8e
Working in serial only, same results as non-peridigm implementation
ivmauser Sep 9, 2026
82ca7a9
WIP, generalization of OSB and NOSB
ivmauser Sep 14, 2026
b3de659
Still ongoing, coupling seems working, testing flow in channel
ivmauser Sep 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,5 @@ examples/*/input*~
!examples/compressible_taylor_green/dns.tke
!examples/compressible_taylor_green/plot.me
!examples/amrcomp_drop/scripts
nga2_key
nga2_key.pub
49 changes: 49 additions & 0 deletions examples/NOSB/GNUmakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# NGA location if not yet defined
NGA_HOME ?= ~/nga2/Repositories/nga2

# Compilation parameters
PRECISION = DOUBLE
USE_MPI = TRUE
USE_HYPRE = TRUE
USE_LAPACK= TRUE
USE_FFTW = TRUE
USE_IRL = FALSE
PROFILE = FALSE
DEBUG = FALSE
COMP = gnu
EXEBASE = nga

# Directories that contain user-defined code
Udirs := src

# Include user-defined sources
Upack += $(foreach dir, $(Udirs), $(wildcard $(dir)/Make.package))
Ulocs += $(foreach dir, $(Udirs), $(wildcard $(dir)))
include $(Upack)
INCLUDE_LOCATIONS += $(Ulocs)
VPATH_LOCATIONS += $(Ulocs)

# External libraries are defined in .profile/.bashrc/.zshrc, but could be defined here as well
HYPRE_DIR=/Users/imauser/nga2/Repositories/hypre/src/hypre
FFTW_DIR=/opt/homebrew/Cellar/fftw/3.3.10_2

# NGA compilation definitions
include $(NGA_HOME)/tools/GNUMake/Make.defs

# Include NGA base code
Bdirs := constant_density particles core data transform solver config grid libraries
Bpack += $(foreach dir, $(Bdirs), $(NGA_HOME)/src/$(dir)/Make.package)
include $(Bpack)

# Inform user of Make.packages used
ifdef Ulocs
$(info Taking user code from: $(Ulocs))
endif
$(info Taking base code from: $(Bdirs))

# Target definition
all: $(executable)
@echo COMPILATION SUCCESSFUL

# NGA compilation rules
include $(NGA_HOME)/tools/GNUMake/Make.rules
30 changes: 30 additions & 0 deletions examples/NOSB/input
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Parallelization
Partition : 9 1 1


# Beam Shape
Lz : 0.01
Ly : 0.01
Lx : .1
R : 0.000
Particle file: element_data.bin

# Solid properties
Subdivisions : 33
Elastic Modulus : 200e9
Poisson Ratio : 0.30
Solid density : 7850
Critical Energy Release Rate : 100000
Horizon Ratio : 3.015
N Across : 9
Mean Particle Spacing : 0.00125
Solid Load : 1e3
Solid Damping Constant : 0.015

# Time integration
Max timestep size : 3.0e-7
Max cfl number : 1.3
Max time : 10

# Ensight output
Ensight output period : 1e-5
2 changes: 2 additions & 0 deletions examples/NOSB/src/Make.package
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# List here the extra files here
f90EXE_sources += simulation.f90 geometry.f90 lss_class.f90 spcomp_class.f90
138 changes: 138 additions & 0 deletions examples/NOSB/src/geometry.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
!> Various definitions and tools for initializing NGA2 config
module geometry
use config_class, only: config
use precision, only: WP
implicit none
private

!> Single config
type(config), public :: cfg

public :: geometry_init

contains


!> Initialization of problem geometry
subroutine geometry_init
use sgrid_class, only: sgrid
use param, only: param_read
implicit none
type(sgrid) :: grid


! Create a grid from input params
create_grid: block
use sgrid_class, only: cartesian
integer :: i,j,k,nx,ny,nz,N
real(WP) :: Lx,Ly,Lz,dist,dx,R
real(WP), dimension(:), allocatable :: x,y,z

call param_read('Lx',Lx)
call param_read('Ly',Ly)
call param_read('Lz',Lz)
call param_read('R',R)
call param_read('N Across',N)

! Lx = 1.0_WP ! beam length
! Ly = 1.0_WP ! beam length

! dist = 0.01_WP ! Space between particles
dist = Ly/N
Lx = Lx + 3.0_WP*(3.015_WP) * dist ! total length of the beam
! Ly = Ly + 3.0_WP * dist ! total length of the beam

dx = 3.015_WP*dist ! grid spacing
! print*, "Grid Spacing : ", dx

nx = ceiling(Lx/dx)+2 ! number of division in x
ny = ceiling(Ly/dx)+2
nz = ceiling(Lz/dx)+2

allocate(x(nx+1))
allocate(y(ny+1))
allocate(z(nz+1))

! Create simple rectilinear grid
do i=1,nx+1
x(i)=real(i-2,WP)*dx - Lx/2.0_WP - 1.5_WP*dist
end do
do j=1,ny+1
y(j)=real(j-2,WP)*dx - Ly/2.0_WP - 1.5_WP*dist
end do
do k=1,nz+1
z(k)=real(k-2,WP)*dx - Lz/2.0_WP - 1.5_WP*dist
end do
! General serial grid object (no=3 needed to support ghost/image point interpolation/extrapolation)
grid=sgrid(coord=cartesian,no=3,x=x,y=y,z=z,xper=.false.,yper=.false.,zper=.false.,name='box')

end block create_grid

! create_grid: block
! use sgrid_class, only: cartesian
! integer :: i,j,k,nx,ny,nz
! real(WP) :: Lx,Ly,Lz,dist
! real(WP), dimension(:), allocatable :: x,y,z

! ! Read in grid definition
! call param_read('Lx',Lx); Lx=Lx
! call param_read('Ly',Ly); Ly=Ly
! call param_read('Lz',Lz); Lz=Lz
! call param_read('Subdivisions',ny)
! dist = 3.0_WP * Ly / real(ny,WP)
! Lx = Lx + 3.0_WP * dist
! nx = ceiling(Lx / dist) + 4
! ny = ceiling(Ly / dist) + 2
! nz = ceiling(Lz / dist) + 2

! Lx = real(nx,WP) * dist
! Ly = real(ny,WP) * dist
! Lz = real(nz,WP) * dist


! allocate(x(nx))
! allocate(y(ny+1))
! allocate(z(nz+1))


! ! Create simple rectilinear grid
! do i=1,nx
! x(i)=real(i-2,WP)*dist
! end do
! do j=1,ny+1
! y(j)=real(j-1,WP)*dist-0.5_WP*Ly
! end do
! do k=1,nz+1
! z(k)=real(k-1,WP)*dist-0.5_WP*Lz
! end do




! ! General serial grid object (no=3 needed to support ghost/image point interpolation/extrapolation)
! grid=sgrid(coord=cartesian,no=2,x=x,y=y,z=z,xper=.false.,yper=.false.,zper=.false.,name='box')

! end block create_grid


! Create a config from that grid on our entire group
create_cfg: block
use parallel, only: group
integer, dimension(3) :: partition
! Read in partition
call param_read('Partition',partition,short='p')
! Create partitioned grid
cfg=config(grp=group,decomp=partition,grid=grid)
end block create_cfg


! Create walls for this config
create_walls: block
cfg%VF=1.0_WP
end block create_walls


end subroutine geometry_init


end module geometry
Loading