Skip to content

Commit 755c74b

Browse files
authored
Merge pull request #423 from inowas/feature/2086-fix-concentration-results
Feature/2086 - Fix concentration results
2 parents cd46c2f + 64e2611 commit 755c74b

23 files changed

+2121
-2214
lines changed

src/core/model/flopy/packages/FlopyPackages.ts

+18-20
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import md5 from 'md5';
1313
import { JSON_SCHEMA_URL } from '../../../../services/api';
1414

1515
export default class FlopyPackages {
16-
1716
get version() {
1817
return this._version;
1918
}
@@ -113,7 +112,6 @@ export default class FlopyPackages {
113112
}
114113

115114
public static create(modelId: string, mf: FlopyModflow, mp: FlopyModpath, mt: FlopyMt3d, swt: FlopySeawat) {
116-
117115
const self = new this();
118116
self.modelId = modelId;
119117
self.mf = mf;
@@ -136,14 +134,14 @@ export default class FlopyPackages {
136134
public static fromObject(obj: IFlopyPackages) {
137135
const mf = FlopyModflow.fromObject(obj.mf);
138136
const mp = obj.mp ? FlopyModpath.fromObject(obj.mp) : new FlopyModpath();
139-
const mt = FlopyMt3d.fromObject(obj.mt);
140-
const swt = FlopySeawat.fromObject(obj.swt);
137+
const mt = obj.mt ? FlopyMt3d.fromObject(obj.mt) : null;
138+
const swt = obj.swt ? FlopySeawat.fromObject(obj.swt) : null;
141139
const modelId = obj.model_id;
142140

143141
const self = new this();
144142
self._modelId = modelId;
145143
self._mf = mf;
146-
self._mf.setTransportEnabled(mt.enabled || false);
144+
self._mf.setTransportEnabled(mt ? mt.enabled : false);
147145
self._mp = mp;
148146
self._mt = mt;
149147
self._swt = swt;
@@ -171,9 +169,16 @@ export default class FlopyPackages {
171169
transport: Transport,
172170
variableDensity: VariableDensity
173171
) => {
174-
this.mf = this.mf.recalculate(model, soilmodel, boundaries.filter((b) => !b.isExcludedFromCalculation));
172+
this.mf = this.mf.recalculate(
173+
model,
174+
soilmodel,
175+
boundaries.filter((b) => !b.isExcludedFromCalculation)
176+
);
175177
this.mf.setTransportEnabled(transport.enabled);
176-
this.mt = this.mt.recalculate(transport, boundaries.filter((b) => !b.isExcludedFromCalculation));
178+
this.mt = this.mt.recalculate(
179+
transport,
180+
boundaries.filter((b) => !b.isExcludedFromCalculation)
181+
);
177182
this.swt = this.swt.recalculate(variableDensity);
178183
return this;
179184
};
@@ -216,9 +221,9 @@ export default class FlopyPackages {
216221
version: this.version,
217222
model_id: this.modelId || '',
218223
mf: this.mf.toObject(),
219-
mp: this.mp ? this.mp.toObject() : null,
220-
mt: this.mt ? this.mt.toObject() : null,
221-
swt: this.swt ? this.swt.toObject() : null
224+
mp: this.mp ? this.mp.toObject() : undefined,
225+
mt: this.mt ? this.mt.toObject() : undefined,
226+
swt: this.swt ? this.swt.toObject() : undefined,
222227
};
223228
}
224229

@@ -229,7 +234,7 @@ export default class FlopyPackages {
229234
version: this.version,
230235
calculation_id: this.calculation_id,
231236
model_id: this.modelId || '',
232-
data: this.getData()
237+
data: this.getData(),
233238
};
234239
}
235240

@@ -270,17 +275,10 @@ export default class FlopyPackages {
270275
};
271276

272277
public validate(forCalculationServer = true) {
273-
274278
if (forCalculationServer) {
275-
return jsonSchemaValidate(
276-
this.toFlopyCalculation(),
277-
JSON_SCHEMA_URL + '/modflow/packages/flopyCalculation.json'
278-
);
279+
return jsonSchemaValidate(this.toFlopyCalculation(), JSON_SCHEMA_URL + '/modflow/packages/flopyCalculation.json');
279280
}
280281

281-
return jsonSchemaValidate(
282-
this.toObject(),
283-
JSON_SCHEMA_URL + '/modflow/packages/flopyCalculationPackages.json'
284-
);
282+
return jsonSchemaValidate(this.toObject(), JSON_SCHEMA_URL + '/modflow/packages/flopyCalculationPackages.json');
285283
}
286284
}
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
1-
import {IFlopyModflow} from './mf/FlopyModflow.type';
1+
import { IFlopyModflow } from './mf/FlopyModflow.type';
2+
import { IFlopyMt3d } from './mt/FlopyMt3d';
3+
import { IFlopySeawat } from './swt/FlopySeawat';
24

35
export interface IFlopyPackages {
4-
model_id: string;
5-
version: string;
6-
author: string;
7-
project: string;
8-
mf: IFlopyModflow;
9-
mp?: any;
10-
mt?: any;
11-
swt?: any;
6+
model_id: string;
7+
version: string;
8+
author: string;
9+
project: string;
10+
mf: IFlopyModflow;
11+
mp?: any;
12+
mt?: IFlopyMt3d;
13+
swt?: IFlopySeawat;
1214
}
1315

1416
export interface IFlopyCalculation {
15-
author: string;
16-
project: string;
17-
version: string;
18-
calculation_id: string;
19-
model_id: string;
20-
data: {
21-
mf: IFlopyModflow;
22-
mp?: any;
23-
mt?: any;
24-
swt?: any;
25-
};
17+
author: string;
18+
project: string;
19+
version: string;
20+
calculation_id: string;
21+
model_id: string;
22+
data: {
23+
mf: IFlopyModflow;
24+
mp?: any;
25+
mt?: IFlopyMt3d;
26+
swt?: IFlopySeawat;
27+
};
2628
}
+104-109
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,131 @@
1-
import {GenericObject} from '../../../genericObject/GenericObject';
2-
import {IPropertyValueObject} from '../../../types';
3-
import FlopyMt3dMt, {IFlopyMt3dMt} from './FlopyMt3dMt';
4-
5-
import FlopyMt3dMtadv, {IFlopyMt3dMtAdv} from './FlopyMt3dMtadv';
6-
import FlopyMt3dMtbtn, {IFlopyMt3dMtBtn} from './FlopyMt3dMtbtn';
7-
import FlopyMt3dMtdsp, {IFlopyMt3dMtdsp} from './FlopyMt3dMtdsp';
8-
import FlopyMt3dMtgcg, {IFlopyMt3dMtgcg} from './FlopyMt3dMtgcg';
9-
import FlopyMt3dMtrct, {IFlopyMt3dMtrct} from './FlopyMt3dMtrct';
10-
import FlopyMt3dMtssm, {IFlopyMt3dMtssm} from './FlopyMt3dMtssm';
11-
12-
import {BoundaryCollection} from '../../../modflow/boundaries';
13-
import {Transport} from '../../../modflow';
1+
import { BoundaryCollection } from '../../../modflow/boundaries';
2+
import { GenericObject } from '../../../genericObject/GenericObject';
3+
import { IPropertyValueObject } from '../../../types';
4+
import { Transport } from '../../../modflow';
5+
import FlopyMt3dMt, { IFlopyMt3dMt } from './FlopyMt3dMt';
6+
import FlopyMt3dMtadv, { IFlopyMt3dMtAdv } from './FlopyMt3dMtadv';
7+
import FlopyMt3dMtbtn, { IFlopyMt3dMtBtn } from './FlopyMt3dMtbtn';
8+
import FlopyMt3dMtdsp, { IFlopyMt3dMtdsp } from './FlopyMt3dMtdsp';
9+
import FlopyMt3dMtgcg, { IFlopyMt3dMtgcg } from './FlopyMt3dMtgcg';
10+
import FlopyMt3dMtrct, { IFlopyMt3dMtrct } from './FlopyMt3dMtrct';
11+
import FlopyMt3dMtssm, { IFlopyMt3dMtssm } from './FlopyMt3dMtssm';
1412
import FlopyMt3dPackage from './FlopyMt3dPackage';
1513

1614
export interface IFlopyMt3d extends IPropertyValueObject {
17-
enabled: boolean;
18-
mt: IFlopyMt3dMt;
19-
adv: IFlopyMt3dMtAdv;
20-
btn: IFlopyMt3dMtBtn;
21-
dsp: IFlopyMt3dMtdsp;
22-
gcg: IFlopyMt3dMtgcg;
23-
rct: IFlopyMt3dMtrct;
24-
ssm: IFlopyMt3dMtssm;
15+
enabled: boolean;
16+
mt: IFlopyMt3dMt;
17+
adv: IFlopyMt3dMtAdv;
18+
btn: IFlopyMt3dMtBtn;
19+
dsp: IFlopyMt3dMtdsp;
20+
gcg: IFlopyMt3dMtgcg;
21+
rct: IFlopyMt3dMtrct;
22+
ssm: IFlopyMt3dMtssm;
2523
}
2624

2725
export const packagesMap: IPropertyValueObject = {
28-
mt: FlopyMt3dMt,
29-
adv: FlopyMt3dMtadv,
30-
btn: FlopyMt3dMtbtn,
31-
dsp: FlopyMt3dMtdsp,
32-
gcg: FlopyMt3dMtgcg,
33-
rct: FlopyMt3dMtrct,
34-
ssm: FlopyMt3dMtssm
26+
mt: FlopyMt3dMt,
27+
adv: FlopyMt3dMtadv,
28+
btn: FlopyMt3dMtbtn,
29+
dsp: FlopyMt3dMtdsp,
30+
gcg: FlopyMt3dMtgcg,
31+
rct: FlopyMt3dMtrct,
32+
ssm: FlopyMt3dMtssm,
3533
};
3634

3735
class FlopyMt3d extends GenericObject<IFlopyMt3d> {
36+
get enabled() {
37+
return this._props.enabled;
38+
}
39+
40+
set enabled(value) {
41+
this._props.enabled = value;
42+
}
43+
44+
public static create(transport: Transport, boundaries: BoundaryCollection) {
45+
const obj: IFlopyMt3d = {
46+
enabled: transport.enabled,
47+
mt: FlopyMt3dMt.create().toObject(),
48+
btn: FlopyMt3dMtbtn.create().update(transport).toObject(),
49+
adv: FlopyMt3dMtadv.create().toObject(),
50+
dsp: FlopyMt3dMtdsp.create().toObject(),
51+
gcg: FlopyMt3dMtgcg.create().toObject(),
52+
rct: FlopyMt3dMtrct.create().toObject(),
53+
ssm: FlopyMt3dMtssm.create(transport, boundaries).toObject(),
54+
};
3855

39-
get enabled() {
40-
return this._props.enabled;
56+
return new this(obj);
57+
}
58+
59+
public static fromObject(obj: IFlopyMt3d) {
60+
return new this(obj);
61+
}
62+
63+
public recalculate = (transport: Transport, boundaries: BoundaryCollection) => {
64+
this.enabled = transport.enabled;
65+
this._props.adv = FlopyMt3dMtadv.fromObject(this._props.adv).update().toObject();
66+
this._props.btn = FlopyMt3dMtbtn.fromObject(this._props.btn).update(transport).toObject();
67+
this._props.dsp = FlopyMt3dMtdsp.fromObject(this._props.dsp).update().toObject();
68+
this._props.gcg = FlopyMt3dMtgcg.fromObject(this._props.gcg).update().toObject();
69+
this._props.rct = FlopyMt3dMtrct.fromObject(this._props.rct).update().toObject();
70+
this._props.ssm = FlopyMt3dMtssm.fromObject(this._props.ssm).update(transport, boundaries).toObject();
71+
return this;
72+
};
73+
74+
public toggleEnabled() {
75+
this._props.enabled = !this._props.enabled;
76+
}
77+
78+
public setPackage = (pck: FlopyMt3dPackage<any>) => {
79+
const type = this.getTypeFromPackage(pck);
80+
this._props[type] = pck.toObject();
81+
return this;
82+
};
83+
84+
public getTypeFromPackage = (pck: FlopyMt3dPackage<any>) => {
85+
let type: string | null = null;
86+
for (const t in packagesMap) {
87+
if (packagesMap.hasOwnProperty(t)) {
88+
if (pck instanceof packagesMap[t]) {
89+
type = t;
90+
}
91+
}
4192
}
4293

43-
set enabled(value) {
44-
this._props.enabled = value;
94+
if (type === null) {
95+
throw Error('Type not registered in PackagesMap');
4596
}
4697

47-
public static create(transport: Transport, boundaries: BoundaryCollection) {
48-
49-
const obj: IFlopyMt3d = {
50-
enabled: transport.enabled,
51-
mt: FlopyMt3dMt.create().toObject(),
52-
btn: FlopyMt3dMtbtn.create().update(transport).toObject(),
53-
adv: FlopyMt3dMtadv.create().toObject(),
54-
dsp: FlopyMt3dMtdsp.create().toObject(),
55-
gcg: FlopyMt3dMtgcg.create().toObject(),
56-
rct: FlopyMt3dMtrct.create().toObject(),
57-
ssm: FlopyMt3dMtssm.create(transport, boundaries).toObject()
58-
};
98+
return type;
99+
};
59100

60-
return new this(obj);
101+
public getPackage = (type: string): FlopyMt3dPackage<any> | undefined => {
102+
if (!packagesMap.hasOwnProperty(type)) {
103+
return undefined;
61104
}
62105

63-
public static fromObject(obj: IFlopyMt3d) {
64-
return new this(obj);
106+
if (this._props[type] === undefined) {
107+
return undefined;
65108
}
66109

67-
public recalculate = (transport: Transport, boundaries: BoundaryCollection) => {
68-
69-
this.enabled = transport.enabled;
70-
this._props.adv = FlopyMt3dMtadv.fromObject(this._props.adv).update().toObject();
71-
this._props.btn = FlopyMt3dMtbtn.fromObject(this._props.btn).update(transport).toObject();
72-
this._props.dsp = FlopyMt3dMtdsp.fromObject(this._props.dsp).update().toObject();
73-
this._props.gcg = FlopyMt3dMtgcg.fromObject(this._props.gcg).update().toObject();
74-
this._props.rct = FlopyMt3dMtrct.fromObject(this._props.rct).update().toObject();
75-
this._props.ssm = FlopyMt3dMtssm.fromObject(this._props.ssm).update(transport, boundaries).toObject();
76-
77-
return this;
78-
};
110+
const className = packagesMap[type];
111+
return className.fromObject(this._props[type]);
112+
};
79113

80-
public toggleEnabled() {
81-
this._props.enabled = !this._props.enabled;
114+
public toFlopyCalculation = () => {
115+
if (!this.enabled) {
116+
return null;
82117
}
83118

84-
public setPackage = (pck: FlopyMt3dPackage<any>) => {
85-
const type = this.getTypeFromPackage(pck);
86-
this._props[type] = pck.toObject();
87-
return this;
88-
};
89-
90-
public getTypeFromPackage = (pck: FlopyMt3dPackage<any>) => {
91-
let type: string | null = null;
92-
for (const t in packagesMap) {
93-
if (packagesMap.hasOwnProperty(t)) {
94-
if (pck instanceof packagesMap[t]) {
95-
type = t;
96-
}
97-
}
98-
}
99-
100-
if (type === null) {
101-
throw Error('Type not registered in PackagesMap');
102-
}
103-
104-
return type;
105-
};
106-
107-
public getPackage = (type: string): FlopyMt3dPackage<any> | undefined => {
108-
if (!packagesMap.hasOwnProperty(type)) {
109-
return undefined;
110-
}
111-
112-
if (this._props[type] === undefined) {
113-
return undefined;
114-
}
115-
116-
const className = packagesMap[type];
117-
return className.fromObject(this._props[type]);
118-
};
119-
120-
public toFlopyCalculation = () => {
121-
if (!this.enabled) {
122-
return null;
123-
}
124-
125-
const obj = {...this._props};
126-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
127-
// @ts-ignore
128-
delete obj.enabled;
119+
const obj = { ...this._props };
120+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
121+
// @ts-ignore
122+
delete obj.enabled;
129123

130-
return {
131-
...obj, packages: Object.keys(obj)
132-
};
124+
return {
125+
...obj,
126+
packages: Object.keys(obj),
133127
};
128+
};
134129
}
135130

136131
export default FlopyMt3d;

0 commit comments

Comments
 (0)