1 | import diana |
---|
2 | try: |
---|
3 | N = 10; |
---|
4 | dmain=diana.GetDianaMain() |
---|
5 | |
---|
6 | # get Diana model manger |
---|
7 | mmanger=dmain.GetModelManager(); |
---|
8 | |
---|
9 | # create model |
---|
10 | model=mmanger.CreateModel(diana.CAPE_CONTINUOUS, "Adscolumn.so"); |
---|
11 | model.Initialize(); |
---|
12 | eso=model.GetActiveESO(); |
---|
13 | esopar=eso.GetParameters(); |
---|
14 | esopar["n"].SetValue(N); |
---|
15 | ri=dmain.CreateReportingInterface("basic"); |
---|
16 | ri.SetComponentName("data"); |
---|
17 | sfactory = dmain.GetSolverFactory(); |
---|
18 | |
---|
19 | # residuals with initial guess |
---|
20 | print "Initial guess" |
---|
21 | print "States:", eso.GetAllVariables(); |
---|
22 | print "Derivatives:", eso.GetAllDerivatives(); |
---|
23 | print "Residuals:", eso.GetAllResiduals(); |
---|
24 | |
---|
25 | # create consistent initial conditions solver |
---|
26 | icsolver=sfactory.CreateSolver(diana.CAPE_IC, model, "icsolver.so"); |
---|
27 | icsolver.Initialize(); |
---|
28 | icpar=icsolver.GetParameters(); |
---|
29 | icpar["VerboseLevel"].SetValue(1); |
---|
30 | icsolver.Solve(); |
---|
31 | |
---|
32 | # residuals with initial guess |
---|
33 | print "Consistent initial conditions" |
---|
34 | print "States:", eso.GetAllVariables(); |
---|
35 | print "Derivatives:", eso.GetAllDerivatives(); |
---|
36 | print "Residuals:", eso.GetAllResiduals(); |
---|
37 | |
---|
38 | # create solver |
---|
39 | solver=sfactory.CreateSolver(diana.CAPE_DAE, model, "ida.so"); |
---|
40 | solver.Initialize(); |
---|
41 | solpar=solver.GetParameters(); |
---|
42 | solver.SetReportingInterface(ri); |
---|
43 | ri.Add(solpar["T"]); |
---|
44 | |
---|
45 | for i in range(1,N+1): |
---|
46 | name = "c_a["+str(i)+"]"; |
---|
47 | ri.Add(eso.GetStateVariables().ItemByName(name)); |
---|
48 | for i in range(1,N+1): |
---|
49 | name = "c_b["+str(i)+"]"; |
---|
50 | ri.Add(eso.GetStateVariables().ItemByName(name)); |
---|
51 | for i in range(1,N+1): |
---|
52 | name = "q_a["+str(i)+"]"; |
---|
53 | ri.Add(eso.GetStateVariables().ItemByName(name)); |
---|
54 | for i in range(1,N+1): |
---|
55 | name = "q_b["+str(i)+"]"; |
---|
56 | ri.Add(eso.GetStateVariables().ItemByName(name)); |
---|
57 | |
---|
58 | esopar["cina"].SetValue(8); |
---|
59 | esopar["cinb"].SetValue(8); |
---|
60 | esopar["v"].SetValue(1); |
---|
61 | esopar["l"].SetValue(20); |
---|
62 | esopar["n"].SetValue(N); |
---|
63 | solpar["VerboseLevel"].SetValue(1); |
---|
64 | solpar["Tend"].SetValue(2); |
---|
65 | solver.Solve(); |
---|
66 | esopar["cina"].SetValue(0); |
---|
67 | esopar["cinb"].SetValue(0); |
---|
68 | solpar["Tend"].SetValue(100); |
---|
69 | solver.Solve(); |
---|
70 | |
---|
71 | # create directory and store results |
---|
72 | import os |
---|
73 | if not os.path.isdir('results'): |
---|
74 | os.mkdir('results'); |
---|
75 | ri.WriteData("results/AdsColumn"); |
---|
76 | ri.WriteDataMatlab("results/AdsColumn.m"); |
---|
77 | |
---|
78 | except diana.ECapeUser, exc: |
---|
79 | print repr(exc) |
---|
80 | |
---|