From c33b2e9e245ad471dcb76b5c06aae6533b3bfb74 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 18 Jul 2022 14:28:25 -0400 Subject: [PATCH] Changed the regotracking write tool to write out whole arrays of stacks rather than going layer-by-layer --- src/io/io_write_regotrack.f90 | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/io/io_write_regotrack.f90 b/src/io/io_write_regotrack.f90 index d76950e5..69b265ce 100644 --- a/src/io/io_write_regotrack.f90 +++ b/src/io/io_write_regotrack.f90 @@ -34,10 +34,12 @@ subroutine io_write_regotrack(user,surf) integer(I4B), parameter :: FAGE = 13 type(regolisttype),pointer :: current => null() integer(I4B),dimension(user%gridsize,user%gridsize) :: stacks_num + real(DP),dimension(:),allocatable :: meltfrac, thickness, comp + real(SP),dimension(:,:),allocatable :: age integer(kind=8) :: recsize real(DP) :: dtmp real(SP) :: stmp - integer(I4B) :: itmp + integer(I4B) :: itmp, N real(DP),dimension(user%gridsize,user%gridsize) :: comptop, rego real(DP),dimension(:),allocatable :: marehisto @@ -47,6 +49,7 @@ subroutine io_write_regotrack(user,surf) open(FCOMP,file=COMPFILE,status='replace',form='unformatted') open(FAGE,file=AGEFILE,status='replace',form='unformatted') + ! First pass to get stack numbers stacks_num(:,:) = 0 do j=1,user%gridsize do i=1,user%gridsize @@ -54,14 +57,31 @@ subroutine io_write_regotrack(user,surf) do if (.not. associated(current)) exit ! We've reached the bottom of the linked list stacks_num(i,j) = stacks_num(i,j) + 1 - write(FMELT) current%regodata%meltfrac - write(FREGO) current%regodata%thickness - write(FCOMP) current%regodata%comp - write(FAGE) current%regodata%age(:) current => current%next end do end do end do + + ! Second pass to get data and save it + do j=1,user%gridsize + do i=1,user%gridsize + current => surf(i,j)%regolayer + N = stacks_num(i,j) + allocate(meltfrac(N),thickness(N),comp(N),age(MAXAGEBINS,N)) + do k=1,N + meltfrac(k) = current%regodata%meltfrac + thickness(k) = current%regodata%thickness + comp(k) = current%regodata%comp + age(:,k) = current%regodata%age(:) + current => current%next + end do + write(FMELT) meltfrac(:) + write(FREGO) thickness(:) + write(FCOMP) comp(:) + write(FAGE) age(:,:) + deallocate(meltfrac,thickness,comp,age) + end do + end do close(FMELT) close(FREGO) close(FCOMP)