@dnv-plant/typescriptpws 1.0.84-alpha.1964405 → 1.0.85-alpha.1964522

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.ts CHANGED
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/index.razor.
12
12
  ***********************************************************************/
13
13
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dnv-plant/typescriptpws",
3
- "version": "1.0.84-alpha.1964405",
3
+ "version": "1.0.85-alpha.1964522",
4
4
  "description": "Integrate Phast models with our versatile APIs for enhanced customization and efficiency.",
5
5
  "main": "index.ts",
6
6
  "scripts": {
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -153,6 +153,893 @@ class CalculationFailedResponseSchema {
153
153
  }
154
154
  }
155
155
 
156
+ export interface BESSLinkedRunnerCalculationRequestSchemaData {
157
+ bessUnit: Entities.BESSUnit;
158
+ bessRelease: Entities.BESSRelease;
159
+ weather: Entities.Weather;
160
+ substrate: Entities.Substrate;
161
+ dispersionParameters: Entities.DispersionParameters[];
162
+ dispersionParameterCount: number;
163
+ endPointConcentration: number;
164
+ flammableParameters: Entities.FlammableParameters;
165
+ explosionParameters: Entities.ExplosionParameters;
166
+ dispersionFlamOutputConfigs: Entities.DispersionOutputConfig[];
167
+ dispersionFlamOutputConfigCount: number;
168
+ dispersionToxicOutputConfigs: Entities.DispersionOutputConfig[];
169
+ dispersionToxicOutputConfigCount: number;
170
+ flammableOutputConfigs: Entities.FlammableOutputConfig[];
171
+ flammableOutputConfigCount: number;
172
+ explosionOutputConfigs: Entities.ExplosionOutputConfig[];
173
+ explosionOutputConfigCount: number;
174
+ explosionConfinedVolumes: Entities.ExplosionConfinedVolume[];
175
+ explosionConfinedVolumeCount: number;
176
+ }
177
+
178
+ class BESSLinkedRunnerCalculationRequest extends CalculationRequestBase {
179
+ bessUnit: Entities.BESSUnit;
180
+ bessRelease: Entities.BESSRelease;
181
+ weather: Entities.Weather;
182
+ substrate: Entities.Substrate;
183
+ dispersionParameters: Entities.DispersionParameters[];
184
+ dispersionParameterCount: number;
185
+ endPointConcentration: number;
186
+ flammableParameters: Entities.FlammableParameters;
187
+ explosionParameters: Entities.ExplosionParameters;
188
+ dispersionFlamOutputConfigs: Entities.DispersionOutputConfig[];
189
+ dispersionFlamOutputConfigCount: number;
190
+ dispersionToxicOutputConfigs: Entities.DispersionOutputConfig[];
191
+ dispersionToxicOutputConfigCount: number;
192
+ flammableOutputConfigs: Entities.FlammableOutputConfig[];
193
+ flammableOutputConfigCount: number;
194
+ explosionOutputConfigs: Entities.ExplosionOutputConfig[];
195
+ explosionOutputConfigCount: number;
196
+ explosionConfinedVolumes: Entities.ExplosionConfinedVolume[];
197
+ explosionConfinedVolumeCount: number;
198
+
199
+ /**
200
+ * BESSLinkedRunner calculation request class.
201
+ *
202
+ * @param {Entities.BESSUnit} bessUnit - a BESS unit entity.
203
+ * @param {Entities.BESSRelease} bessRelease - a BESS release entity.
204
+ * @param {Entities.Weather} weather - a weather entity.
205
+ * @param {Entities.Substrate} substrate - a substrate entity.
206
+ * @param {Entities.DispersionParameters[]} dispersionParameters - an array of dispersion parameters.
207
+ * @param {number} dispersionParameterCount - Number of dispersion parameters.
208
+ * @param {number} endPointConcentration - Concentration at which the dispersion calculations will terminate (v/v fraction).
209
+ * @param {Entities.FlammableParameters} flammableParameters - a flammable parameters entity.
210
+ * @param {Entities.ExplosionParameters} explosionParameters - an explosion parameters entity.
211
+ * @param {Entities.DispersionOutputConfig[]} dispersionFlamOutputConfigs - an array of dispersion output configs for flammable concentrations of interest.
212
+ * @param {number} dispersionFlamOutputConfigCount - Number of dispersion output configs for flammable concentrations of interest.
213
+ * @param {Entities.DispersionOutputConfig[]} dispersionToxicOutputConfigs - an array of dispersion output configs for toxic concentrations of interest.
214
+ * @param {number} dispersionToxicOutputConfigCount - Number of dispersion output configs for toxic concentrations of interest.
215
+ * @param {Entities.FlammableOutputConfig[]} flammableOutputConfigs - an array of flammable output configs for radiation levels of interest.
216
+ * @param {number} flammableOutputConfigCount - Number of flammable ouput configs for radiation levels of interest.
217
+ * @param {Entities.ExplosionOutputConfig[]} explosionOutputConfigs - an array of explosion output configs for overpressure levels of interest.
218
+ * @param {number} explosionOutputConfigCount - Number of explosion output configs for overpressure levels of interest.
219
+ * @param {Entities.ExplosionConfinedVolume[]} explosionConfinedVolumes - an array of explosion confined volumes.
220
+ * @param {number} explosionConfinedVolumeCount - Number of explosion confined volumes.
221
+ */
222
+ constructor(
223
+ bessUnit: Entities.BESSUnit,
224
+ bessRelease: Entities.BESSRelease,
225
+ weather: Entities.Weather,
226
+ substrate: Entities.Substrate,
227
+ dispersionParameters: Entities.DispersionParameters[],
228
+ dispersionParameterCount: number,
229
+ endPointConcentration: number,
230
+ flammableParameters: Entities.FlammableParameters,
231
+ explosionParameters: Entities.ExplosionParameters,
232
+ dispersionFlamOutputConfigs: Entities.DispersionOutputConfig[],
233
+ dispersionFlamOutputConfigCount: number,
234
+ dispersionToxicOutputConfigs: Entities.DispersionOutputConfig[],
235
+ dispersionToxicOutputConfigCount: number,
236
+ flammableOutputConfigs: Entities.FlammableOutputConfig[],
237
+ flammableOutputConfigCount: number,
238
+ explosionOutputConfigs: Entities.ExplosionOutputConfig[],
239
+ explosionOutputConfigCount: number,
240
+ explosionConfinedVolumes: Entities.ExplosionConfinedVolume[],
241
+ explosionConfinedVolumeCount: number
242
+ ) {
243
+ super();
244
+ this.bessUnit = bessUnit;
245
+ this.bessRelease = bessRelease;
246
+ this.weather = weather;
247
+ this.substrate = substrate;
248
+ this.dispersionParameters = dispersionParameters;
249
+ this.dispersionParameterCount = dispersionParameterCount;
250
+ this.endPointConcentration = endPointConcentration;
251
+ this.flammableParameters = flammableParameters;
252
+ this.explosionParameters = explosionParameters;
253
+ this.dispersionFlamOutputConfigs = dispersionFlamOutputConfigs;
254
+ this.dispersionFlamOutputConfigCount = dispersionFlamOutputConfigCount;
255
+ this.dispersionToxicOutputConfigs = dispersionToxicOutputConfigs;
256
+ this.dispersionToxicOutputConfigCount = dispersionToxicOutputConfigCount;
257
+ this.flammableOutputConfigs = flammableOutputConfigs;
258
+ this.flammableOutputConfigCount = flammableOutputConfigCount;
259
+ this.explosionOutputConfigs = explosionOutputConfigs;
260
+ this.explosionOutputConfigCount = explosionOutputConfigCount;
261
+ this.explosionConfinedVolumes = explosionConfinedVolumes;
262
+ this.explosionConfinedVolumeCount = explosionConfinedVolumeCount;
263
+ }
264
+ }
265
+
266
+ export class BESSLinkedRunnerCalculationRequestSchema {
267
+ schema: Joi.ObjectSchema;
268
+ propertyTypes: Record<string, string>;
269
+
270
+ /**
271
+ * Schema for the BESSLinkedRunner calculation request.
272
+ */
273
+ constructor() {
274
+ this.schema = Joi.object({
275
+ bessUnit: new EntitySchemas.BESSUnitSchema().schema,
276
+ bessRelease: new EntitySchemas.BESSReleaseSchema().schema,
277
+ weather: new EntitySchemas.WeatherSchema().schema,
278
+ substrate: new EntitySchemas.SubstrateSchema().schema,
279
+ dispersionParameters: Joi.array().items(new EntitySchemas.DispersionParametersSchema().schema).allow(null),
280
+ dispersionParameterCount: Joi.number().integer(),
281
+ endPointConcentration: Joi.number().unsafe(),
282
+ flammableParameters: new EntitySchemas.FlammableParametersSchema().schema,
283
+ explosionParameters: new EntitySchemas.ExplosionParametersSchema().schema,
284
+ dispersionFlamOutputConfigs: Joi.array().items(new EntitySchemas.DispersionOutputConfigSchema().schema).allow(null),
285
+ dispersionFlamOutputConfigCount: Joi.number().integer(),
286
+ dispersionToxicOutputConfigs: Joi.array().items(new EntitySchemas.DispersionOutputConfigSchema().schema).allow(null),
287
+ dispersionToxicOutputConfigCount: Joi.number().integer(),
288
+ flammableOutputConfigs: Joi.array().items(new EntitySchemas.FlammableOutputConfigSchema().schema).allow(null),
289
+ flammableOutputConfigCount: Joi.number().integer(),
290
+ explosionOutputConfigs: Joi.array().items(new EntitySchemas.ExplosionOutputConfigSchema().schema).allow(null),
291
+ explosionOutputConfigCount: Joi.number().integer(),
292
+ explosionConfinedVolumes: Joi.array().items(new EntitySchemas.ExplosionConfinedVolumeSchema().schema).allow(null),
293
+ explosionConfinedVolumeCount: Joi.number().integer(),
294
+ }).unknown(true);
295
+
296
+ this.propertyTypes = {
297
+ bessUnit: "Entities.BESSUnit",
298
+ bessRelease: "Entities.BESSRelease",
299
+ weather: "Entities.Weather",
300
+ substrate: "Entities.Substrate",
301
+ dispersionParameters: "Entities.DispersionParameters[]",
302
+ dispersionParameterCount: "number",
303
+ endPointConcentration: "number",
304
+ flammableParameters: "Entities.FlammableParameters",
305
+ explosionParameters: "Entities.ExplosionParameters",
306
+ dispersionFlamOutputConfigs: "Entities.DispersionOutputConfig[]",
307
+ dispersionFlamOutputConfigCount: "number",
308
+ dispersionToxicOutputConfigs: "Entities.DispersionOutputConfig[]",
309
+ dispersionToxicOutputConfigCount: "number",
310
+ flammableOutputConfigs: "Entities.FlammableOutputConfig[]",
311
+ flammableOutputConfigCount: "number",
312
+ explosionOutputConfigs: "Entities.ExplosionOutputConfig[]",
313
+ explosionOutputConfigCount: "number",
314
+ explosionConfinedVolumes: "Entities.ExplosionConfinedVolume[]",
315
+ explosionConfinedVolumeCount: "number",
316
+ };
317
+ }
318
+
319
+ validate(data: BESSLinkedRunnerCalculationRequestSchemaData): BESSLinkedRunnerCalculationRequest {
320
+ const { error, value } = this.schema.validate(data, { abortEarly: false });
321
+ if (error) {
322
+ throw new Error(`Validation error: ${error.details.map((x) => x.message).join(", ")}`);
323
+ }
324
+ return this.makeCalculationRequest(value);
325
+ }
326
+
327
+ makeCalculationRequest(data: BESSLinkedRunnerCalculationRequestSchemaData): BESSLinkedRunnerCalculationRequest {
328
+ return new BESSLinkedRunnerCalculationRequest(
329
+ data.bessUnit,
330
+ data.bessRelease,
331
+ data.weather,
332
+ data.substrate,
333
+ data.dispersionParameters,
334
+ data.dispersionParameterCount,
335
+ data.endPointConcentration,
336
+ data.flammableParameters,
337
+ data.explosionParameters,
338
+ data.dispersionFlamOutputConfigs,
339
+ data.dispersionFlamOutputConfigCount,
340
+ data.dispersionToxicOutputConfigs,
341
+ data.dispersionToxicOutputConfigCount,
342
+ data.flammableOutputConfigs,
343
+ data.flammableOutputConfigCount,
344
+ data.explosionOutputConfigs,
345
+ data.explosionOutputConfigCount,
346
+ data.explosionConfinedVolumes,
347
+ data.explosionConfinedVolumeCount
348
+ );
349
+ }
350
+ }
351
+
352
+ export class BESSLinkedRunnerCalculation extends CalculationBase {
353
+ bessUnit: Entities.BESSUnit;
354
+ bessRelease: Entities.BESSRelease;
355
+ weather: Entities.Weather;
356
+ substrate: Entities.Substrate;
357
+ dispersionParameters: Entities.DispersionParameters[];
358
+ dispersionParameterCount: number;
359
+ endPointConcentration: number;
360
+ flammableParameters: Entities.FlammableParameters;
361
+ explosionParameters: Entities.ExplosionParameters;
362
+ dispersionFlamOutputConfigs: Entities.DispersionOutputConfig[];
363
+ dispersionFlamOutputConfigCount: number;
364
+ dispersionToxicOutputConfigs: Entities.DispersionOutputConfig[];
365
+ dispersionToxicOutputConfigCount: number;
366
+ flammableOutputConfigs: Entities.FlammableOutputConfig[];
367
+ flammableOutputConfigCount: number;
368
+ explosionOutputConfigs: Entities.ExplosionOutputConfig[];
369
+ explosionOutputConfigCount: number;
370
+ explosionConfinedVolumes: Entities.ExplosionConfinedVolume[];
371
+ explosionConfinedVolumeCount: number;
372
+ exitMaterial?: Entities.Material;
373
+ dischargeRecord?: Entities.DischargeRecord;
374
+ distancesToJetFireRadiation?: number[];
375
+ jetContourPoints?: Entities.LocalPosition[];
376
+ nJetContourPoints?: number[];
377
+ areaContourJet?: number[];
378
+ distancesToFlamConcentration?: number[];
379
+ flamConcentrationsUsed?: number[];
380
+ flamConcContourPoints?: Entities.LocalPosition[];
381
+ nFlamConcContourPoints?: number[];
382
+ areaFootprintFlamConc?: number[];
383
+ distancesToPoolFireRadiation?: number[];
384
+ poolContourPoints?: Entities.LocalPosition[];
385
+ nPoolContourPoints?: number[];
386
+ areaContourPool?: number[];
387
+ explosionOverpressureResults?: Entities.ExplosionOverpressureResult[];
388
+ distancesToToxicConcentration?: number[];
389
+ toxicConcentrationUsed?: number[];
390
+ toxicConcContourPoints?: Entities.LocalPosition[];
391
+ nToxicConcContourPoints?: number[];
392
+ areaFootprintToxicConc?: number[];
393
+ jetFireFlameResult?: Entities.FlameResult;
394
+ poolFireFlameResult?: Entities.PoolFireFlameResult;
395
+
396
+ /**
397
+ * Calculates maximum distance to a number of concentration levels for toxic materials, given a BESS unit, BESS release and weather definition.
398
+ *
399
+ * @param {Entities.BESSUnit} bessUnit - a BESS unit entity.
400
+ * @param {Entities.BESSRelease} bessRelease - a BESS release entity.
401
+ * @param {Entities.Weather} weather - a weather entity.
402
+ * @param {Entities.Substrate} substrate - a substrate entity.
403
+ * @param {Entities.DispersionParameters[]} dispersionParameters - an array of dispersion parameters.
404
+ * @param {number} dispersionParameterCount - Number of dispersion parameters.
405
+ * @param {number} endPointConcentration - Concentration at which the dispersion calculations will terminate (v/v fraction).
406
+ * @param {Entities.FlammableParameters} flammableParameters - a flammable parameters entity.
407
+ * @param {Entities.ExplosionParameters} explosionParameters - an explosion parameters entity.
408
+ * @param {Entities.DispersionOutputConfig[]} dispersionFlamOutputConfigs - an array of dispersion output configs for flammable concentrations of interest.
409
+ * @param {number} dispersionFlamOutputConfigCount - Number of dispersion output configs for flammable concentrations of interest.
410
+ * @param {Entities.DispersionOutputConfig[]} dispersionToxicOutputConfigs - an array of dispersion output configs for toxic concentrations of interest.
411
+ * @param {number} dispersionToxicOutputConfigCount - Number of dispersion output configs for toxic concentrations of interest.
412
+ * @param {Entities.FlammableOutputConfig[]} flammableOutputConfigs - an array of flammable output configs for radiation levels of interest.
413
+ * @param {number} flammableOutputConfigCount - Number of flammable ouput configs for radiation levels of interest.
414
+ * @param {Entities.ExplosionOutputConfig[]} explosionOutputConfigs - an array of explosion output configs for overpressure levels of interest.
415
+ * @param {number} explosionOutputConfigCount - Number of explosion output configs for overpressure levels of interest.
416
+ * @param {Entities.ExplosionConfinedVolume[]} explosionConfinedVolumes - an array of explosion confined volumes.
417
+ * @param {number} explosionConfinedVolumeCount - Number of explosion confined volumes.
418
+ */
419
+ constructor(
420
+ bessUnit: Entities.BESSUnit,
421
+ bessRelease: Entities.BESSRelease,
422
+ weather: Entities.Weather,
423
+ substrate: Entities.Substrate,
424
+ dispersionParameters: Entities.DispersionParameters[],
425
+ dispersionParameterCount: number,
426
+ endPointConcentration: number,
427
+ flammableParameters: Entities.FlammableParameters,
428
+ explosionParameters: Entities.ExplosionParameters,
429
+ dispersionFlamOutputConfigs: Entities.DispersionOutputConfig[],
430
+ dispersionFlamOutputConfigCount: number,
431
+ dispersionToxicOutputConfigs: Entities.DispersionOutputConfig[],
432
+ dispersionToxicOutputConfigCount: number,
433
+ flammableOutputConfigs: Entities.FlammableOutputConfig[],
434
+ flammableOutputConfigCount: number,
435
+ explosionOutputConfigs: Entities.ExplosionOutputConfig[],
436
+ explosionOutputConfigCount: number,
437
+ explosionConfinedVolumes: Entities.ExplosionConfinedVolume[],
438
+ explosionConfinedVolumeCount: number
439
+ ) {
440
+ super();
441
+ this.bessUnit = bessUnit;
442
+ this.bessRelease = bessRelease;
443
+ this.weather = weather;
444
+ this.substrate = substrate;
445
+ this.dispersionParameters = dispersionParameters;
446
+ this.dispersionParameterCount = dispersionParameterCount;
447
+ this.endPointConcentration = endPointConcentration;
448
+ this.flammableParameters = flammableParameters;
449
+ this.explosionParameters = explosionParameters;
450
+ this.dispersionFlamOutputConfigs = dispersionFlamOutputConfigs;
451
+ this.dispersionFlamOutputConfigCount = dispersionFlamOutputConfigCount;
452
+ this.dispersionToxicOutputConfigs = dispersionToxicOutputConfigs;
453
+ this.dispersionToxicOutputConfigCount = dispersionToxicOutputConfigCount;
454
+ this.flammableOutputConfigs = flammableOutputConfigs;
455
+ this.flammableOutputConfigCount = flammableOutputConfigCount;
456
+ this.explosionOutputConfigs = explosionOutputConfigs;
457
+ this.explosionOutputConfigCount = explosionOutputConfigCount;
458
+ this.explosionConfinedVolumes = explosionConfinedVolumes;
459
+ this.explosionConfinedVolumeCount = explosionConfinedVolumeCount;
460
+ }
461
+
462
+ async run() {
463
+ try {
464
+ const request = new BESSLinkedRunnerCalculationRequest(
465
+ this.bessUnit,
466
+ this.bessRelease,
467
+ this.weather,
468
+ this.substrate,
469
+ this.dispersionParameters,
470
+ this.dispersionParameterCount,
471
+ this.endPointConcentration,
472
+ this.flammableParameters,
473
+ this.explosionParameters,
474
+ this.dispersionFlamOutputConfigs,
475
+ this.dispersionFlamOutputConfigCount,
476
+ this.dispersionToxicOutputConfigs,
477
+ this.dispersionToxicOutputConfigCount,
478
+ this.flammableOutputConfigs,
479
+ this.flammableOutputConfigCount,
480
+ this.explosionOutputConfigs,
481
+ this.explosionOutputConfigCount,
482
+ this.explosionConfinedVolumes,
483
+ this.explosionConfinedVolumeCount
484
+ );
485
+
486
+ const schema = new BESSLinkedRunnerCalculationRequestSchema();
487
+ const validatedRequest = schema.validate(request);
488
+
489
+ const requestJson = JSON.stringify(validatedRequest);
490
+ const url = `${getAnalyticsApiTarget()}calculatebesslinkedrunner?clientId=${getClientAliasId()}`;
491
+
492
+ this.resultCode = Enums.ResultCode.UNEXPECTED_APPLICATION_ERROR;
493
+
494
+ const { data } = await this.postRequest(url, requestJson);
495
+
496
+ const responseSchema = new BESSLinkedRunnerCalculationResponseSchema();
497
+ const validatedResponse = responseSchema.validate(data);
498
+
499
+ this.resultCode = validatedResponse.resultCode;
500
+ if (this.resultCode === Enums.ResultCode.SUCCESS) {
501
+ Object.assign(this, {
502
+ exitMaterial: validatedResponse.exitMaterial,
503
+ dischargeRecord: validatedResponse.dischargeRecord,
504
+ distancesToJetFireRadiation: validatedResponse.distancesToJetFireRadiation,
505
+ jetContourPoints: validatedResponse.jetContourPoints,
506
+ nJetContourPoints: validatedResponse.nJetContourPoints,
507
+ areaContourJet: validatedResponse.areaContourJet,
508
+ distancesToFlamConcentration: validatedResponse.distancesToFlamConcentration,
509
+ flamConcentrationsUsed: validatedResponse.flamConcentrationsUsed,
510
+ flamConcContourPoints: validatedResponse.flamConcContourPoints,
511
+ nFlamConcContourPoints: validatedResponse.nFlamConcContourPoints,
512
+ areaFootprintFlamConc: validatedResponse.areaFootprintFlamConc,
513
+ distancesToPoolFireRadiation: validatedResponse.distancesToPoolFireRadiation,
514
+ poolContourPoints: validatedResponse.poolContourPoints,
515
+ nPoolContourPoints: validatedResponse.nPoolContourPoints,
516
+ areaContourPool: validatedResponse.areaContourPool,
517
+ explosionOverpressureResults: validatedResponse.explosionOverpressureResults,
518
+ distancesToToxicConcentration: validatedResponse.distancesToToxicConcentration,
519
+ toxicConcentrationUsed: validatedResponse.toxicConcentrationUsed,
520
+ toxicConcContourPoints: validatedResponse.toxicConcContourPoints,
521
+ nToxicConcContourPoints: validatedResponse.nToxicConcContourPoints,
522
+ areaFootprintToxicConc: validatedResponse.areaFootprintToxicConc,
523
+ jetFireFlameResult: validatedResponse.jetFireFlameResult,
524
+ poolFireFlameResult: validatedResponse.poolFireFlameResult,
525
+ resultCode: validatedResponse.resultCode,
526
+ messages: validatedResponse.messages ?? [],
527
+ calculationElapsedTime: validatedResponse.calculationElapsedTime,
528
+ operationId: validatedResponse.operationId,
529
+ });
530
+ } else {
531
+ this.messages.push(...(validatedResponse.messages ?? []));
532
+ }
533
+ } catch (err: any) {
534
+ if ((err as any)?.response) {
535
+ this.handleFailedResponse((err as any).response);
536
+ } else {
537
+ throw err;
538
+ }
539
+ console.error(err);
540
+ }
541
+
542
+ return this.resultCode;
543
+ }
544
+
545
+ toString() {
546
+ const parts = ["* BESSLinkedRunner"];
547
+
548
+ parts.push(`exitMaterial: ${String(this.exitMaterial)}`);
549
+ parts.push(`dischargeRecord: ${String(this.dischargeRecord)}`);
550
+ parts.push("*** distancesToJetFireRadiation:");
551
+ parts.push(
552
+ this.distancesToJetFireRadiation && this.distancesToJetFireRadiation.length > 0
553
+ ? this.distancesToJetFireRadiation.map((point) => `distancesToJetFireRadiationElement: ${point}`).join("\n")
554
+ : "distancesToJetFireRadiation does not contain any elements"
555
+ );
556
+ parts.push("*** jetContourPoints:");
557
+ parts.push(
558
+ this.jetContourPoints && this.jetContourPoints.length > 0
559
+ ? this.jetContourPoints.map((point) => `jetContourPointsElement: ${point}`).join("\n")
560
+ : "jetContourPoints does not contain any elements"
561
+ );
562
+ parts.push("*** nJetContourPoints:");
563
+ parts.push(
564
+ this.nJetContourPoints && this.nJetContourPoints.length > 0
565
+ ? this.nJetContourPoints.map((point) => `nJetContourPointsElement: ${point}`).join("\n")
566
+ : "nJetContourPoints does not contain any elements"
567
+ );
568
+ parts.push("*** areaContourJet:");
569
+ parts.push(
570
+ this.areaContourJet && this.areaContourJet.length > 0
571
+ ? this.areaContourJet.map((point) => `areaContourJetElement: ${point}`).join("\n")
572
+ : "areaContourJet does not contain any elements"
573
+ );
574
+ parts.push("*** distancesToFlamConcentration:");
575
+ parts.push(
576
+ this.distancesToFlamConcentration && this.distancesToFlamConcentration.length > 0
577
+ ? this.distancesToFlamConcentration.map((point) => `distancesToFlamConcentrationElement: ${point}`).join("\n")
578
+ : "distancesToFlamConcentration does not contain any elements"
579
+ );
580
+ parts.push("*** flamConcentrationsUsed:");
581
+ parts.push(
582
+ this.flamConcentrationsUsed && this.flamConcentrationsUsed.length > 0
583
+ ? this.flamConcentrationsUsed.map((point) => `flamConcentrationsUsedElement: ${point}`).join("\n")
584
+ : "flamConcentrationsUsed does not contain any elements"
585
+ );
586
+ parts.push("*** flamConcContourPoints:");
587
+ parts.push(
588
+ this.flamConcContourPoints && this.flamConcContourPoints.length > 0
589
+ ? this.flamConcContourPoints.map((point) => `flamConcContourPointsElement: ${point}`).join("\n")
590
+ : "flamConcContourPoints does not contain any elements"
591
+ );
592
+ parts.push("*** nFlamConcContourPoints:");
593
+ parts.push(
594
+ this.nFlamConcContourPoints && this.nFlamConcContourPoints.length > 0
595
+ ? this.nFlamConcContourPoints.map((point) => `nFlamConcContourPointsElement: ${point}`).join("\n")
596
+ : "nFlamConcContourPoints does not contain any elements"
597
+ );
598
+ parts.push("*** areaFootprintFlamConc:");
599
+ parts.push(
600
+ this.areaFootprintFlamConc && this.areaFootprintFlamConc.length > 0
601
+ ? this.areaFootprintFlamConc.map((point) => `areaFootprintFlamConcElement: ${point}`).join("\n")
602
+ : "areaFootprintFlamConc does not contain any elements"
603
+ );
604
+ parts.push("*** distancesToPoolFireRadiation:");
605
+ parts.push(
606
+ this.distancesToPoolFireRadiation && this.distancesToPoolFireRadiation.length > 0
607
+ ? this.distancesToPoolFireRadiation.map((point) => `distancesToPoolFireRadiationElement: ${point}`).join("\n")
608
+ : "distancesToPoolFireRadiation does not contain any elements"
609
+ );
610
+ parts.push("*** poolContourPoints:");
611
+ parts.push(
612
+ this.poolContourPoints && this.poolContourPoints.length > 0
613
+ ? this.poolContourPoints.map((point) => `poolContourPointsElement: ${point}`).join("\n")
614
+ : "poolContourPoints does not contain any elements"
615
+ );
616
+ parts.push("*** nPoolContourPoints:");
617
+ parts.push(
618
+ this.nPoolContourPoints && this.nPoolContourPoints.length > 0
619
+ ? this.nPoolContourPoints.map((point) => `nPoolContourPointsElement: ${point}`).join("\n")
620
+ : "nPoolContourPoints does not contain any elements"
621
+ );
622
+ parts.push("*** areaContourPool:");
623
+ parts.push(
624
+ this.areaContourPool && this.areaContourPool.length > 0
625
+ ? this.areaContourPool.map((point) => `areaContourPoolElement: ${point}`).join("\n")
626
+ : "areaContourPool does not contain any elements"
627
+ );
628
+ parts.push("*** explosionOverpressureResults:");
629
+ parts.push(
630
+ this.explosionOverpressureResults && this.explosionOverpressureResults.length > 0
631
+ ? this.explosionOverpressureResults.map((point) => `explosionOverpressureResultsElement: ${point}`).join("\n")
632
+ : "explosionOverpressureResults does not contain any elements"
633
+ );
634
+ parts.push("*** distancesToToxicConcentration:");
635
+ parts.push(
636
+ this.distancesToToxicConcentration && this.distancesToToxicConcentration.length > 0
637
+ ? this.distancesToToxicConcentration.map((point) => `distancesToToxicConcentrationElement: ${point}`).join("\n")
638
+ : "distancesToToxicConcentration does not contain any elements"
639
+ );
640
+ parts.push("*** toxicConcentrationUsed:");
641
+ parts.push(
642
+ this.toxicConcentrationUsed && this.toxicConcentrationUsed.length > 0
643
+ ? this.toxicConcentrationUsed.map((point) => `toxicConcentrationUsedElement: ${point}`).join("\n")
644
+ : "toxicConcentrationUsed does not contain any elements"
645
+ );
646
+ parts.push("*** toxicConcContourPoints:");
647
+ parts.push(
648
+ this.toxicConcContourPoints && this.toxicConcContourPoints.length > 0
649
+ ? this.toxicConcContourPoints.map((point) => `toxicConcContourPointsElement: ${point}`).join("\n")
650
+ : "toxicConcContourPoints does not contain any elements"
651
+ );
652
+ parts.push("*** nToxicConcContourPoints:");
653
+ parts.push(
654
+ this.nToxicConcContourPoints && this.nToxicConcContourPoints.length > 0
655
+ ? this.nToxicConcContourPoints.map((point) => `nToxicConcContourPointsElement: ${point}`).join("\n")
656
+ : "nToxicConcContourPoints does not contain any elements"
657
+ );
658
+ parts.push("*** areaFootprintToxicConc:");
659
+ parts.push(
660
+ this.areaFootprintToxicConc && this.areaFootprintToxicConc.length > 0
661
+ ? this.areaFootprintToxicConc.map((point) => `areaFootprintToxicConcElement: ${point}`).join("\n")
662
+ : "areaFootprintToxicConc does not contain any elements"
663
+ );
664
+ parts.push(`jetFireFlameResult: ${String(this.jetFireFlameResult)}`);
665
+ parts.push(`poolFireFlameResult: ${String(this.poolFireFlameResult)}`);
666
+ parts.push(`resultCode: ${String(this.resultCode)}`);
667
+ parts.push("*** messages:");
668
+ parts.push(`messages: ${this.messages !== undefined ? this.messages : "(None)"}`);
669
+ parts.push(`calculationElapsedTime: ${this.calculationElapsedTime !== undefined ? this.calculationElapsedTime : "(None)"}`);
670
+ parts.push(`operationId: ${this.operationId !== undefined ? this.operationId : "(None)"}`);
671
+
672
+ return parts.join("\n");
673
+ }
674
+ }
675
+
676
+ export class BESSLinkedRunnerCalculationResponse extends CalculationResponseBase {
677
+ exitMaterial: Entities.Material;
678
+ dischargeRecord: Entities.DischargeRecord;
679
+ distancesToJetFireRadiation: number[];
680
+ jetContourPoints: Entities.LocalPosition[];
681
+ nJetContourPoints: number[];
682
+ areaContourJet: number[];
683
+ distancesToFlamConcentration: number[];
684
+ flamConcentrationsUsed: number[];
685
+ flamConcContourPoints: Entities.LocalPosition[];
686
+ nFlamConcContourPoints: number[];
687
+ areaFootprintFlamConc: number[];
688
+ distancesToPoolFireRadiation: number[];
689
+ poolContourPoints: Entities.LocalPosition[];
690
+ nPoolContourPoints: number[];
691
+ areaContourPool: number[];
692
+ explosionOverpressureResults: Entities.ExplosionOverpressureResult[];
693
+ distancesToToxicConcentration: number[];
694
+ toxicConcentrationUsed: number[];
695
+ toxicConcContourPoints: Entities.LocalPosition[];
696
+ nToxicConcContourPoints: number[];
697
+ areaFootprintToxicConc: number[];
698
+ jetFireFlameResult: Entities.FlameResult;
699
+ poolFireFlameResult: Entities.PoolFireFlameResult;
700
+
701
+ /**
702
+ * BESSLinkedRunner calculation response class.
703
+ *
704
+ * @param {Entities.Material} exitMaterial - Exit material from the BESS unit, dependent on BESS chemistry.
705
+ * @param {Entities.DischargeRecord} dischargeRecord - a discharge record entity.
706
+ * @param {number[]} distancesToJetFireRadiation - an array of distances to jet fire radiation levels, ordered according to the flammable output configs.
707
+ * @param {Entities.LocalPosition[]} jetContourPoints - an array of jet fire radiation contour points, ordered according to the flammable output configs.
708
+ * @param {number[]} nJetContourPoints - an array of the number of jet fire radiation contour points, ordered according to the flammable output configs.
709
+ * @param {number[]} areaContourJet - an array of areas of the jet fire contours, ordered according to the flammable output configs.
710
+ * @param {number[]} distancesToFlamConcentration - an array of distances to flammable concentration levels, ordered according to the dispersion output configs for flammable concentrations of interest.
711
+ * @param {number[]} flamConcentrationsUsed - an array of flammable concentration levels used in the calculations, ordered according to the dispersion output configs for flammable concentrations of interest.
712
+ * @param {Entities.LocalPosition[]} flamConcContourPoints - an array of maximum flammable concentration footprint contour points, ordered according to the dispersion output configs for flammable concentrations of interest.
713
+ * @param {number[]} nFlamConcContourPoints - an array of the number of maximum flammable concentration footprint contour points, ordered according to the dispersion output configs for flammable concentrations of interest.
714
+ * @param {number[]} areaFootprintFlamConc - an array of areas of the maximum flammable concentration footprint contours, ordered according to the dispersion output configs for flammable concentrations of interest.
715
+ * @param {number[]} distancesToPoolFireRadiation - an array of distances to pool fire radiation levels, ordered according to the flammable output configs.
716
+ * @param {Entities.LocalPosition[]} poolContourPoints - an array of pool fire radiation contour points, ordered according to the flammable output configs.
717
+ * @param {number[]} nPoolContourPoints - an array of the number of pool fire radiation contour points, ordered according to the flammable output configs.
718
+ * @param {number[]} areaContourPool - an array of areas of the pool fire contours, ordered according to the flammable output configs.
719
+ * @param {Entities.ExplosionOverpressureResult[]} explosionOverpressureResults - an array of explosion overpressure results, ordered according to the explosion output configs.
720
+ * @param {number[]} distancesToToxicConcentration - an array of distances to toxic concentration levels, ordered according to the dispersion output configs for toxic concentrations of interest.
721
+ * @param {number[]} toxicConcentrationUsed - an array of toxic concentration levels used in the calculations, ordered according to the dispersion output configs for toxic concentrations of interest.
722
+ * @param {Entities.LocalPosition[]} toxicConcContourPoints - an array of maximum toxic concentration footprint contour points, ordered according to the dispersion output configs for toxic concentrations of interest.
723
+ * @param {number[]} nToxicConcContourPoints - an array of the number of maximum toxic concentration footprint contour points, ordered according to the dispersion output configs for toxic concentrations of interest.
724
+ * @param {number[]} areaFootprintToxicConc - an array of areas of the maximum toxic concentration footprint contours, ordered according to the dispersion output configs for toxic concentrations of interest.
725
+ * @param {Entities.FlameResult} jetFireFlameResult - a flame results entity, for jet fire.
726
+ * @param {Entities.PoolFireFlameResult} poolFireFlameResult - a pool fire flame results entity, for pool fire.
727
+ */
728
+ constructor(
729
+ exitMaterial: Entities.Material,
730
+ dischargeRecord: Entities.DischargeRecord,
731
+ distancesToJetFireRadiation: number[],
732
+ jetContourPoints: Entities.LocalPosition[],
733
+ nJetContourPoints: number[],
734
+ areaContourJet: number[],
735
+ distancesToFlamConcentration: number[],
736
+ flamConcentrationsUsed: number[],
737
+ flamConcContourPoints: Entities.LocalPosition[],
738
+ nFlamConcContourPoints: number[],
739
+ areaFootprintFlamConc: number[],
740
+ distancesToPoolFireRadiation: number[],
741
+ poolContourPoints: Entities.LocalPosition[],
742
+ nPoolContourPoints: number[],
743
+ areaContourPool: number[],
744
+ explosionOverpressureResults: Entities.ExplosionOverpressureResult[],
745
+ distancesToToxicConcentration: number[],
746
+ toxicConcentrationUsed: number[],
747
+ toxicConcContourPoints: Entities.LocalPosition[],
748
+ nToxicConcContourPoints: number[],
749
+ areaFootprintToxicConc: number[],
750
+ jetFireFlameResult: Entities.FlameResult,
751
+ poolFireFlameResult: Entities.PoolFireFlameResult,
752
+ resultCode: Enums.ResultCode,
753
+ messages: string[],
754
+ calculationElapsedTime: number,
755
+ operationId: string
756
+ ) {
757
+ super();
758
+ this.exitMaterial = exitMaterial;
759
+ this.dischargeRecord = dischargeRecord;
760
+ this.distancesToJetFireRadiation = distancesToJetFireRadiation;
761
+ this.jetContourPoints = jetContourPoints;
762
+ this.nJetContourPoints = nJetContourPoints;
763
+ this.areaContourJet = areaContourJet;
764
+ this.distancesToFlamConcentration = distancesToFlamConcentration;
765
+ this.flamConcentrationsUsed = flamConcentrationsUsed;
766
+ this.flamConcContourPoints = flamConcContourPoints;
767
+ this.nFlamConcContourPoints = nFlamConcContourPoints;
768
+ this.areaFootprintFlamConc = areaFootprintFlamConc;
769
+ this.distancesToPoolFireRadiation = distancesToPoolFireRadiation;
770
+ this.poolContourPoints = poolContourPoints;
771
+ this.nPoolContourPoints = nPoolContourPoints;
772
+ this.areaContourPool = areaContourPool;
773
+ this.explosionOverpressureResults = explosionOverpressureResults;
774
+ this.distancesToToxicConcentration = distancesToToxicConcentration;
775
+ this.toxicConcentrationUsed = toxicConcentrationUsed;
776
+ this.toxicConcContourPoints = toxicConcContourPoints;
777
+ this.nToxicConcContourPoints = nToxicConcContourPoints;
778
+ this.areaFootprintToxicConc = areaFootprintToxicConc;
779
+ this.jetFireFlameResult = jetFireFlameResult;
780
+ this.poolFireFlameResult = poolFireFlameResult;
781
+ this.resultCode = resultCode;
782
+ this.messages = messages;
783
+ this.calculationElapsedTime = calculationElapsedTime;
784
+ this.operationId = operationId;
785
+ }
786
+
787
+ initialiseFromDictionary(data: { [key: string]: unknown }) {
788
+ if (data.exitMaterial) {
789
+ this.exitMaterial = new Entities.Material();
790
+ this.exitMaterial.initialiseFromDictionary(data.exitMaterial as { [key: string]: unknown });
791
+ }
792
+ if (data.dischargeRecord) {
793
+ this.dischargeRecord = new Entities.DischargeRecord();
794
+ this.dischargeRecord.initialiseFromDictionary(data.dischargeRecord as { [key: string]: unknown });
795
+ }
796
+ if (data.distancesToJetFireRadiation && Array.isArray(data.distancesToJetFireRadiation)) {
797
+ this.distancesToJetFireRadiation = data.distancesToJetFireRadiation.map((item) => parseFloat(item));
798
+ }
799
+ if (data.jetContourPoints && Array.isArray(data.jetContourPoints)) {
800
+ this.jetContourPoints = data.jetContourPoints.map(
801
+ (item) => {
802
+ const record = new Entities.LocalPosition();
803
+ record.initialiseFromDictionary(item);
804
+ return record;
805
+ }
806
+ );
807
+ }
808
+ if (data.nJetContourPoints && Array.isArray(data.nJetContourPoints)) {
809
+ this.nJetContourPoints = data.nJetContourPoints.map((item) => parseInt(item));
810
+ }
811
+ if (data.areaContourJet && Array.isArray(data.areaContourJet)) {
812
+ this.areaContourJet = data.areaContourJet.map((item) => parseFloat(item));
813
+ }
814
+ if (data.distancesToFlamConcentration && Array.isArray(data.distancesToFlamConcentration)) {
815
+ this.distancesToFlamConcentration = data.distancesToFlamConcentration.map((item) => parseFloat(item));
816
+ }
817
+ if (data.flamConcentrationsUsed && Array.isArray(data.flamConcentrationsUsed)) {
818
+ this.flamConcentrationsUsed = data.flamConcentrationsUsed.map((item) => parseFloat(item));
819
+ }
820
+ if (data.flamConcContourPoints && Array.isArray(data.flamConcContourPoints)) {
821
+ this.flamConcContourPoints = data.flamConcContourPoints.map(
822
+ (item) => {
823
+ const record = new Entities.LocalPosition();
824
+ record.initialiseFromDictionary(item);
825
+ return record;
826
+ }
827
+ );
828
+ }
829
+ if (data.nFlamConcContourPoints && Array.isArray(data.nFlamConcContourPoints)) {
830
+ this.nFlamConcContourPoints = data.nFlamConcContourPoints.map((item) => parseInt(item));
831
+ }
832
+ if (data.areaFootprintFlamConc && Array.isArray(data.areaFootprintFlamConc)) {
833
+ this.areaFootprintFlamConc = data.areaFootprintFlamConc.map((item) => parseFloat(item));
834
+ }
835
+ if (data.distancesToPoolFireRadiation && Array.isArray(data.distancesToPoolFireRadiation)) {
836
+ this.distancesToPoolFireRadiation = data.distancesToPoolFireRadiation.map((item) => parseFloat(item));
837
+ }
838
+ if (data.poolContourPoints && Array.isArray(data.poolContourPoints)) {
839
+ this.poolContourPoints = data.poolContourPoints.map(
840
+ (item) => {
841
+ const record = new Entities.LocalPosition();
842
+ record.initialiseFromDictionary(item);
843
+ return record;
844
+ }
845
+ );
846
+ }
847
+ if (data.nPoolContourPoints && Array.isArray(data.nPoolContourPoints)) {
848
+ this.nPoolContourPoints = data.nPoolContourPoints.map((item) => parseInt(item));
849
+ }
850
+ if (data.areaContourPool && Array.isArray(data.areaContourPool)) {
851
+ this.areaContourPool = data.areaContourPool.map((item) => parseFloat(item));
852
+ }
853
+ if (data.explosionOverpressureResults && Array.isArray(data.explosionOverpressureResults)) {
854
+ this.explosionOverpressureResults = data.explosionOverpressureResults.map(
855
+ (item) => {
856
+ const record = new Entities.ExplosionOverpressureResult();
857
+ record.initialiseFromDictionary(item);
858
+ return record;
859
+ }
860
+ );
861
+ }
862
+ if (data.distancesToToxicConcentration && Array.isArray(data.distancesToToxicConcentration)) {
863
+ this.distancesToToxicConcentration = data.distancesToToxicConcentration.map((item) => parseFloat(item));
864
+ }
865
+ if (data.toxicConcentrationUsed && Array.isArray(data.toxicConcentrationUsed)) {
866
+ this.toxicConcentrationUsed = data.toxicConcentrationUsed.map((item) => parseFloat(item));
867
+ }
868
+ if (data.toxicConcContourPoints && Array.isArray(data.toxicConcContourPoints)) {
869
+ this.toxicConcContourPoints = data.toxicConcContourPoints.map(
870
+ (item) => {
871
+ const record = new Entities.LocalPosition();
872
+ record.initialiseFromDictionary(item);
873
+ return record;
874
+ }
875
+ );
876
+ }
877
+ if (data.nToxicConcContourPoints && Array.isArray(data.nToxicConcContourPoints)) {
878
+ this.nToxicConcContourPoints = data.nToxicConcContourPoints.map((item) => parseInt(item));
879
+ }
880
+ if (data.areaFootprintToxicConc && Array.isArray(data.areaFootprintToxicConc)) {
881
+ this.areaFootprintToxicConc = data.areaFootprintToxicConc.map((item) => parseFloat(item));
882
+ }
883
+ if (data.jetFireFlameResult) {
884
+ this.jetFireFlameResult = new Entities.FlameResult();
885
+ this.jetFireFlameResult.initialiseFromDictionary(data.jetFireFlameResult as { [key: string]: unknown });
886
+ }
887
+ if (data.poolFireFlameResult) {
888
+ this.poolFireFlameResult = new Entities.PoolFireFlameResult();
889
+ this.poolFireFlameResult.initialiseFromDictionary(data.poolFireFlameResult as { [key: string]: unknown });
890
+ }
891
+ if (data.resultCode !== undefined && (typeof data.resultCode === "string" || typeof data.resultCode === "number")) {
892
+ this.resultCode = data.resultCode as Enums.ResultCode;
893
+ }
894
+ this.messages = this.messages ?? [];
895
+ if (data.messages && Array.isArray(data.messages)) {
896
+ this.messages.push(...data.messages);
897
+ }
898
+ if (data.calculationElapsedTime !== undefined && typeof data.calculationElapsedTime === "number") {
899
+ this.calculationElapsedTime = data.calculationElapsedTime as number;
900
+ }
901
+ if (data.operationId !== undefined && typeof data.operationId === "string") {
902
+ this.operationId = data.operationId as string;
903
+ }
904
+ }
905
+ }
906
+
907
+ export interface BESSLinkedRunnerCalculationResponseSchemaData {
908
+ exitMaterial: Entities.Material;
909
+ dischargeRecord: Entities.DischargeRecord;
910
+ distancesToJetFireRadiation: number[];
911
+ jetContourPoints: Entities.LocalPosition[];
912
+ nJetContourPoints: number[];
913
+ areaContourJet: number[];
914
+ distancesToFlamConcentration: number[];
915
+ flamConcentrationsUsed: number[];
916
+ flamConcContourPoints: Entities.LocalPosition[];
917
+ nFlamConcContourPoints: number[];
918
+ areaFootprintFlamConc: number[];
919
+ distancesToPoolFireRadiation: number[];
920
+ poolContourPoints: Entities.LocalPosition[];
921
+ nPoolContourPoints: number[];
922
+ areaContourPool: number[];
923
+ explosionOverpressureResults: Entities.ExplosionOverpressureResult[];
924
+ distancesToToxicConcentration: number[];
925
+ toxicConcentrationUsed: number[];
926
+ toxicConcContourPoints: Entities.LocalPosition[];
927
+ nToxicConcContourPoints: number[];
928
+ areaFootprintToxicConc: number[];
929
+ jetFireFlameResult: Entities.FlameResult;
930
+ poolFireFlameResult: Entities.PoolFireFlameResult;
931
+ resultCode: Enums.ResultCode;
932
+ messages: string[];
933
+ calculationElapsedTime: number;
934
+ operationId: string;
935
+ }
936
+
937
+ export class BESSLinkedRunnerCalculationResponseSchema {
938
+ schema: Joi.ObjectSchema;
939
+ propertyTypes: Record<string, string>;
940
+
941
+ /**
942
+ * Schema for the BESSLinkedRunner calculation response.
943
+ */
944
+ constructor() {
945
+ this.schema = Joi.object({
946
+ exitMaterial: new EntitySchemas.MaterialSchema().schema,
947
+ dischargeRecord: new EntitySchemas.DischargeRecordSchema().schema,
948
+ distancesToJetFireRadiation: Joi.array().items(Joi.number().unsafe()).allow(null),
949
+ jetContourPoints: Joi.array().items(new EntitySchemas.LocalPositionSchema().schema).allow(null),
950
+ nJetContourPoints: Joi.array().items(Joi.number().integer()).allow(null),
951
+ areaContourJet: Joi.array().items(Joi.number().unsafe()).allow(null),
952
+ distancesToFlamConcentration: Joi.array().items(Joi.number().unsafe()).allow(null),
953
+ flamConcentrationsUsed: Joi.array().items(Joi.number().unsafe()).allow(null),
954
+ flamConcContourPoints: Joi.array().items(new EntitySchemas.LocalPositionSchema().schema).allow(null),
955
+ nFlamConcContourPoints: Joi.array().items(Joi.number().integer()).allow(null),
956
+ areaFootprintFlamConc: Joi.array().items(Joi.number().unsafe()).allow(null),
957
+ distancesToPoolFireRadiation: Joi.array().items(Joi.number().unsafe()).allow(null),
958
+ poolContourPoints: Joi.array().items(new EntitySchemas.LocalPositionSchema().schema).allow(null),
959
+ nPoolContourPoints: Joi.array().items(Joi.number().integer()).allow(null),
960
+ areaContourPool: Joi.array().items(Joi.number().unsafe()).allow(null),
961
+ explosionOverpressureResults: Joi.array().items(new EntitySchemas.ExplosionOverpressureResultSchema().schema).allow(null),
962
+ distancesToToxicConcentration: Joi.array().items(Joi.number().unsafe()).allow(null),
963
+ toxicConcentrationUsed: Joi.array().items(Joi.number().unsafe()).allow(null),
964
+ toxicConcContourPoints: Joi.array().items(new EntitySchemas.LocalPositionSchema().schema).allow(null),
965
+ nToxicConcContourPoints: Joi.array().items(Joi.number().integer()).allow(null),
966
+ areaFootprintToxicConc: Joi.array().items(Joi.number().unsafe()).allow(null),
967
+ jetFireFlameResult: new EntitySchemas.FlameResultSchema().schema,
968
+ poolFireFlameResult: new EntitySchemas.PoolFireFlameResultSchema().schema,
969
+ resultCode: Joi.string().valid(...Object.values(Enums.ResultCode)),
970
+ messages: Joi.array().items(Joi.string()),
971
+ calculationElapsedTime: Joi.number().unsafe(),
972
+ operationId: Joi.string().uuid().allow(null),
973
+ }).unknown(true);
974
+
975
+ this.propertyTypes = {
976
+ exitMaterial: "Entities.Material",
977
+ dischargeRecord: "Entities.DischargeRecord",
978
+ distancesToJetFireRadiation: "number[]",
979
+ jetContourPoints: "Entities.LocalPosition[]",
980
+ nJetContourPoints: "number[]",
981
+ areaContourJet: "number[]",
982
+ distancesToFlamConcentration: "number[]",
983
+ flamConcentrationsUsed: "number[]",
984
+ flamConcContourPoints: "Entities.LocalPosition[]",
985
+ nFlamConcContourPoints: "number[]",
986
+ areaFootprintFlamConc: "number[]",
987
+ distancesToPoolFireRadiation: "number[]",
988
+ poolContourPoints: "Entities.LocalPosition[]",
989
+ nPoolContourPoints: "number[]",
990
+ areaContourPool: "number[]",
991
+ explosionOverpressureResults: "Entities.ExplosionOverpressureResult[]",
992
+ distancesToToxicConcentration: "number[]",
993
+ toxicConcentrationUsed: "number[]",
994
+ toxicConcContourPoints: "Entities.LocalPosition[]",
995
+ nToxicConcContourPoints: "number[]",
996
+ areaFootprintToxicConc: "number[]",
997
+ jetFireFlameResult: "Entities.FlameResult",
998
+ poolFireFlameResult: "Entities.PoolFireFlameResult",
999
+ };
1000
+ }
1001
+
1002
+ validate(data: BESSLinkedRunnerCalculationResponseSchemaData): BESSLinkedRunnerCalculationResponse {
1003
+ const { error, value } = this.schema.validate(data, { abortEarly: false });
1004
+ if (error) {
1005
+ throw new Error(`Validation error: ${error.details.map((x) => x.message).join(", ")}`);
1006
+ }
1007
+ return this.makeCalculationResponse(value);
1008
+ }
1009
+
1010
+ makeCalculationResponse(data: BESSLinkedRunnerCalculationResponseSchemaData): BESSLinkedRunnerCalculationResponse {
1011
+ return new BESSLinkedRunnerCalculationResponse(
1012
+ data.exitMaterial,
1013
+ data.dischargeRecord,
1014
+ data.distancesToJetFireRadiation,
1015
+ data.jetContourPoints,
1016
+ data.nJetContourPoints,
1017
+ data.areaContourJet,
1018
+ data.distancesToFlamConcentration,
1019
+ data.flamConcentrationsUsed,
1020
+ data.flamConcContourPoints,
1021
+ data.nFlamConcContourPoints,
1022
+ data.areaFootprintFlamConc,
1023
+ data.distancesToPoolFireRadiation,
1024
+ data.poolContourPoints,
1025
+ data.nPoolContourPoints,
1026
+ data.areaContourPool,
1027
+ data.explosionOverpressureResults,
1028
+ data.distancesToToxicConcentration,
1029
+ data.toxicConcentrationUsed,
1030
+ data.toxicConcContourPoints,
1031
+ data.nToxicConcContourPoints,
1032
+ data.areaFootprintToxicConc,
1033
+ data.jetFireFlameResult,
1034
+ data.poolFireFlameResult,
1035
+ data.resultCode,
1036
+ data.messages,
1037
+ data.calculationElapsedTime,
1038
+ data.operationId
1039
+ );
1040
+ }
1041
+ }
1042
+
156
1043
  export interface UserDefinedSourceLinkedRunCalculationRequestSchemaData {
157
1044
  material: Entities.Material;
158
1045
  dischargeResult: Entities.DischargeResult;
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/calculations.razor.
12
12
  ***********************************************************************/
13
13
 
package/src/constants.ts CHANGED
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:20
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/constants.razor.
12
12
  ***********************************************************************/
13
13
 
package/src/entities.ts CHANGED
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:21
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/entities.razor.
12
12
  ***********************************************************************/
13
13
 
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:22
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/entityschemas.razor.
12
12
  ***********************************************************************/
13
13
 
package/src/enums.ts CHANGED
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:21
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:29
11
11
  * Template: templates/typescriptpws/enums.razor.
12
12
  ***********************************************************************/
13
13
 
package/src/materials.ts CHANGED
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:20
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:28
11
11
  * Template: templates/typescriptpws/materials.razor.
12
12
  ***********************************************************************/
13
13
 
package/src/utilities.ts CHANGED
@@ -6,8 +6,8 @@
6
6
  * Editing it may lead to inconsistent results and limit DNV's ability to provide support.
7
7
  * Please contact DNV if you believe changes are required.
8
8
  *
9
- * Version: 1.0.84
10
- * Date/time: 09 Jul 2025 09:58:19
9
+ * Version: 1.0.85
10
+ * Date/time: 09 Jul 2025 12:13:28
11
11
  * Template: templates/typescriptpws/utilities.razor.
12
12
  ***********************************************************************/
13
13