From 7734120c0c26f56e29d1974de1ba5872f9dc3400 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 12 Dec 2022 14:30:26 -0500 Subject: [PATCH] Fixed divide by zero issue when running initial quasimc setup run --- examples/global-lunar-bombardment/.gitignore | 3 +- python/ctem/ctem/driver.py | 2 +- python/ctem/ctem/util.py | 4 +-- src/crater/crater_populate.f90 | 35 +++++++++++--------- src/main/CTEM.f90 | 34 ++++++++++--------- 5 files changed, 42 insertions(+), 36 deletions(-) diff --git a/examples/global-lunar-bombardment/.gitignore b/examples/global-lunar-bombardment/.gitignore index ce19f927..4778e90c 100644 --- a/examples/global-lunar-bombardment/.gitignore +++ b/examples/global-lunar-bombardment/.gitignore @@ -1,4 +1,5 @@ *.jpg *.png *.out -surface_* \ No newline at end of file +surface_* +temp.in diff --git a/python/ctem/ctem/driver.py b/python/ctem/ctem/driver.py index b74eb50e..24f16c9c 100644 --- a/python/ctem/ctem/driver.py +++ b/python/ctem/ctem/driver.py @@ -149,7 +149,7 @@ def __init__(self, param_file="ctem.in", isnew=True): shutil.copy2(self.user['ctemfile'], tempfile ) #Write a temporary input file to generate the necessary quasimc files - util.write_temp_input(tempfile) + util.write_temp_input(self.user, tempfile) util.write_datfile(self.user, self.output_filenames['dat'], self.seedarr) self.compute_one_interval(ctemin=tempfile) os.remove(tempfile) diff --git a/python/ctem/ctem/util.py b/python/ctem/ctem/util.py index da9d0b8b..d7d20ccd 100644 --- a/python/ctem/ctem/util.py +++ b/python/ctem/ctem/util.py @@ -372,11 +372,11 @@ def write_realcraters(filename, realcraters): return -def write_temp_input(filename): +def write_temp_input(user, filename): """Makes changes to a temporary input file for use when generating craterlist.dat for quasimc runs""" sed('testflag', 'testflag T!', filename) - sed('testimp', 'testimp 10 !', filename) + sed('testimp', f'testimp {user["pix"]*1e-3} !', filename) # Make a tiny test crater. We don't care about the crater itself, just that we run CTEM once to get all of the converted files sed('quasimc', 'quasimc F!', filename) sed('interval', 'interval 1 !', filename) sed('numinterval 1 !s', 'numintervals 1 !', filename) diff --git a/src/crater/crater_populate.f90 b/src/crater/crater_populate.f90 index e3087269..32f6314b 100644 --- a/src/crater/crater_populate.f90 +++ b/src/crater/crater_populate.f90 @@ -355,23 +355,26 @@ subroutine crater_populate(user,surf,crater,domain,prod,production_list,vdist,nt end if end do ! end crater production loop + if (ntrue > 0) then - call move_alloc(truelist, tmptruelist) - allocate(truelist(TRUECOLS,ntrue)) - truelist(:,1:ntrue) = tmptruelist(:,1:ntrue) - deallocate(tmptruelist) - - ! Resize the true crater size array to the actual number of craters produced - ! Display stats - ddmax = rmax / cmax - ddmin = rmin / cmin - rhpmax = rhmax / cmax - rhpmin = rhmin / cmin - write(*,*) - write(*,*) 'Minimum impactor diameter = ',imin - write(*,*) 'Maximum impactor diameter = ',imax - write(*,*) 'Minimum crater diameter = ',cmin,' d/D = ',ddmin,' r/D = ', rhpmin - write(*,*) 'Maximum crater diameter = ',cmax,' d/D = ',ddmax,' r/D = ', rhpmax + call move_alloc(truelist, tmptruelist) + allocate(truelist(TRUECOLS,ntrue)) + truelist(:,1:ntrue) = tmptruelist(:,1:ntrue) + deallocate(tmptruelist) + ! Resize the true crater size array to the actual number of craters produced + ! Display stats + ddmax = rmax / cmax + ddmin = rmin / cmin + rhpmax = rhmax / cmax + rhpmin = rhmin / cmin + write(*,*) + write(*,*) 'Minimum impactor diameter = ',imin + write(*,*) 'Maximum impactor diameter = ',imax + write(*,*) 'Minimum crater diameter = ',cmin,' d/D = ',ddmin,' r/D = ', rhpmin + write(*,*) 'Maximum crater diameter = ',cmax,' d/D = ',ddmax,' r/D = ', rhpmax + + end if + return end subroutine crater_populate diff --git a/src/main/CTEM.f90 b/src/main/CTEM.f90 index bd58eff7..a7e6df83 100644 --- a/src/main/CTEM.f90 +++ b/src/main/CTEM.f90 @@ -135,23 +135,25 @@ program CTEM call crater_tally_true(domain,truelist(:,1:ntrue),ntrue,truedist) end if -write(*,*) "Tallying craters" -if (.not.user%tallyonly) then - write(*,*) "Total craters generated: ",ntotcrat - write(*,*) "Surface-affecting craters generated: ",ntrue - write(*,*) "Visible craters generated: ",vistrue -end if -call crater_tally_observed(user,surf,domain,nkilled,onum,obsdist,obslist,oposlist,depthdiam,degradation_state) -ntotkilled = ntotkilled + nkilled -write(*,*) 'Craters killed during tally: ',ntotkilled -call io_write_tally(truedist,truelist(:,1:ntrue),obsdist,obslist,oposlist,depthdiam,degradation_state) -if (.not.user%tallyonly) then - write(*,*) "Writing surface files" - call io_write_surf(user,surf) -end if +if (ntrue > 0) then + write(*,*) "Tallying craters" + if (.not.user%tallyonly) then + write(*,*) "Total craters generated: ",ntotcrat + write(*,*) "Surface-affecting craters generated: ",ntrue + write(*,*) "Visible craters generated: ",vistrue + end if + call crater_tally_observed(user,surf,domain,nkilled,onum,obsdist,obslist,oposlist,depthdiam,degradation_state) + ntotkilled = ntotkilled + nkilled + write(*,*) 'Craters killed during tally: ',ntotkilled + call io_write_tally(truedist,truelist(:,1:ntrue),obsdist,obslist,oposlist,depthdiam,degradation_state) + if (.not.user%tallyonly) then + write(*,*) "Writing surface files" + call io_write_surf(user,surf) + end if -if (user%testflag) then ! Draw a profile across the crater - call io_crater_profile(user,surf) + if (user%testflag) then ! Draw a profile across the crater + call io_crater_profile(user,surf) + end if end if write(*,*) 'Writing output files'