/python/pyclaw/geotools/most2geoclaw.py

https://github.com/dlgeorge/clawpack-4.x
Python | 107 lines | 86 code | 9 blank | 12 comment | 8 complexity | 58bd75a6346b15d28432188626a47286 MD5 | raw file
  1. """
  2. Module for converting MOST data and output to GeoClaw format.
  3. """
  4. import os, glob, re
  5. def most2tt3(fname):
  6. """
  7. Converts MOST topo file to tt3 format.
  8. """
  9. f = open(fname).readlines()
  10. mn = f[0].split()
  11. ncols = int(mn[0])
  12. nrows = int(mn[1])
  13. xll = float(f[1])
  14. dx = float(f[2]) - xll
  15. xll = xll - 360.
  16. yll = float(f[nrows+ncols])
  17. dy = float(f[nrows+ncols-1]) - yll
  18. if abs(dx-dy) > 1.e-6:
  19. print '*** WARNING: dx = ',dx,' dy = ',dy
  20. cellsize = dx
  21. fname2 = os.path.splitext(fname)[0] + '.asc'
  22. f2 = open(fname2,'w')
  23. f2.write('%s ncols\n%s nrows\n%s xll\n%s yll\n%s cellsize\n99999 nodata_value\n' \
  24. % (ncols,nrows,xll,yll,cellsize))
  25. f2.writelines(f[nrows+ncols+1:])
  26. f2.close()
  27. print "Created ",fname2
  28. def most2fortt(fnameprefix):
  29. """
  30. Converts MOST output files to fort.t files.
  31. """
  32. files = glob.glob(r'%s*' % fnameprefix)
  33. files.sort()
  34. s = r"%s(?P<hours>[0-9]*)h(?P<minutes>[0-9]*)m(?P<seconds>[0-9]*)s" \
  35. % fnameprefix
  36. regexp = re.compile(s)
  37. frameno = 1
  38. for fname in files:
  39. result = regexp.search(fname)
  40. try:
  41. hours = result.group("hours")
  42. minutes = result.group("minutes")
  43. seconds = result.group("seconds")
  44. except:
  45. print "*** Cannot parse fname: ",fname
  46. raise
  47. t = int(hours)*3600. + int(minutes)*60. + int(seconds)
  48. fortname = "fort.t" + str(frameno).zfill(4)
  49. f = open(fortname, 'w')
  50. f.write("%18.8e time\n" % t)
  51. f.write("%5i meqn\n" % 1)
  52. f.write("%5i ngrids\n" % 1)
  53. f.write("%5i ndim\n" % 0)
  54. f.write("%5i maux\n" % 2)
  55. f.close()
  56. print "Created %s from %s at time t = %s" % (fortname, fname, t)
  57. frameno = frameno + 1
  58. def most2fortq(fnameprefix):
  59. """
  60. Converts MOST output files to fort.q files.
  61. """
  62. files = glob.glob(r'%s*' % fnameprefix)
  63. files.sort()
  64. frameno = 1
  65. for fname in files:
  66. f = open(fname).readlines()
  67. mn = f[0].split()
  68. ncols = int(mn[0])
  69. nrows = int(mn[1])
  70. xll = float(f[1])
  71. dx = float(f[2]) - xll
  72. xll = xll - 360.
  73. yll = float(f[nrows+ncols])
  74. dy = float(f[nrows+ncols-1]) - yll
  75. if abs(dx-dy) > 1.e-6:
  76. print '*** WARNING: dx = ',dx,' dy = ',dy
  77. cellsize = dx
  78. fortname = 'fort.q' + str(frameno).zfill(4)
  79. f2 = open(fortname,'w')
  80. f2.write("%5i grid_number\n" % 1)
  81. f2.write("%5i AMR_level\n" % 1)
  82. f2.write("%5i mx\n" % ncols)
  83. f2.write("%5i my\n" % nrows)
  84. f2.write("%5i xlow\n" % xll)
  85. f2.write("%5i ylow\n" % yll)
  86. f2.write("%5i dx\n" % dx)
  87. f2.write("%5i dy\n" % dy)
  88. f2.write("\n")
  89. for k in range(len(f)-1, nrows+ncols, -1):
  90. for s in f[k].split():
  91. z = float(s)
  92. f2.write("%18.8e\n" % z)
  93. f2.close()
  94. print "Created %s from %s" % (fortname,fname)
  95. frameno += 1
  96. if __name__=='__main__':
  97. import sys
  98. most2tt3(sys.argv[1])