runSolver.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import ivp
  2. import os
  3. import cModel
  4. import sys
  5. import json
  6. import numpy
  7. import time
  8. def get(setup,par):
  9. defaultValues={\
  10. 'method':'LSODA',\
  11. 'atol':1e-4,\
  12. 'rtol':1e-4,\
  13. 'tmax':1,\
  14. 'mode':'IVPSimultaneous',\
  15. 'nt':201,
  16. 'tUnit':'day'}
  17. try:
  18. return setup[par]
  19. except KeyError:
  20. pass
  21. return defaultValues[par]
  22. def main(parFiles,jobDir):
  23. print('runSolver')
  24. sys=cModel.model()
  25. modelFile=parFiles[1]
  26. parameterFile=parFiles[2]
  27. sys.parse(modelFile,parameterFile)
  28. with open(parFiles[0],'r') as f:
  29. setup=json.load(f)
  30. tmax=get(setup,'tmax')
  31. atol=get(setup,'atol')
  32. rtol=get(setup,'rtol')
  33. mode=get(setup,'mode')
  34. method=get(setup,'method')
  35. nt=get(setup,'nt')
  36. tUnit=get(setup,'tUnit')
  37. print('Running with tmax={} {}'.format(tmax,tUnit))
  38. if tUnit=='min':
  39. pass
  40. if tUnit=='hour':
  41. tmax*=60
  42. if tUnit=='day':
  43. tmax*=24*60
  44. if tUnit=='month':
  45. tmax*=24*60*30
  46. if tUnit=='year':
  47. tmax*=24*60*30*365
  48. start_time=time.time()
  49. if mode=='SequentialOdeint':
  50. t,sol,se=ivp.solveSequentialOdeint(sys,tmax,nt)
  51. if mode=='SimultaneousOdeint':
  52. t,sol,se=ivp.solveSimultaneousOdeint(sys,tmax,nt)
  53. if mode=='IVP':
  54. t,sol,se=ivp.solveSequential(sys,tmax,atol=atol,rtol=rtol,method=method)
  55. if mode=='IVPSimultaneous':
  56. t,sol,se=ivp.solveSimultaneous(sys,tmax,atol=atol,rtol=rtol,method=method)
  57. end_time=time.time()
  58. print('Time: {:.3f} s'.format(end_time-start_time))
  59. #store
  60. numpy.savetxt(os.path.join(jobDir,'t.txt'),t)
  61. numpy.savetxt(os.path.join(jobDir,'sol.txt'),sol)
  62. numpy.savetxt(os.path.join(jobDir,'se.txt'),se)
  63. if __name__=="__main__":
  64. parFiles=sys.argv[1].split(';')
  65. jobDir=sys.argv[2]
  66. main(parFiles,jobDir)