76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
from roukf.core import ROUKF
|
|
import argparse
|
|
import importlib
|
|
from dolfin import *
|
|
import dolfin
|
|
import logging
|
|
|
|
logging.getLogger().setLevel(logging.INFO)
|
|
|
|
parameters['form_compiler']['optimize'] = True
|
|
parameters['form_compiler']['cpp_optimize'] = True
|
|
parameters['form_compiler']['cpp_optimize_flags'] = ('-O3 -ffast-math '
|
|
'-march=native')
|
|
|
|
|
|
def print_timing():
|
|
if dolfin.__version__ >= '2018':
|
|
list_timings(TimingClear.clear, [TimingType.wall])
|
|
else:
|
|
list_timings(TimingClear_clear, [TimingType_wall])
|
|
|
|
|
|
def main(fwd_solver_module, inputfile):
|
|
''' Run ROUKF parameter estimation.
|
|
|
|
Imports the given forward solver module and initializes the forward solver
|
|
with the specified input file.
|
|
Creates a ROUKF solver from the same input file and the instantiated
|
|
forward solver object and solves the optimization problem specified in the
|
|
input file.
|
|
|
|
Args:
|
|
fwd_solver_module (str): forward solver module to be imported and
|
|
passed to the ROUKF solver
|
|
inputfile (str): YAML input file with configuration of both
|
|
forward and ROUKF solver
|
|
'''
|
|
|
|
fwd_solver = importlib.import_module(fwd_solver_module)
|
|
fwd_solver = fwd_solver.init(inputfile)
|
|
fwd_solver.logger.setLevel(logging.WARNING)
|
|
|
|
kf = ROUKF(inputfile, fwd_solver)
|
|
kf.logger.setLevel(logging.INFO)
|
|
kf.solve()
|
|
|
|
print_timing()
|
|
|
|
|
|
def get_parser():
|
|
parser = argparse.ArgumentParser(
|
|
description='''\
|
|
Run ROUKF parameter estimation.
|
|
|
|
1. Imports the given forward solver module and initializes the forward solver
|
|
with the specified input file. The solver module is required to have a
|
|
method `init()` which handles the complete setup and returns self.
|
|
2. Creates a ROUKF solver from the same input file and the instantiated
|
|
forward solver object and solves the optimization problem specified in the
|
|
input file.''',
|
|
formatter_class=argparse.RawDescriptionHelpFormatter)
|
|
parser.add_argument('fwd_solver', type=str,
|
|
help='Name of the forward solver module (see full'
|
|
' documentation), such that it can be imported.\n'
|
|
'For example:\n navierstokes.solver or '
|
|
'hyperelasticity.solver')
|
|
parser.add_argument('inputfile', type=str, help='path to YAML input file')
|
|
return parser
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
args = get_parser().parse_args()
|
|
|
|
main(args.fwd_solver, args.inputfile)
|