Skip to content
This repository was archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
Restructured encounter io with new dimension for the collidiers so I …
Browse files Browse the repository at this point in the history
…can reuse the regular variables from before
  • Loading branch information
daminton committed Dec 2, 2022
1 parent 3154dfa commit 88489cb
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 50 deletions.
46 changes: 30 additions & 16 deletions src/encounter/encounter_io.f90
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ module subroutine encounter_io_initialize_output(self, param)
call check( nf90_def_dim(self%ncid, ENCID_DIMNAME, NF90_UNLIMITED, self%encid_dimid), "encounter_io_initialize_output nf90_def_dim encid_dimid" )
call check( nf90_def_dim(self%ncid, STR_DIMNAME, NAMELEN, self%str_dimid), "encounter_io_initialize_output nf90_def_dim str_dimid" ) ! Dimension for string variables (aka character arrays)
call check( nf90_def_dim(self%ncid, TIME_DIMNAME, NF90_UNLIMITED, self%time_dimid), "encounter_io_initialize_output nf90_def_dim time_dimid" ) ! 'y' dimension
call check( nf90_def_dim(self%ncid, COLLIDER_DIMNAME, COLLIDER_DIM_SIZE, self%collider_dimid), "encounter_io_initialize_output nf90_def_dim time_dimid" ) ! 'y' dimension

select case (param%out_type)
case("NETCDF_FLOAT")
Expand All @@ -65,21 +66,16 @@ module subroutine encounter_io_initialize_output(self, param)

call check( nf90_def_var(self%ncid, TIME_DIMNAME, self%out_type, self%time_dimid, self%time_varid), "encounter_io_initialize_output nf90_def_var time_varid" )
call check( nf90_def_var(self%ncid, ENCID_DIMNAME, NF90_INT, self%encid_dimid, self%encid_varid), "encounter_io_initialize_output nf90_def_var encid_varid" )
call check( nf90_def_var(self%ncid, COLLIDER_DIMNAME, NF90_INT, self%collider_dimid, self%encid_varid), "encounter_io_initialize_output nf90_def_var collider_varid" )
call check( nf90_def_var(self%ncid, NENC_VARNAME, NF90_INT, self%time_dimid, self%nenc_varid), "encounter_io_initialize_output nf90_def_var nenc_varid" )
call check( nf90_def_var(self%ncid, ID1_VARNAME, NF90_INT, [self%encid_dimid, self%time_dimid], self%id1_varid), "encounter_io_initialize_output nf90_def_var id1_varid" )
call check( nf90_def_var(self%ncid, ID2_VARNAME, NF90_INT, [self%encid_dimid, self%time_dimid], self%id2_varid), "encounter_io_initialize_output nf90_def_var id2_varid" )
call check( nf90_def_var(self%ncid, X1X_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%x1x_varid), "encounter_io_initialize_output nf90_def_var x1x_varid" )
call check( nf90_def_var(self%ncid, X1Y_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%x1y_varid), "encounter_io_initialize_output nf90_def_var x1y_varid" )
call check( nf90_def_var(self%ncid, X1Z_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%x1z_varid), "encounter_io_initialize_output nf90_def_var x1z_varid" )
call check( nf90_def_var(self%ncid, X2X_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%x2x_varid), "encounter_io_initialize_output nf90_def_var x2x_varid" )
call check( nf90_def_var(self%ncid, X2Y_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%x2y_varid), "encounter_io_initialize_output nf90_def_var x2y_varid" )
call check( nf90_def_var(self%ncid, X2Z_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%x2z_varid), "encounter_io_initialize_output nf90_def_var x2z_varid" )
call check( nf90_def_var(self%ncid, V1X_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%v1x_varid), "encounter_io_initialize_output nf90_def_var v1x_varid" )
call check( nf90_def_var(self%ncid, V1Y_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%v1y_varid), "encounter_io_initialize_output nf90_def_var v1y_varid" )
call check( nf90_def_var(self%ncid, V1Z_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%v1z_varid), "encounter_io_initialize_output nf90_def_var v1z_varid" )
call check( nf90_def_var(self%ncid, V2X_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%v2x_varid), "encounter_io_initialize_output nf90_def_var v2x_varid" )
call check( nf90_def_var(self%ncid, V2Y_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%v2y_varid), "encounter_io_initialize_output nf90_def_var v2y_varid" )
call check( nf90_def_var(self%ncid, V2Z_VARNAME, self%out_type, [self%encid_dimid, self%time_dimid], self%v2z_varid), "encounter_io_initialize_output nf90_def_var v2z_varid" )
call check( nf90_def_var(self%ncid, NAME_VARNAME, NF90_CHAR, [self%str_dimid, self%collider_dimid, self%encid_dimid], self%name_varid), "encounter_io_initialize_output nf90_def_var name_varid" )
call check( nf90_def_var(self%ncid, ID_DIMNAME, NF90_INT, [self%collider_dimid, self%encid_dimid, self%time_dimid], self%id_varid), "encounter_io_initialize_output nf90_def_var id_varid" )
call check( nf90_def_var(self%ncid, XHX_VARNAME, self%out_type, [self%collider_dimid, self%encid_dimid, self%time_dimid], self%xhx_varid), "encounter_io_initialize_output nf90_def_var xhx_varid" )
call check( nf90_def_var(self%ncid, XHY_VARNAME, self%out_type, [self%collider_dimid, self%encid_dimid, self%time_dimid], self%xhy_varid), "encounter_io_initialize_output nf90_def_var xhy_varid" )
call check( nf90_def_var(self%ncid, XHZ_VARNAME, self%out_type, [self%collider_dimid, self%encid_dimid, self%time_dimid], self%xhz_varid), "encounter_io_initialize_output nf90_def_var xhz_varid" )
call check( nf90_def_var(self%ncid, VHX_VARNAME, self%out_type, [self%collider_dimid, self%encid_dimid, self%time_dimid], self%vhx_varid), "encounter_io_initialize_output nf90_def_var vhx_varid" )
call check( nf90_def_var(self%ncid, VHY_VARNAME, self%out_type, [self%collider_dimid, self%encid_dimid, self%time_dimid], self%vhy_varid), "encounter_io_initialize_output nf90_def_var vhy_varid" )
call check( nf90_def_var(self%ncid, VHZ_VARNAME, self%out_type, [self%collider_dimid, self%encid_dimid, self%time_dimid], self%vhz_varid), "encounter_io_initialize_output nf90_def_var vhz_varid" )
call check( nf90_def_var(self%ncid, LEVEL_VARNAME, NF90_INT, [self%encid_dimid, self%time_dimid], self%level_varid), "encounter_io_initialize_output nf90_def_var level_varid" )


Expand All @@ -105,17 +101,35 @@ module subroutine encounter_io_open_file(self, param, readonly)
logical, optional, intent(in) :: readonly !! Logical flag indicating that this should be open read only
! Internals
integer(I4B) :: mode, status
character(len=NF90_MAX_NAME) :: str_dim_name
character(len=STRMAX) :: errmsg

mode = NF90_WRITE
if (present(readonly)) then
if (readonly) mode = NF90_NOWRITE
end if

write(errmsg,*) "netcdf_open nf90_open ",trim(adjustl(param%outfile))
write(errmsg,*) "encounter_io_open_file nf90_open ",trim(adjustl(param%outfile))
call check( nf90_open(self%outfile, mode, self%ncid), errmsg)

call check( nf90_inq_dimid(self%ncid, TIME_DIMNAME, self%time_dimid), "encounter_io_open_file nf90_inq_dimid time_dimid" )
call check( nf90_inq_dimid(self%ncid, ENCID_DIMNAME, self%encid_dimid), "encounter_io_open_file nf90_inq_dimid encid_dimid" )
call check( nf90_inq_dimid(self%ncid, COLLIDER_DIMNAME, self%collider_dimid), "encounter_io_open_file nf90_inq_dimid collider_dimid" )
call check( nf90_inq_dimid(self%ncid, STR_DIMNAME, self%str_dimid), "encounter_io_open_file nf90_inq_dimid collider_str" )

call check( nf90_inq_varid(self%ncid, TIME_DIMNAME, self%time_varid), "encounter_io_open_file nf90_inq_varid time_varid" )
call check( nf90_inq_varid(self%ncid, ENCID_DIMNAME, self%encid_varid), "encounter_io_open_file nf90_inq_varid encid_varid" )
call check( nf90_inq_varid(self%ncid, COLLIDER_DIMNAME, self%collider_varid), "encounter_io_open_file nf90_inq_varid collider_varid" )
call check( nf90_inq_varid(self%ncid, NAME_VARNAME, self%name_varid), "encounter_io_open_file nf90_inq_varid name_varid" )
call check( nf90_inq_varid(self%ncid, NENC_VARNAME, self%nenc_varid), "encounter_io_open_file nf90_inq_varid nenc_varid" )

call check( nf90_inq_varid(self%ncid, XHX_VARNAME, self%xhx_varid), "encounter_io_open_file nf90_inq_varid xhx_varid" )
call check( nf90_inq_varid(self%ncid, XHY_VARNAME, self%xhy_varid), "encounter_io_open_file nf90_inq_varid xhy_varid" )
call check( nf90_inq_varid(self%ncid, XHZ_VARNAME, self%xhz_varid), "encounter_io_open_file nf90_inq_varid xhz_varid" )
call check( nf90_inq_varid(self%ncid, VHX_VARNAME, self%vhx_varid), "encounter_io_open_file nf90_inq_varid vhx_varid" )
call check( nf90_inq_varid(self%ncid, VHY_VARNAME, self%vhy_varid), "encounter_io_open_file nf90_inq_varid vhy_varid" )
call check( nf90_inq_varid(self%ncid, VHZ_VARNAME, self%vhz_varid), "encounter_io_open_file nf90_inq_varid vhz_varid" )
call check( nf90_inq_varid(self%ncid, LEVEL_VARNAME, self%level_varid), "encounter_io_open_file nf90_inq_varid level_varid" )

return
end subroutine encounter_io_open_file

Expand Down
43 changes: 10 additions & 33 deletions src/modules/encounter_classes.f90
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,6 @@ module encounter_classes
public

integer(I4B), parameter :: SWEEPDIM = 3
!! NetCDF dimension and variable names for the enounter save object
character(*), parameter :: ENCID_DIMNAME = "encounter"
character(*), parameter :: NENC_VARNAME = "nenc"
character(*), parameter :: ID1_VARNAME = "id1"
character(*), parameter :: ID2_VARNAME = "id2"
character(*), parameter :: X1X_VARNAME = "x1x"
character(*), parameter :: X1Y_VARNAME = "x1y"
character(*), parameter :: X1Z_VARNAME = "x1z"
character(*), parameter :: X2X_VARNAME = "x2x"
character(*), parameter :: X2Y_VARNAME = "x2y"
character(*), parameter :: X2Z_VARNAME = "x2z"
character(*), parameter :: V1X_VARNAME = "v1x"
character(*), parameter :: V1Y_VARNAME = "v1y"
character(*), parameter :: V1Z_VARNAME = "v1z"
character(*), parameter :: V2X_VARNAME = "v2x"
character(*), parameter :: V2Y_VARNAME = "v2y"
character(*), parameter :: V2Z_VARNAME = "v2z"
character(*), parameter :: LEVEL_VARNAME = "level"

type :: encounter_list
integer(I8B) :: nenc = 0 !! Total number of encounters
Expand Down Expand Up @@ -64,26 +46,21 @@ module encounter_classes
contains
procedure :: dump => encounter_io_dump_storage_list
end type encounter_storage


!! NetCDF dimension and variable names for the enounter save object
character(*), parameter :: ENCID_DIMNAME = "encounter" !! The index of the encountering pair in the encounter list
character(*), parameter :: COLLIDER_DIMNAME = "collider" !! Dimension that defines the colliding bodies (bodies 1 and 2 are at dimension coordinates 1 and 2, respectively)
integer(I4B), parameter :: COLLIDER_DIM_SIZE = 2 !! Size of collider dimension
character(*), parameter :: NENC_VARNAME = "nenc" !! Total number of encounters
character(*), parameter :: LEVEL_VARNAME = "level" !! Recursion depth

type, extends(netcdf_parameters) :: encounter_io_parameters
character(STRMAX) :: outfile = "encounter.nc" !! Encounter output file name
integer(I4B) :: encid_dimid !! NetCDF ID for the encounter pair index dimension
integer(I4B) :: collider_dimid !! NetCDF ID for the collider dimension
integer(I4B) :: collider_varid !! NetCDF ID for the collider variable
integer(I4B) :: encid_varid !! NetCDF ID for the encounter pair index variable
integer(I4B) :: nenc_varid !! NetCDF ID for the number of encounters variable
integer(I4B) :: id1_varid !! NetCDF ID for the id1 of the encounter variable
integer(I4B) :: id2_varid !! NetCDF ID for the id2 of the encounter variable
integer(I4B) :: x1x_varid !! NetCDF ID for the body1 x position variable
integer(I4B) :: x1y_varid !! NetCDF ID for the body1 y position variable
integer(I4B) :: x1z_varid !! NetCDF ID for the body1 z position variable
integer(I4B) :: x2x_varid !! NetCDF ID for the body2 x position variable
integer(I4B) :: x2y_varid !! NetCDF ID for the body2 y position variable
integer(I4B) :: x2z_varid !! NetCDF ID for the body2 z position variable
integer(I4B) :: v1x_varid !! NetCDF ID for the body1 x velocity variable
integer(I4B) :: v1y_varid !! NetCDF ID for the body1 y velocity variable
integer(I4B) :: v1z_varid !! NetCDF ID for the body1 z velocity variable
integer(I4B) :: v2x_varid !! NetCDF ID for the body2 x velocity variable
integer(I4B) :: v2y_varid !! NetCDF ID for the body2 y velocity variable
integer(I4B) :: v2z_varid !! NetCDF ID for the body2 z velocity variable
integer(I4B) :: level_varid !! NetCDF ID for the recursion level variable

contains
Expand Down
1 change: 0 additions & 1 deletion src/modules/swiftest_globals.f90
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,6 @@ module swiftest_globals
type :: netcdf_variables
integer(I4B) :: out_type !! NetCDF output type (will be assigned either NF90_DOUBLE or NF90_FLOAT, depending on the user parameter)
integer(I4B) :: ncid !! NetCDF ID for the output file
integer(I4B) :: dimids(3) !! Dimensions of the NetCDF file
integer(I4B) :: time_dimid !! NetCDF ID for the time dimension
integer(I4B) :: id_dimid !! NetCDF ID for the particle id dimension
integer(I4B) :: str_dimid !! NetCDF ID for the character string dimension
Expand Down

0 comments on commit 88489cb

Please sign in to comment.