diff --git a/src/regolith/module_regolith.f90 b/src/regolith/module_regolith.f90 index befe69a6..90e1e030 100644 --- a/src/regolith/module_regolith.f90 +++ b/src/regolith/module_regolith.f90 @@ -235,8 +235,9 @@ end subroutine regolith_subcrater_mix end interface interface - subroutine regolith_mix(surfi,mixing_depth,domain) + subroutine regolith_mix(user,surfi,mixing_depth,domain) use module_globals + type(usertype),intent(in) :: user type(surftype),intent(inout) :: surfi real(DP),intent(in) :: mixing_depth type(domaintype),intent(in) :: domain diff --git a/src/regolith/regolith_interior.f90 b/src/regolith/regolith_interior.f90 index 3f33e8ee..d1bf119a 100644 --- a/src/regolith/regolith_interior.f90 +++ b/src/regolith/regolith_interior.f90 @@ -62,7 +62,7 @@ subroutine regolith_interior(user,surf,crater,domain,incval,nmeltsheet,vmeltshee lradsq = x_relative**2 + y_relative**2 if (lradsq > crater%frad**2) cycle - call util_traverse_pop_array(surf(xpi,ypi)%regolayer,surf(xpi,ypi)%abselc,poppedarray) + call util_traverse_pop_array(user,surf(xpi,ypi)%regolayer,surf(xpi,ypi)%abselc,poppedarray) deallocate(poppedarray) !fill top layer with melt sheet of given thickness hmeltsheet diff --git a/src/regolith/regolith_mix.f90 b/src/regolith/regolith_mix.f90 index a7b36668..ab5c72be 100644 --- a/src/regolith/regolith_mix.f90 +++ b/src/regolith/regolith_mix.f90 @@ -16,13 +16,14 @@ ! Notes : ! !********************************************************************************************************************************** -subroutine regolith_mix(surfi,mixing_depth,domain) +subroutine regolith_mix(user,surfi,mixing_depth,domain) use module_globals use module_util use module_regolith, EXCEPT_THIS_ONE => regolith_mix implicit none ! Arguments + type(usertype),intent(in) :: user type(surftype),intent(inout) :: surfi real(DP), intent(in) :: mixing_depth type(domaintype),intent(in) :: domain @@ -40,7 +41,7 @@ subroutine regolith_mix(surfi,mixing_depth,domain) ! if(domain%currentqmc .eqv. .true.) then ! j = 0 ! end if - call util_traverse_pop_array(surfi%regolayer,mixing_depth,poppedarray) + call util_traverse_pop_array(user,surfi%regolayer,mixing_depth,poppedarray) newlayer%thickness = 0.0_DP newlayer%comp = 0.0_DP diff --git a/src/regolith/regolith_subcrater_mix.f90 b/src/regolith/regolith_subcrater_mix.f90 index ae40822f..967c5a25 100644 --- a/src/regolith/regolith_subcrater_mix.f90 +++ b/src/regolith/regolith_subcrater_mix.f90 @@ -66,7 +66,7 @@ subroutine regolith_subcrater_mix(user,surf,domain,nflux,finterval,p) N = size(surf(i,j)%regolayer) if (surf(i,j)%regolayer(N)%thickness < dd) then - call regolith_mix(surf(i,j),dd,domain) + call regolith_mix(user,surf(i,j),dd,domain) end if end do diff --git a/src/util/module_util.f90 b/src/util/module_util.f90 index 1c90f2be..26ecb045 100644 --- a/src/util/module_util.f90 +++ b/src/util/module_util.f90 @@ -83,9 +83,10 @@ end subroutine util_pop ! end interface interface - subroutine util_traverse_pop_array(regolayer,traverse_depth,poppedarray) + subroutine util_traverse_pop_array(user,regolayer,traverse_depth,poppedarray) use module_globals implicit none + type(usertype),intent(in) :: user type(regodatatype),dimension(:),allocatable,intent(inout) :: regolayer real(DP),intent(in) :: traverse_depth type(regodatatype),dimension(:),allocatable,intent(out) :: poppedarray diff --git a/src/util/util_traverse_pop_array.f90 b/src/util/util_traverse_pop_array.f90 index cf5daf97..3ba03cbc 100644 --- a/src/util/util_traverse_pop_array.f90 +++ b/src/util/util_traverse_pop_array.f90 @@ -18,13 +18,14 @@ ! Notes : Popped list will be in reversed order from the original list ! !********************************************************************************************************************************** -subroutine util_traverse_pop_array(regolayer,traverse_depth,poppedarray) +subroutine util_traverse_pop_array(user,regolayer,traverse_depth,poppedarray) use module_globals use module_util, EXCEPT_THIS_ONE => util_traverse_pop_array implicit none ! Arguments !type(regolisttype),pointer :: regolayer + type(usertype),intent(in) :: user type(regodatatype),dimension(:),allocatable,intent(inout) :: regolayer real(DP),intent(in) :: traverse_depth !type(regolisttype),pointer :: poppedlist @@ -69,6 +70,14 @@ subroutine util_traverse_pop_array(regolayer,traverse_depth,poppedarray) poppedarray(1)%thickness = poppedarray(1)%thickness - depth_diff regolayer(maxi)%thickness = regolayer(maxi)%thickness - poppedarray(1)%thickness + poppedarray(1)%totvolume = poppedarray(1)%thickness * user%pix * user%pix + poppedarray(1)%meltvolume = poppedarray(1)%meltfrac * poppedarray(1)%totvolume + poppedarray(1)%distvol(:) = poppedarray(1)%meltdist(:) * poppedarray(1)%totvolume + poppedarray(1)%ejm = poppedarray(1)%ejmf * poppedarray(1)%totvolume + regolayer(maxi)%totvolume = regolayer(maxi)%thickness * user%pix * user%pix + regolayer(maxi)%distvol(:) = regolayer(maxi)%meltdist(:) * regolayer(maxi)%totvolume + regolayer(maxi)%meltvolume = regolayer(maxi)%meltfrac * regolayer(maxi)%totvolume + regolayer(maxi)%ejm = regolayer(maxi)%ejmf * regolayer(maxi)%totvolume ! copy regolayer from 1 to maxi to temp variable, then deallocate regolayer, then movealloc templayer onto regolayer <--may need temp array allocate(oldregodata,source=regolayer(1:maxi))